用C语言写2048(一)

这是大一下C语言结课时的大作业

虽然很麻烦,有时间一定会改进的(没有时间)

2048这个游戏从很早就接触了,大体规则是这样的:

手指向一个方向滑动,所有格子会向那个方向运动。

相同数字的两个格子,相撞时数字会相加。

每次滑动时,空白处会随机刷新出一个数字的格子。

当界面不可运动时(当界面全部被数字填满时),游戏结束;

当界面中最大数字是2048时,游戏胜利。

当然,玩游戏的时候最后一句话一般是没人管的

所以本小白看后的大体思路是:

先把程序分成四部分就是向上移动,向下移动,向左移动,向右移动

然后编程完成一个方向的操作

最后把其余方向的操作变换成这个方向的操作

完事收工走人(关机,拔电源,下楼,吃饭…)

单方向的代码:(我选择的方向是向左)

void execute(int num[])
{
 int i,k;
 if(num[0]!=0||num[1]!=0||num[2]!=0||num[3]!=0)
 for(i=0;i<N;i++)
   for(k=0;k<4;k++)
    if(num[i]==0)
     move(num,i); //去掉单条数组向单方向中所有的0 
 for(i=0;i<N-1;i++)
 {
  if(num[i]==0)
   break;//单条数组中的数全是0
  if(num[i]==num[i+1])
  {
   num[i]+=num[i+1];
   move(num,i+1);
  }     //单条数组单方向的操作  
 } 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的用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等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值