首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用c语言编写2048游戏

用c语言编写2048游戏
EN

Stack Overflow用户
提问于 2015-11-29 20:53:44
回答 1查看 2.8K关注 0票数 0

我正在用c语言写一个简单的游戏2048。pull left、pull right、pull up和pull down命令已完成。然而,我认为最重要的部分是,当没有空间生成新的随机数并提取该数时,终止程序。此外,我不能让游戏板不生成一个新的数字,当没有空间来组合相同的数字,也没有空间来拉数字。

以下是我的代码

代码语言:javascript
复制
#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函数之前设置的函数

EN

回答 1

Stack Overflow用户

发布于 2015-11-29 21:13:29

您的代码并不完整,但从外观上看,您可能最终根本不会编织新的瓦片,特别是如果棋盘已经非常拥挤的话。只要你的位置是无效的,你就应该尝试随机放置瓷砖。

当然,如果没有任何有效的位置,你会一遍又一遍地尝试,但没有成功,所以你应该测试棋盘是否已满,即是否所有的瓦片都是非零的。

您可以将拼接新瓷砖和检查棋盘是否已满的操作结合起来。不是重复探测棋盘,而是创建一个有效磁贴的列表,然后选择一个。如果有效的棋子列表为空,则结束游戏。

执行此操作的函数可能如下所示:

代码语言:javascript
复制
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)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33982987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档