用c语言写2048游戏
时间: 2023-12-08 15:24:06 浏览: 123
好的,下面是一个简单的用C语言编写的2048游戏示例程序。这个程序可以在终端中运行,没有声音,但是实现了基本的游戏逻辑和界面。您可以根据需要进行修改和完善。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define BOARD_SIZE 4
// 游戏棋盘
int board[BOARD_SIZE][BOARD_SIZE];
// 随机数生成器
void init_random() {
srand((unsigned)time(NULL));
}
// 随机生成一个2或4
int random_value() {
return (rand() % 2 + 1) * 2;
}
// 在空闲的位置随机生成一个数
void random_insert() {
int i, j;
do {
i = rand() % BOARD_SIZE;
j = rand() % BOARD_SIZE;
} while(board[i][j] != 0);
board[i][j] = random_value();
}
// 打印游戏界面
void print_board() {
int i, j;
printf("2048 Game\n");
for(i = 0; i < BOARD_SIZE; i++) {
for(j = 0; j < BOARD_SIZE; j++) {
printf("%-5d", board[i][j]);
}
printf("\n");
}
printf("\n");
}
// 初始化游戏
void init_game() {
int i, j;
for(i = 0; i < BOARD_SIZE; i++) {
for(j = 0; j < BOARD_SIZE; j++) {
board[i][j] = 0;
}
}
random_insert();
random_insert();
}
// 判断游戏是否结束
int is_game_over() {
int i, j;
// 检查棋盘是否已满
for(i = 0; i < BOARD_SIZE; i++) {
for(j = 0; j < BOARD_SIZE; j++) {
if(board[i][j] == 0) {
return 0;
}
}
}
// 检查相邻元素是否相同
for(i = 0; i < BOARD_SIZE; i++) {
for(j = 0; j < BOARD_SIZE - 1; j++) {
if(board[i][j] == board[i][j+1] ||
board[j][i] == board[j+1][i]) {
return 0;
}
}
}
return 1;
}
// 合并相邻的相同元素
void merge(int *line, int size) {
int i, j;
for(i = 0; i < size - 1; i++) {
if(line[i] == 0) {
continue;
}
for(j = i + 1; j < size; j++) {
if(line[j] == 0) {
continue;
}
if(line[i] == line[j]) {
line[i] *= 2;
line[j] = 0;
break;
} else {
break;
}
}
}
}
// 向上移动
void move_up() {
int i, j, k;
int line[BOARD_SIZE];
for(j = 0; j < BOARD_SIZE; j++) {
for(i = 0; i < BOARD_SIZE; i++) {
line[i] = board[i][j];
}
merge(line, BOARD_SIZE);
for(i = 0; i < BOARD_SIZE; i++) {
board[i][j] = line[i];
}
}
}
// 向下移动
void move_down() {
int i, j, k;
int line[BOARD_SIZE];
for(j = 0; j < BOARD_SIZE; j++) {
for(i = BOARD_SIZE - 1; i >= 0; i--) {
line[BOARD_SIZE - 1 - i] = board[i][j];
}
merge(line, BOARD_SIZE);
for(i = BOARD_SIZE - 1; i >= 0; i--) {
board[i][j] = line[BOARD_SIZE - 1 - i];
}
}
}
// 向左移动
void move_left() {
int i, j, k;
int line[BOARD_SIZE];
for(i = 0; i < BOARD_SIZE; i++) {
for(j = 0; j < BOARD_SIZE; j++) {
line[j] = board[i][j];
}
merge(line, BOARD_SIZE);
for(j = 0; j < BOARD_SIZE; j++) {
board[i][j] = line[j];
}
}
}
// 向右移动
void move_right() {
int i, j, k;
int line[BOARD_SIZE];
for(i = 0; i < BOARD_SIZE; i++) {
for(j = BOARD_SIZE - 1; j >= 0; j--) {
line[BOARD_SIZE - 1 - j] = board[i][j];
}
merge(line, BOARD_SIZE);
for(j = BOARD_SIZE - 1; j >= 0; j--) {
board[i][j] = line[BOARD_SIZE - 1 - j];
}
}
}
// 处理用户输入
void handle_input() {
char ch = getchar();
switch(ch) {
case 'w':
move_up();
break;
case 's':
move_down();
break;
case 'a':
move_left();
break;
case 'd':
move_right();
break;
case 'q':
exit(0);
break;
}
}
int main() {
init_game();
init_random();
print_board();
while(!is_game_over()) {
handle_input();
random_insert();
print_board();
}
printf("Game Over!\n");
return 0;
}
```
这个程序实现了基本的2048游戏逻辑和界面,但是没有声音。如果您需要添加声音,可以使用相关的音频库,如SDL或OpenAL等。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)