2048c语言程序,C语言实现2048小游戏
时间: 2023-08-27 10:05:41 浏览: 44
下面是一个简单的C语言实现2048小游戏的程序,仅供参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 4
#define COLS 4
int board[ROWS][COLS];
void init_board()
{
int i, j;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
board[i][j] = 0;
}
}
}
void print_board()
{
int i, j;
printf("\n");
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
printf("%d\t", board[i][j]);
}
printf("\n");
}
printf("\n");
}
int generate_random_number(int min, int max)
{
int num;
srand(time(NULL));
num = (rand() % (max - min + 1)) + min;
return num;
}
void generate_new_number()
{
int i, j;
int num = generate_random_number(1, 2) * 2;
do {
i = generate_random_number(0, ROWS - 1);
j = generate_random_number(0, COLS - 1);
} while (board[i][j] != 0);
board[i][j] = num;
}
void move_left()
{
int i, j, k;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS - 1; j++) {
for (k = j + 1; k < COLS; k++) {
if (board[i][k] != 0) {
if (board[i][j] == 0) {
board[i][j] = board[i][k];
board[i][k] = 0;
j--;
} else if (board[i][j] == board[i][k]) {
board[i][j] *= 2;
board[i][k] = 0;
}
break;
}
}
}
}
}
void move_right()
{
int i, j, k;
for (i = 0; i < ROWS; i++) {
for (j = COLS - 1; j > 0; j--) {
for (k = j - 1; k >= 0; k--) {
if (board[i][k] != 0) {
if (board[i][j] == 0) {
board[i][j] = board[i][k];
board[i][k] = 0;
j++;
} else if (board[i][j] == board[i][k]) {
board[i][j] *= 2;
board[i][k] = 0;
}
break;
}
}
}
}
}
void move_up()
{
int i, j, k;
for (j = 0; j < COLS; j++) {
for (i = 0; i < ROWS - 1; i++) {
for (k = i + 1; k < ROWS; k++) {
if (board[k][j] != 0) {
if (board[i][j] == 0) {
board[i][j] = board[k][j];
board[k][j] = 0;
i--;
} else if (board[i][j] == board[k][j]) {
board[i][j] *= 2;
board[k][j] = 0;
}
break;
}
}
}
}
}
void move_down()
{
int i, j, k;
for (j = 0; j < COLS; j++) {
for (i = ROWS - 1; i > 0; i--) {
for (k = i - 1; k >= 0; k--) {
if (board[k][j] != 0) {
if (board[i][j] == 0) {
board[i][j] = board[k][j];
board[k][j] = 0;
i++;
} else if (board[i][j] == board[k][j]) {
board[i][j] *= 2;
board[k][j] = 0;
}
break;
}
}
}
}
}
int check_game_over()
{
int i, j;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
if (board[i][j] == 0) {
return 0;
}
if (i < ROWS - 1 && board[i][j] == board[i + 1][j]) {
return 0;
}
if (j < COLS - 1 && board[i][j] == board[i][j + 1]) {
return 0;
}
}
}
return 1;
}
int main()
{
int choice;
init_board();
generate_new_number();
generate_new_number();
print_board();
do {
printf("Enter your choice (1: left, 2: right, 3: up, 4: down): ");
scanf("%d", &choice);
switch (choice) {
case 1:
move_left();
break;
case 2:
move_right();
break;
case 3:
move_up();
break;
case 4:
move_down();
break;
default:
printf("Invalid choice!");
break;
}
if (!check_game_over()) {
generate_new_number();
print_board();
} else {
printf("Game over!");
break;
}
} while (1);
return 0;
}
```
程序中使用了一个二维数组 `board` 来表示2048游戏的棋盘,其中每个元素代表棋盘上的一个格子,初始值为0。`generate_random_number` 函数用来生成一个随机数,`generate_new_number` 函数用来在空格子上生成一个新的数字。`move_left`、`move_right`、`move_up`、`move_down` 函数分别用来实现向左、向右、向上、向下移动格子的操作。`check_game_over` 函数用来检查游戏是否结束。
在 `main` 函数中,程序先初始化棋盘,生成两个初始数字,并输出棋盘。然后进入循环,每次循环中用户输入一个操作,程序根据用户的选择更新棋盘,并检查游戏是否结束。如果游戏没有结束,则生成一个新的数字并输出棋盘。如果游戏结束,程序退出循环并输出 "Game over!"。