用c语言写2048游戏

时间:2015-11-29 12:53:44

标签: c

我正在用c语言写一个简单的游戏2048。 左拉,拉右,上拉和下拉命令完成。 但是,我认为最重要的部分是,当没有空间生成新的随机数并拉出数字时,终止程序。 此外,当没有空间组合相同的号码而没有空间来拉动数字时,我无法让游戏板不生成新号码。

这是我的代码

#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是我在主函数之前设置的函数

1 个答案:

答案 0 :(得分:1)

您的代码并不完整,但从外观来看,您可能最终根本没有铺设新的瓷砖,特别是如果电路板已经非常拥挤。只要您的位置无效,您就应该尝试随机放置磁贴。

当然,如果没有任何有效位置,你会反复尝试而不会成功,所以你应该测试电路板是否已满,即是否所有瓷砖都是非零的。

您可以组合使用新瓷砖并检查电路板是否已满。不是反复探测电路板,而是创建有效磁贴列表,然后选择一个。如果有效磁贴列表为空,则结束游戏。

执行此操作的功能可能看起来很喜欢:

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)。