怎么用C语言实现推箱子
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"怎么用C语言实现推箱子",在日常操作中,相信很多人在怎么用C语言实现推箱子问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用C语言实现推箱子"的疑惑
千家信息网最后更新 2026年11月02日怎么用C语言实现推箱子
这篇文章主要介绍"怎么用C语言实现推箱子",在日常操作中,相信很多人在怎么用C语言实现推箱子问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用C语言实现推箱子"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
地图代码修改成函数
注意:每次打印地图的时候要在前面加入system("cls")语句来清除刷新地图,该方法需要用到#include
对上篇文章的推箱子的地图代码进行函数封装,成果如下:
void drawMap() { system("CLS"); // 使用循环,遍历数组(将游戏数据图形化) for (size_t i = 0; i < 10; i++) { for (size_t j = 0; j < 10; j++) { /*printf("%2d", map[i][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"); } }而存储地图的地方可以放在主函数体外面来进行声明。
在这之后如果推到成功点和人走到成功点上仅需要加上case 2+4和case 3+4两个条件即可,具体代码如最后源码所示。
角色移动修改成函数
对角色移动的函数我们需要分为2个函数,一个是来控制角色移动的函数,另一个则是来寻找角色所在位置的坐标。
1寻找角色函数
在该函数中,我们需要对寻找角色,以及判断箱子能否推动做两个功能封装为一个函数,在该函数中,我们要先找到角色的位置,然后对移动的位置进行判断。
// 移动逻辑 参数:int X,int Y X和Y方向的偏移量 void move(int X,int Y) { // 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; } } } // 空地或成功点 map[posX][posY]:主角所在的位置 if (0 == map[posX + X][posY + Y] || 4 == map[posX + X][posY + Y]) { map[posX][posY] -= 2; map[posX + X][posY + Y] += 2; } // 箱子(将箱子从点上推走) else if (3 == map[posX + X][posY + Y] || 3 + 4 == map[posX + X][posY + Y]) { // 箱子上面是空地或成功点 map[posX - 1][posY]: 箱子位置 if (0 == map[posX + (X * 2)][posY + (Y * 2)] || 4 == map[posX + (X * 2)] [posY + (Y * 2)]) { // 当前位置人离开 map[posX][posY] -= 2; map[posX + X][posY + Y] += 2; map[posX + X][posY + Y] -= 3; map[posX + (X * 2)][posY + (Y * 2)] += 3; } } }2角色移动函数
该函数对键盘输入进行处理,并且通过传入2个参数来一次性对移动进行操作,不需要四个方向都需要在写一遍函数,以下写法可以防止用户开大写而移动不了角色。
void heroMove() { // 控制人物移动 // 2 控制(键盘:WSAD(上下左右)) // 需要从键盘获取按键(字符) switch (getch()) { case 'w': case 'W': move(-1, 0); break; case 's': case 'S': move(1, 0); break; case 'a': case 'A': move(0, -1); break; case 'd': case 'D': move(0, 1); break; default: break; } }判断胜利修改成函数
这里用到了C++的bool类型,c语言也是可以使用,如果不想用这种函数,改成int也是可以使用的。
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;}主体函数的实现
这里的思想是,先绘制地图,然后对移动进行判断,直到判断所有的箱子没有后,判定玩家胜利。
int main() { while (!isWin()) // 游戏主循环 { drawMap(); heroMove(); } drawMap(); return 0; }推箱子能实现基本功能的源码
#include#include #include 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, 4, 0, 1, 1, 0, 0, 1 }, { 1, 0, 0, 3, 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 } };/* 函数声明 */ void drawMap(); void heroMove(); void move(int X, int Y); bool isWin();int main() { while (!isWin()) // 游戏主循环 { drawMap(); heroMove(); } drawMap(); return 0; }/* 函数定义 */ // 绘制地图 void drawMap() { system("CLS"); // 使用循环,遍历数组(将游戏数据图形化) for (size_t i = 0; i < 10; i++) { for (size_t j = 0; j < 10; j++) { /*printf("%2d", map[i][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; case 2 + 4: printf("♀"); break; case 3 + 4: printf("★"); break; default: break; } } printf("\n"); } }void heroMove() { // 控制人物移动 // 2 控制(键盘:WSAD(上下左右)) // 需要从键盘获取按键(字符) switch (getch()) { case 'w': case 'W': move(-1, 0); break; case 's': case 'S': move(1, 0); break; case 'a': case 'A': move(0, -1); break; case 'd': case 'D': move(0, 1); break; default: break; } }// 移动逻辑 参数:int X,int Y X和Y方向的偏移量 void move(int X,int Y) { // 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; } } } // 空地或成功点 map[posX][posY]:主角所在的位置 if (0 == map[posX + X][posY + Y] || 4 == map[posX + X][posY + Y]) { map[posX][posY] -= 2; map[posX + X][posY + Y] += 2; } // 箱子(将箱子从点上推走) else if (3 == map[posX + X][posY + Y] || 3 + 4 == map[posX + X][posY + Y]) { // 箱子上面是空地或成功点 map[posX - 1][posY]: 箱子位置 if (0 == map[posX + (X * 2)][posY + (Y * 2)] || 4 == map[posX + (X * 2)] [posY + (Y * 2)]) { // 当前位置人离开 map[posX][posY] -= 2; map[posX + X][posY + Y] += 2; map[posX + X][posY + Y] -= 3; map[posX + (X * 2)][posY + (Y * 2)] += 3; } } }//判断胜利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语言实现推箱子"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
函数
移动
箱子
位置
角色
地图
推箱子
成功
j++
语言
键盘
控制
两个
空地
学习
循环
代码
参数
所在
方向
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中关村互联网 科技集团
互联网和科技创新
互联网中国科技
互联网科技开发公司
深圳科技互联网
北京互联网科技
北京互联网科技有限公司
期待互联网科技
为想互联网科技
世界互联网领先科技成果
鑫亿盛互联网科技
互联网科技ppt模板
奔汉互联网科技
深圳天众互联网科技公司
互联网科技公司实习生
西安小鹰速贷互联网科技有限公司
扫呗互联网科技有限公司
西安左小互联网科技有限公司
互联网的科技体现在哪里
互联网科技博主张洲
鸠鸠互联网科技
成都互联网科技公司
厦门比较好的科技互联网公司
彤创互联网科技有限公司
南平创想时代互联网科技有限公司
佛山市拉法互联网科技有限公司
南通创西澳互联网科技有限公司
神州科技互联网有限公司
广西科技产业互联网是什么
同城互联网络科技