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

发布时间:2022-02-20 08:24:33 作者:小新
来源:亿速云 阅读:279

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

1.前言

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

2.游戏效果展示

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

3.项目分析

游戏元素:

游戏目的:

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

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

推荐阅读:
  1. 使用C语言如何实现一个推箱子小游戏
  2. 如何基于C语言实现推箱子游戏

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

c语言

上一篇:怎么在linux中创建和管理LVM卷

下一篇:怎么搭建一个时间服务器

相关阅读

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

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