我正在用c语言写一个简单的游戏2048。pull left、pull right、pull up和pull down命令已完成。然而,我认为最重要的部分是,当没有空间生成新的随机数并提取该数时,终止程序。此外,我不能让游戏板不生成一个新的数字,当没有空间来组合相同的数字,也没有空间来拉数字。
以下是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
if (gen_num == 0) {
row = rand() % 4;
column = rand() % 4;
if (board[row][column] == 0) {
board[row][column] = ((rand() % 2) + 1) * 2;
}
}
}
valid_move = 0;
gen_num = 0;
cmd = read_command();
if (cmd == 1){
pull_left(board);
}
if (cmd == 2){
pull_right(board);
}
if (cmd == 3){
pull_up(board);
}
if (cmd == 4){
pull_down(board);
}
if (cmd == 5){
printf("bye :(\n");
exit(0);
}
if (cmd < 1 || cmd>5){
printf("[error] command is between 1 and 5\n\n");
}
for (i = 0; i < 4; i++){
for (j = 0; j < 4; j++){
if (board[i][j] == check_move[i][j])
valid_move++;
}
}
printf("Valid_move = %d\n\n", valid_move);
if (valid_move >= 15){
printf("[Error] Invalid direction!!!\n\n");
gen_num = 1;
}pull_up、pull_down、pull_left、pull_right是我在main函数之前设置的函数
发布于 2015-11-29 21:13:29
您的代码并不完整,但从外观上看,您可能最终根本不会编织新的瓦片,特别是如果棋盘已经非常拥挤的话。只要你的位置是无效的,你就应该尝试随机放置瓷砖。
当然,如果没有任何有效的位置,你会一遍又一遍地尝试,但没有成功,所以你应该测试棋盘是否已满,即是否所有的瓦片都是非零的。
您可以将拼接新瓷砖和检查棋盘是否已满的操作结合起来。不是重复探测棋盘,而是创建一个有效磁贴的列表,然后选择一个。如果有效的棋子列表为空,则结束游戏。
执行此操作的函数可能如下所示:
int place_tile()
{
int pos[16];
int npos = 0;
int i, j, p;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (board[j][i] == 0) pos[npos++] = j*4 + i;
}
}
if (npos == 0) return 0; // no more space
p = pos[rand() % npos];
j = p / 4;
i = p % 4;
board[j][i] = (rand() % 2) ? 2 : 4;
return 1;
}返回值表示是否成功放置了瓦片(1)或未成功放置(0)。
https://stackoverflow.com/questions/33982987
复制相似问题