获取方向键的功能:使用getch.h头文件中的getch函数
1、把windows中的getch.h头文件放到共享文件夹中
2、终端输入 cd /media/sf_GONGXIANG进入共享文件夹
3、sudo cp getch.h /usr/include
4、cd /usr/include/
5、sudo chmod +r getch.h头文件中的getch函数

time.h time(NULL):获取1970-1-1 00:00:00到目前为止过了多少秒

走迷宫(不使用自定义函数)

1、定义一个字符型的二维数组作为迷宫图案
2、定义变量记录老鼠的位置
3、获取游戏开始时间
4、进入死循环1、清理屏幕2、显示地图(遍历二维数组)3、判断是否到达出口是:获取游戏结束时间,计算一共花了多少时间程序结束4、获取方向键并处理
#include<stdio.h>
#include<getch.h>
#include<time.h>int main(int argc,const char* argv[])
{char maze[10][10]={{'#','#','#',' ','#','#','#','#','#','#'}, {'#','@','#',' ',' ','#',' ',' ',' ','#'}, {'#',' ','#','#',' ','#',' ','#',' ','#'},  {'#',' ','#',' ',' ','#',' ','#',' ','#'},  {'#',' ','#',' ','#','#',' ','#',' ','#'},  {'#',' ','#',' ',' ',' ',' ','#',' ','#'},  {'#',' ','#','#','#','#','#','#',' ','#'},  {'#',' ','#',' ',' ',' ','#','#',' ','#'},  {'#',' ',' ',' ','#',' ',' ',' ',' ','#'},  {'#','#','#','#','#','#','#','#','#','#'},  };//出口0.3//定义变量老鼠的位置int m_x=1,m_y=1;//获取游戏开始时间time_t start=time(NULL);while(1){//清屏system("clear");//显示地图for(int i=0;i<10;i++){for(int j=0;j<10;j++){printf("%c ",maze[i][j]);   }printf("\n");}if(m_x==0 && m_y==3){time_t end=time(NULL);printf("用时%d秒",-start+end);return 0;}//获取方向兼并处理switch(getch()){case 183:if(maze[m_x-1][m_y]==' '){maze[m_x-1][m_y]='@';maze[m_x][m_y]=' ';m_x--;}break;case 184:if(maze[m_x+1][m_y]==' '){maze[m_x+1][m_y]='@';maze[m_x][m_y]=' ';m_x++;}break;case 186:if(maze[m_x][m_y-1]==' '){maze[m_x][m_y-1]='@';maze[m_x][m_y]=' ';m_y--;}break;case 185:if(maze[m_x][m_y+1]==' '){maze[m_x][m_y+1]='@';maze[m_x][m_y]=' ';m_y++;}break;}}
}

推箱子(不使用自定义函数)

