2048小游戏c语言源代码 只用c语言
时间: 2024-06-30 15:01:09 浏览: 6
以下是一个简单的2048小游戏的C语言源代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#define ROWS 4
#define COLS 4
// 游戏状态
enum GAME_STATUS
{
GAME_OVER = -1,
GAME_CONTINUE = 0,
GAME_WIN = 1
};
// 棋盘
int board[ROWS][COLS];
// 随机数生成器
void random(int *x, int *y)
{
int empty_count = 0;
int empty[ROWS * COLS];
// 找到所有空白位置
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
if (board[i][j] == 0)
{
empty[empty_count] = i;
empty[empty_count] = j;
empty_count++;
}
}
}
// 随机选择一个空白位置
if (empty_count > 0)
{
int rand_index = rand() % empty_count;
*x = empty[rand_index];
*y = empty[rand_index];
}
}
// 初始化棋盘
void init_board()
{
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
board[i][j] = 0;
}
}
}
// 在控制台上输出棋盘
void print_board()
{
system("cls");
printf("******************************************\n");
printf("******************************************\n");
printf("************Welcome to 2048 Game***********\n");
printf("******************************************\n");
printf("******************************************\n\n");
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
printf("%4d", board[i][j]);
}
printf("\n\n");
}
}
// 合并相同数字
void merge(int *arr, int *score)
{
for (int i = 0; i < COLS - 1; i++)
{
if (arr[i] == arr[i + 1] && arr[i] != 0)
{
arr[i] *= 2;
*score += arr[i];
arr[i + 1] = 0;
}
}
}
// 向左移动
void move_left()
{
for (int i = 0; i < ROWS; i++)
{
merge(board[i], NULL);
int k = 0;
for (int j = 0; j < COLS; j++)
{
if (board[i][j] != 0)
{
board[i][k++] = board[i][j];
if (j != k - 1)
{
board[i][j] = 0;
}
}
}
}
}
// 向右移动
void move_right()
{
for (int i = 0; i < ROWS; i++)
{
merge(board[i], NULL);
int k = COLS - 1;
for (int j = COLS - 1; j >= 0; j--)
{
if (board[i][j] != 0)
{
board[i][k--] = board[i][j];
if (j != k + 1)
{
board[i][j] = 0;
}
}
}
}
}
// 向上移动
void move_up()
{
for (int j = 0; j < COLS; j++)
{
int arr[ROWS];
int k = 0;
for (int i = 0; i < ROWS; i++)
{
arr[k++] = board[i][j];
}
merge(arr, NULL);
k = 0;
for (int i = 0; i < ROWS; i++)
{
board[k++][j] = arr[i];
}
}
}
// 向下移动
void move_down()
{
for (int j = 0; j < COLS; j++)
{
int arr[ROWS];
int k = ROWS - 1;
for (int i = ROWS - 1; i >= 0; i--)
{
arr[k--] = board[i][j];
}
merge(arr, NULL);
k = ROWS - 1;
for (int i = ROWS - 1; i >= 0; i--)
{
board[k--][j] = arr[i];
}
}
}
// 检查是否胜利
int check_win()
{
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
if (board[i][j] == 2048)
{
return GAME_WIN;
}
}
}
return GAME_CONTINUE;
}
// 检查是否失败
int check_game_over()
{
// 检查是否还有空位
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
if (board[i][j] == 0)
{
return GAME_CONTINUE;
}
}
}
// 检查每个数字是否可以合并
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS - 1; j++)
{
if (board[i][j] == board[i][j + 1])
{
return GAME_CONTINUE;
}
}
}
for (int j = 0; j < COLS; j++)
{
for (int i = 0; i < ROWS - 1; i++)
{
if (board[i][j] == board[i + 1][j])
{
return GAME_CONTINUE;
}
}
}
return GAME_OVER;
}
// 游戏循环
void game_loop()
{
srand(time(NULL));
while (1)
{
int x, y;
random(&x, &y);
board[x][y] = rand() % 10 == 1 ? 4 : 2;
print_board();
int status;
switch (_getch())
{
case 'a':
move_left();
break;
case 'd':
move_right();
break;
case 'w':
move_up();
break;
case 's':
move_down();
break;
default:
continue;
}
status = check_game_over();
if (status == GAME_OVER)
{
printf("Game Over!\n");
break;
}
status = check_win();
if (status == GAME_WIN)
{
printf("You Win!\n");
break;
}
}
}
int main()
{
init_board();
game_loop();
return 0;
}
```
这个源代码使用了C语言,实现了一个简单的2048小游戏。游戏界面使用了控制台输出,用户通过按键盘操作游戏。代码中包含了随机数生成、棋盘操作、游戏状态判断等基本功能。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](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)
![](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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)