C语言怎么实现推箱子
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本文小编为大家详细介绍"C语言怎么实现推箱子",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言怎么实现推箱子"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。具体代码如下#
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
安徽交通软件开发要多少钱
南京晓庄论文数据库
安卓数据库小程序
软件开发环境fortran
2017服务器系统
数据库中单价数据类型
建筑 数据库
缘梦互联网科技
串口服务器active亮
绝地求连接服务器失败
域名挂在别人服务器上安全吗
游戏软件开发助理做什么的
网络安全挑战赛登录
网店服务器怎么样
GPU服务器和矿机的区别
方舟服务器加载特别慢
快期 服务器条件单
学校校园网络安全宣传
移动数据服务器上市公司
网络安全街头采访
冒险与挖矿数据库服务器
铁路网络安全出过事
用友畅捷通t1数据库下载
中国最大网络安全系统
数据库题sql
监控服务器的别名
创建一流网络安全学院
浙江生鲜软件开发哪家专业
手机短信这么加入数据库
软件开发类附录一般都有什么