1、确定数字与字符的关系0    路         1    墙   #2    人   &3    箱   @4    终   o6    人+终   显示人7    箱+终   显示箱2、定义并初始化整形地图
char map[8][8]=
{{0,0,1,1,1,1,0,0},{0,0,1,4,4,1,0,0},{0,1,1,0,4,1,1,0},{0,1,0,0,3,4,1,0},{1,1,0,3,0,0,1,1},{1,0,0,1,3,3,0,1},{1,0,0,2,0,0,0,1},{1,1,1,1,1,1,1,1},
}
3、定义记录小人位置的坐标 6.3
4、进入死循环   1、清理屏幕2、显示地图(遍历二维数组)3、检查是否完成任务查7的个数完成显示步数,结束程序4、获取方向键并处理1、前面墙(不考虑)2、路或目标点参考迷宫3、箱子箱子前是路或目标点,推箱子前是墙,不动
#include<stdio.h>
#include<getch.h>
#include<stdlib.h>
int main(int argc,const char* argv[])
{int map[8][8]= {{0,1,1,1,1,0,0,0},{0,1,2,0,1,1,1,0},{0,1,0,3,0,0,1,0},{1,1,1,0,1,0,1,1},{1,4,1,0,1,0,0,1},{1,4,0,3,0,1,0,1},{1,4,0,0,3,0,0,1},{1,1,1,1,1,1,1,1},};int rx=1,ry=2;int step=0;while(1){int num7=0;system("clear");for(int i=0;i<8;i++){for(int j=0;j<8;j++){switch(map[i][j]){case 0:printf("  ");break;case 1:printf("# ");break;case 2:printf("& ");break;case 3:printf("@ ");break;case 4:printf("o ");break;case 6:printf("& ");break;case 7:printf("@ ");num7++;break;}}printf("\n");}if(3==num7){printf("步数=%d",step);return 0;}switch(getch()){case 183://upif(map[rx-1][ry]==0 || map[rx-1][ry]==4){map[rx][ry] -= 2;map[rx-1][ry] += 2;rx--;step++;}else if(map[rx-1][ry]==3 || map[rx-1][ry]==7){if(map[rx-2][ry]==0 || map[rx-2][ry]==4){map[rx-2][ry] += 3;map[rx-1][ry] -= 1;map[rx][ry] -= 2;rx--; step++;}}break;   case 184://downif(map[rx+1][ry]==0 || map[rx+1][ry]==4){map[rx][ry] -= 2;map[rx+1][ry] += 2;rx++;step++;}else if(map[rx+1][ry]==3 || map[rx+1][ry]==7){if(map[rx+2][ry]==0 || map[rx+2][ry]==4){map[rx+2][ry] += 3;map[rx+1][ry] -= 1;map[rx][ry] -= 2;rx++;  step++;}}break;   case 186://leftif(map[rx][ry-1]==0 || map[rx][ry-1]==4){map[rx][ry] -= 2;map[rx][ry-1] += 2;ry--;step++;}else if(map[rx][ry-1]==3 || map[rx][ry-1]==7){if(map[rx][ry-2]==0 || map[rx][ry-2]==4){map[rx][ry-2] += 3;map[rx][ry-1] -= 1;map[rx][ry] -= 2;ry--;   step++;}}break;   case 185://rightif(map[rx][ry+1]==0 || map[rx][ry+1]==4){map[rx][ry] -= 2;map[rx][ry+1] += 2;ry++;step++;}else if(map[rx][ry+1]==3 || map[rx][ry+1]==7){if(map[rx][ry+2]==0 || map[rx][ry+2]==4){map[rx][ry+2] += 3;map[rx][ry+1] -= 1;map[rx][ry] -= 2;ry++;step++;}}break;    }}
}

下面是提取重复部分后的代码

#include<stdio.h>
#include<getch.h>
#include<stdlib.h>
int main(int argc,const char* argv[])
{int map[8][8]= {{0,1,1,1,1,0,0,0},{0,1,2,0,1,1,1,0},{0,1,0,3,0,0,1,0},{1,1,1,0,1,0,1,1},{1,4,1,0,1,0,0,1},{1,4,0,3,0,1,0,1},{1,4,0,0,3,0,0,1},{1,1,1,1,1,1,1,1},};int rx=1,ry=2;int step=0;while(1){int num7=0;system("clear");for(int i=0;i<8;i++){for(int j=0;j<8;j++){switch(map[i][j]){case 0:printf("  ");break;case 1:printf("# ");break;case 2:printf("& ");break;case 3:printf("@ ");break;case 4:printf("o ");break;case 6:printf("& ");break;case 7:printf("@ ");num7++;break;}}printf("\n");}if(3==num7){printf("步数=%d",step);return 0;}//偏移int ox=0,oy=0;switch(getch()){case 183:ox--;break;//upcase 184:ox++;break;//downcase 186:oy--;break;//leftcase 185:oy++;break;//right }if(map[rx+ox][ry+oy]==0 || map[rx+ox][ry+oy]==4){map[rx][ry] -= 2;map[rx+ox][ry+oy] += 2;rx +=ox;ry +=oy;step++;}else if(map[rx+ox][ry+oy]==3 || map[rx+ox][ry+oy]==7){if(map[rx+ox+ox][ry+oy+oy]==0 || map[rx+ox+ox][ry+oy+oy]==4){map[rx+ox+ox][ry+oy+oy] += 3;map[rx+ox][ry+oy] -= 1;map[rx][ry] -= 2;rx +=ox;ry +=oy; step++;}}}
}

学习笔记6-小项目-走迷宫、推箱子相关推荐

  1. C语言小项目——走迷宫

    C语言小项目--走迷宫 设计方向: 1.定义二维字符数组作为迷宫 2.定义变量记录老鼠的位置 3.判定移动后位置的变化 4.记录游戏时长 5.判定到达终点的条件 总体设计: 1.用不同字符代表墙.老鼠 ...

  2. getch.h与走迷宫推箱子的简单实现

    1.在windows中把getch.h放入共享文件夹 2.在Ubuntu终端输入cd /media/sf_Share/ 进入共享文件夹 3.复制getch.h到C标准库中 sudo cp getch. ...

  3. Python学习笔记--Flask小项目之仿豆瓣电影界面

    目录 知识点 效果图 前期准备 创建项目 创建视图 创建模板 1. 创建宏 第一个宏(itemGroup) 第二个宏(listGroup) 2. 创建父模板 3. 创建首页模板 4. 创建" ...

  4. NDK学习笔记:RtmpPusher之利用rtmpdump推h264/aac码流

    NDK学习笔记:RtmpPusher之利用rtmpdump推h264/aac码流 本篇将是 RtmpPusher 的最后一篇.在之前的3篇文章里,我们已经把原生的视频YUV格式编码成h264,把音频的 ...

  5. webpack入门学习笔记10 —— 在项目中使用图片资源

    1. 写在前面 在前端项目中,图片是必不可少的一种资源.在使用图片的时候,我们可以有以下几种方式: 在 .html 文件中,通过 <img src="" alt=" ...

  6. java课设小迷宫含代码_Java小项目之迷宫游戏的实现方法

    项目要求: 一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格.任何时候都不能在有 ...

  7. java 迷宫游戏_Java小项目之迷宫游戏的实现方法

    项目要求: 一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格.任何时候都不能在有 ...

  8. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(复杂迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(复杂迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

  9. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(简单迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

  10. Scrapy:学习笔记(2)——Scrapy项目

    Scrapy:学习笔记(2)--Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为"demo" scrapy startproject demo cd demo ...

最新文章

  1. MATLAB_no.1:入门作业_histeq():_imhist()_(男孩的三个图,以及文字描述)
  2. python 做山水画_服了!年度最强的编程语言来了!它不是Python!
  3. Cisco认证(CCNA,CCNP,CCIE)体系中文书籍全集书籍
  4. ubuntu 交叉编译 armv7_32 ffmpeg x264(已完成)
  5. 前端:几个操作URL的实用函数
  6. 02-第二章 基本类型
  7. idea创建javaweb项目连接mysql【HTTP Status 500】
  8. css 禁止录入中文
  9. LuoguP3045牛券Cow Coupons
  10. 软件工程能调剂到计算机么,愿意调剂到计算机专业或软件工程专业
  11. java oracle数据备份_Java实现Oracle数据库备份
  12. 南向接口 YANG 文件定义规范
  13. vue实现刷新页面,页面回到顶部
  14. vmware虚拟服务器数据备份,爱数VMware虚拟化平台备份恢复方案.pdf
  15. 阿里云免费服务器搭建个人博客
  16. imx6ul 驱动详解
  17. 教师节,给老师们写一个随机点名的网页
  18. srv.exe蠕虫病毒~
  19. R语言入门——高质量保存图片(想毕业咋就那么难!!!)
  20. STM32踩坑1-SWD下载失败

热门文章

  1. 2008日志清理 server sql_SQL Server 2008 收缩日志 清空删除大日志文件
  2. 云计算的认识和看法_云存储已经成为存储的未来,你的存储跟上节奏了吗?
  3. 为Cubieboard打造完美Debian系统
  4. 像postman上传文件_90%的测试工程师是这样使用Postman做接口测试的……
  5. linux suse11 nfs,suse11 nfsserver服务安装
  6. matlab表达式部分项求和,matlab如何得到符号表达式中某一部分项的系数
  7. 锐炬显卡可以linux吗,Intel Broadwell桌面CPU性能测试:Iris Pro 6200核显无敌了
  8. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<矩阵和随机数>python)
  9. 【转】c#中@的3种作用
  10. imp命令导入指定表_Oracle—— 导入/导出 数据:exp,imp 命令