温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用C语言实现推箱子游戏

发布时间:2022-02-20 08:24:33 来源:亿速云 阅读:216 作者:小新 栏目:开发技术

这篇文章主要为大家展示了“如何使用C语言实现推箱子游戏”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用C语言实现推箱子游戏”这篇文章吧。

    1.前言

    推箱子是c语言的一个经典的项目

    2.游戏效果展示

    如何使用C语言实现推箱子游戏

    3.项目分析

    游戏元素:

    • 空地 0

    • 墙壁 1

    • 角色 2

    • 箱子 3

    • 胜利点 4

    游戏目的:

    玩家控制角色在地图的空地上进行移动,通过推动箱子躲避障碍,将所有的箱子推至胜利点即可成功。

    如何使用C语言实现推箱子游戏

    4.地图实现

    4.1存储地图

    首先存储地图我们使用数组来进行存储,为什么我们会用到char而不是int?是因为int普遍为4字节,char为1字节,我们就可以大大减少存储地图所需要的内存。如果要写多张地图的话,仅仅将数组扩充至三维即可,作者将会在之后的文章进行说明。

    char map[10][10] = 
    { 
        { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, 
        { 1, 0, 0, 0, 0, 1, 0, 0, 0, 1 }, 
        { 1, 0, 0, 0, 0, 1, 4, 0, 0, 1 }, 
        { 1, 0, 0, 0, 0, 1, 1, 0, 0, 1 }, 
        { 1, 0, 0, 0, 0, 1, 0, 0, 0, 1 }, 
        { 1, 0, 0, 2, 0, 0, 0, 0, 0, 1 }, 
        { 1, 1, 1, 1, 0, 0, 3, 0, 0, 1 }, 
        { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, 
        { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, 
        { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } 
    };

    4.2打印地图

    对应地图的打印我们则需要对地图进行遍历,利用switch语句将地图打印在控制台上面。

    for (size_t i = 0; i < 10; i++) 
    { 
        for (size_t j = 0; j < 10; j++) 
        { 
            switch (map[i][j]) 
            {
                case 0: 
                    printf(" "); // 注意一点是两个空格,如果是一个空格的时候会使地图打印出现一些问题 
                    break; 
                case 1: 
                    printf("█"); 
                    break; 
                case 2:     
                    printf("♀"); 
                    break; 
                case 3: 
                    printf("●"); 
                    break; 
                case 4: 
                    printf("☆"); 
                    break; 
                default: 
                    break; 
            } 
        }
        printf("\n"); 
    }

    5.控制角色移动

    5.1找到控制的角色

    int posX = 0, posY = 0; 
    for (size_t i = 0; i < 10; i++) 
    { 
        for (size_t j = 0; j < 10; j++) 
        { 
            if (2 == map[i][j] || 2 + 4 == map[i][j]) 
            { 
                posX = i; 
                posY = j; 
                break; 
                //找到角色,记录其所在的x轴和y轴的坐标
            } 
        } 
    }

    5.2实现移动

    // 控制(键盘:WSAD(上下左右)) 
    // 需要从键盘获取按键(字符) 
    switch (getch()) // getch()该方法需要在开头导入#include <conio.h>
    {
        case 'w': 
        case 'W': 
            printf("向上\n"); 
            /*
            向上逻辑: 
            改变数组元素的值 
            以人为参考 
            上面可能是: 
            空地 移动 
            墙壁 不动 
            成功点 移动 
            箱子 判断箱子上面是个啥 
            空地 移动 
            成功点 移动 
            墙壁 不动 
            另一个箱子 不动 
            */
            // 上面是空地或成功点 map[posX][posY]:主角所在的位置 
            if (0 == map[posX - 1][posY] || 4 == map[posX - 1][posY]) 
            { 
                // 当前位置人离开 
                map[posX][posY] -= 2; 
                // 上面位置人过来 
                map[posX - 1][posY] += 2; 
            }
            // 上面是箱子(将箱子从点上推走) 
            else if (3 == map[posX - 1][posY] || 3 + 4 == map[posX - 1][posY]) 
            { 
                // 箱子上面是空地或成功点 map[posX - 1][posY]: 箱子位置 
                if (0 == map[posX - 2][posY] || 4 == map[posX - 2][posY]) 
                { 
                    // 当前位置人离开 
                    map[posX][posY] -= 2; 
                    // 上面位置人过来 
                    map[posX - 1][posY] += 2; 
                    // 上面位置箱子离开 
                    map[posX - 1][posY] -= 3; 
                    // 上面的上面箱子过来 
                    map[posX - 2][posY] += 3; 
                } 
            }
            break; 
        case 's': 
        case 'S': 
            printf("向下\n"); 
            break; 
        case 'a': 
        case 'A': 
            printf("向左\n"); 
            break; 
        case 'd': 
        case 'D': 
            printf("向右\n"); 
            break; 
        default: 
            break; 
    }

    6.判断胜利

    对地图遍历搜索,如果发现没有箱子的话,就可以判断为胜利。(size_t是C++里面的东西,size_t相当于unsigned int,这里仅做理解即可,可以用int来代替size_t)

    bool isWin() 
    { 
        for (size_t i = 0; i < 10; i++) 
        { 
            for (size_t j = 0; j < 10; j++) 
            { 
                if (map[i][j] == 3) 
                { 
                    return false; 
                } 
            } 
        }
        return true;
    }

    以上是“如何使用C语言实现推箱子游戏”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI