C语言怎么实现推箱子
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,本文小编为大家详细介绍"C语言怎么实现推箱子",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言怎么实现推箱子"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。具体代码如下#
千家信息网最后更新 2025年11月11日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安全错误
数据库的锁怎样保障安全
金铲铲服务器满了登不上号
拉萨软件开发投标书
云服务器 安全性
打开数据库 sql语句是什么
学计算器网络技术需要什么
阿里云服务器被举报会查封吗
网络技术研发销售
java 多数据库支持
四大行的软件开发中心有前景
关于网络安全的汇报材料
传奇对话框显示与服务器失去连接
江苏智能软件开发行业
武汉优利淘互联网科技有限公司
网络安全职高班会照片
软件开发大会门票
数据库架构需要什么
华为存储服务器怎么管理
应用软件开发实训总结
数据库管理软件发展历程
江苏潮流软件开发
织梦代码里怎么改数据库
广安普及网络安全知识
少年儿童网络安全课堂
传奇服务器有多少玩家
配置文件用什么数据库合适
全校网络安全工作会议
超云服务器bios修改ip
怎样查看数据库端口号
黄浦区口碑好的网络技术
无锡先进网络技术诚信推荐