怎么用C语言实现推箱子
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍"怎么用C语言实现推箱子",在日常操作中,相信很多人在怎么用C语言实现推箱子问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用C语言实现推箱子"的疑惑
千家信息网最后更新 2025年01月18日怎么用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安全错误
数据库的锁怎样保障安全
数据库的字符编码格式
传奇服务器攻击
计算机网络技术真题2020
软件开发管理管理计划
股票看盘软件开发思路
淘宝上的软件开发公司靠谱吗
日本软件开发用什么语言
微晟互联网科技有限公司地址
关于外语软件开发的评价
股票指数数据库
数据库会话状态idie
北京互联网金融科技有限公司
数据库数据转换js
亿美网络技术公司
使命召唤战域连接不了服务器
oracle开本地数据库
企业中网络技术员心得体会
泗洪巨型网络技术解决方案
上海通信网络安全防护测评
青尐年网络安全主讲讲座
电信网络apn服务器怎么弄
阐述公司网络安全措施
软件开发费算什么费用
网络安全手抄报人物网络警察
信息系统与数据库技术刘晓强
吉林通信软件开发服务有哪些
阴阳师怎么找回原来服务器
设计数据库系统需要的语言
剑灵革命服务器怎么架设外网游戏
华为服务器内存损坏