C语言怎么实现推箱子
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本文小编为大家详细介绍"C语言怎么实现推箱子",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言怎么实现推箱子"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。具体代码如下#
千家信息网最后更新 2026年11月03日C语言怎么实现推箱子
本文小编为大家详细介绍"C语言怎么实现推箱子",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言怎么实现推箱子"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
具体代码如下
#include#include #include //调用getch函数int main(){ char arr[8][8] = { {0,0,3,3,3,3,0,0}, {0,0,3,5,5,3,0,0}, {0,3,3,0,5,3,3,0}, {0,3,0,0,4,5,3,0}, {3,3,0,4,0,0,3,3}, {3,0,0,3,4,4,0,3}, {3,0,0,2,0,0,0,3}, {3,3,3,3,3,3,3,3}};//定义一个二位数组,模拟地图 int m_x=6,m_y=3;//给定人的位置 int cnt=0; while(1)//进入死循环,达到给定条件才能结束循环 { int cnt2=0; system("clear");//清理屏幕 for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { if(arr[i][j]==0) printf(" "); else if(arr[i][j]==2) printf("@"); else if(arr[i][j]==3) printf("#"); else if(arr[i][j]==4) printf("$"); else if(arr[i][j]==5) printf("o"); else if(arr[i][j]==7) printf("@"); else if(arr[i][j]==9) { printf("$");//每一个数字代表的字符并打印 cnt2++;箱子进入指定位置+1 } } printf(""); } if(cnt2==4)//所有箱子到达给定位置,结束循环 { printf("恭喜过关!一共走了%d步!",cnt); return 0; } switch(getch())//获取方向键 { case 183:if(arr[m_x-1][m_y]!=3)//183 方向键 上,判断下个位置是否是墙 { if(arr[m_x-1][m_y]==0||arr[m_x-1][m_y]==5)//判断下个位置是否是路 { arr[m_x-1][m_y]+=2;//小人到达下一个位置 arr[m_x--][m_y]-=2;//原位置清空 } else if(arr[m_x-1][m_y]==4||arr[m_x-1][m_y]==9)//判断下个位置是否是箱子 { if(arr[m_x-2][m_y]!=3&&arr[m_x-2][m_y]!=4)//判断下下个位置是否是路 { arr[m_x-2][m_y]+=4;//下下个位置变成箱子 arr[m_x-1][m_y]-=2;//下个位置变成人 arr[m_x--][m_y]-=2;//原位置清空 } } } break; case 184:if(arr[m_x+1][m_y]!=3)//方向键 下 { if(arr[m_x+1][m_y]==0||arr[m_x+1][m_y]==5) { arr[m_x+1][m_y]+=2; arr[m_x++][m_y]-=2; } else if(arr[m_x+1][m_y]==4||arr[m_x+1][m_y]==9) { if(arr[m_x+2][m_y]!=3&&arr[m_x+2][m_y]!=4) { arr[m_x+2][m_y]+=4; arr[m_x+1][m_y]-=2; arr[m_x++][m_y]-=2; } } } break; case 185:if(arr[m_x][m_y+1]!=3)//放向键 右 { if(arr[m_x][m_y+1]==0||arr[m_x][m_y+1]==5) { arr[m_x][m_y+1]+=2; arr[m_x][m_y++]-=2; } else if(arr[m_x][m_y+1]==4||arr[m_x][m_y+1]==9) { if(arr[m_x][m_y+2]!=3&&arr[m_x+2][m_y]!=4) { arr[m_x][m_y+2]+=4; arr[m_x][m_y+1]-=2; arr[m_x][m_y++]-=2; } } } break; case 186:if(arr[m_x][m_y-1]!=3)//方向键 左 { if(arr[m_x][m_y-1]==0||arr[m_x][m_y-1]==5) { arr[m_x][m_y-1]+=2; arr[m_x][m_y--]-=2; } else if(arr[m_x][m_y-1]==4||arr[m_x][m_y-1]==9) { if(arr[m_x][m_y-2]!=3&&arr[m_x][m_y]!=4) { arr[m_x][m_y-2]+=4; arr[m_x][m_y-1]-=2; arr[m_x][m_y--]-=2; } } } break; } cnt++;//计算走的步数 } return 0;}
下面是获取方向键的函数具体代码
#ifndef GETCH_H#define GETCH_H#include#include #include // 修改终端的控制方式,1取消回显、确认 2获取数据 3还原static int getch(void){ // 记录终端的配置信息 struct termios old; // 获取终端的配置信息 tcgetattr(STDIN_FILENO,&old); // 设置新的终端配置 struct termios _new = old; // 取消确认、回显 _new.c_lflag &= ~(ICANON|ECHO); // 设置终端配置信息 tcsetattr(STDIN_FILENO,TCSANOW,&_new); // 在新模式下获取数据 unsigned int key_val = 0; do{ key_val = key_val+getchar(); }while(stdin->_IO_read_end - stdin->_IO_read_ptr); // 还原配置信息 tcsetattr(STDIN_FILENO,TCSANOW,&old); return key_val; }#endif//GETCH_H
0表示空格,@表示小人,#表示墙,$表示箱子,O表示箱子需要到达的位置,数字7是人与O位置的重合,数字9是箱子与O位置的重合,也就是到达了指定位置。
读到这里,这篇"C语言怎么实现推箱子"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
位置
箱子
个位
方向
终端
配置
信息
推箱子
语言
数字
文章
循环
代码
内容
函数
原位
小人
数据
妥当
也就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技网
美国互联网科技巨头监管
喔噻互联网科技
奇酷互联网科技公司
奇酷互联网络科技
上海致骋互联网科技
多迪互联网科技有限公司
互联网科技创新企业排名
互联网软件和科技
赶超互联网科技 微信多开
开一家科技互联网公司需要多少钱
深圳市罗太互联网科技有限公司
恒生互联网科技业指数调整周期
区块链结合互联网科技
北京市互联网新科技
昆明中奇联合互联网科技
普陀区互联网教育科技管理办法
西安左小互联网科技有限公司
北京军民互联网科技公司
陕西彩京云互联网科技有限公司
广州百单互联网科技有限公司
互联网科技卖菜
广州宏创互联网科技
朗涯互联网科技
互联网 新科技
互联网科技咨询
重庆互联网医院沙龙医盟信息科技
深圳市优智互联网科技有限公司
好易买互联网科技
10位科技互联网大佬