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

获取方向键的功能:使用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++;}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记7-C语言-进制转换、原返补、位运算、函数

进制转换 为什么要使用二、八进制、十六进制&#xff1f;因为现在的CPU只能识别高低两种电流&#xff0c;因此只能对二进制数据进行运算二进制数据虽然可以直接被cpu识别&#xff0c;但不方便人们书写、记录&#xff0c;所以把二进制数据转换成八进制是为了方便记录在文件中。…

学习笔记8-作业

作业1&#xff1a;实现一个函数&#xff0c;判断一个整数是否是素数&#xff0c;调用该函数来显示出100~10000之间的所有素数 #include<stdio.h> #include<stdbool.h> #include<math.h> bool is_sushu(int num) {for(int i2;i<sqrt(num);i){if(num%i0)re…

学习笔记9-C语言-传参、类型限定符、递归

函数传参&#xff1a; 1、形参变量属于它所在的函数&#xff0c;出了该函数就不能使用 2、实参与形参之间都是以赋值的形式进行数据传递&#xff08;值传递&#xff09; 3、return 其实是把返回值数据放置到一个公共的区域&#xff08;函数和函数调用者&#xff09;&#xff0…

Oracle创建视图实现获取当前数据所在的页数,这里以每页2条数据分页

摘要&#xff1a;Oracle创建视图实现获取当前数据所在的页数&#xff0c;这里以每页2条数据分页&#xff0c;详细请看&#xff1a; 一&#xff1a; DROP VIEW MIP.TB_CMS_FLGTINFO_D_VIEW;/* Formatted on 2014/12/4 8:35:36 (QP5 v5.115.810.9015) */ CREATE OR REPLACE FOR…

学习笔记10-C语言-小项目-五子棋

小项目&#xff1a; 需要的数据 1、定义棋盘的二维数组 2、定义变量用于记录下棋的坐标 3、定义角色 黑棋 O 白棋 * 空位业务逻辑&#xff1a; 是否需要对数据初始化 for(;;) {1、清屏、显示棋盘2、落子坐标是否合法、该位置是否有棋子3、判断是否五子连珠4、交换角色5、显示…

学习笔记11-C语言-指针

什么是指针&#xff1a; 指针是一种特护的数据类型&#xff0c;使用它可以定义指针变量&#xff0c;指针变量存储的是整型数据&#xff0c;代表内存的编号&#xff0c;通过这个编号可以访问到对应内存。为什么使用指针 1、函数与函数之间是相互独立的&#xff0c;但是有些时候…

学习笔记12-C语言-堆内存、字符串

什么是堆内存&#xff1a; 是进程中的一个内存段&#xff08;text\data\bss\heap\stack&#xff09;&#xff0c;由程序猿手动控制。 特点是足够大&#xff0c;缺点是使用麻烦为什么要使用堆内存&#xff1a; 1、随着程序的复杂&#xff0c;数据会越来越多。 2、其他的内存段…

学习笔记13-C语言-字符串函数、缓冲区

字符串的常用函数: #include<string.h> size_t strlen(const char* s); 功能&#xff1a;计算字符串长度&#xff0c;但是结果不包括\0 返回值&#xff1a;返回字符串中字符的个数size_t str_len(const char* str) {assert(NULL ! str);const char* tmp str;while(*tmp…

Oracle数据库里面查询字符串类型的字段不为空和为空的SQL语句:

摘要&#xff1a;近期项目中&#xff0c;在做高级查询的时候有个条件是根据选择的字段&#xff0c;然后再选择字段的值为空和不为空做查询&#xff0c;在写SQL语句的时候费了很长时间&#xff0c;现在记录一下&#xff0c;方便日后查看&#xff1a; 一&#xff1a;查询字符串类…

学习笔记14-C语言-小项目-通讯录

通讯录&#xff1a; 要求&#xff1a; 姓名&#xff0c;性别、电话&#xff0c;最多储存50个联系人 功能&#xff1a;1、添加联系人2、按名字删除联系人3、按姓名修改联系人信息4、查找联系人&#xff0c;可通过电话&#xff0c;名字查找&#xff0c;支持模糊查找5、显示所有联…

学习笔记15-C语言-预处理指令、条件编译、头文件

预处理指令&#xff1a; 程序猿编写的代码不是标准C代码&#xff0c;并不能被真正的编译器索编译&#xff0c;需要一段程序把代码翻译一下。 翻译的过程叫做预处理&#xff0c;被翻译的代码叫做预处理指令&#xff0c;以#开头的都是预处理指令查看预处理的过程&#xff1a;gcc…

学习笔记16-C语言-小项目-使用Makefile完成2048

Makefile: Makefile是一系列编译指令组成的可执行文本&#xff0c;也叫做编译脚本。 在终端执行make命令会自动执行Makefile脚本中的编译命令&#xff0c; 而且它还可以根据文件的最后修改时间来判断哪些文件是否需要重新编译、哪些文件不需要重新编译&#xff0c;从而大大提高…

学习笔记17-C语言-结构、联合、枚举

结构&#xff1a; struct 结构是由程序猿自己设计的一种数据类型&#xff0c;用于描述一个事务的各项数据&#xff0c;由若干个不同的基础数据类型组成。设计结构&#xff1a;struct 结构体名{类型 成员名&#xff1b;...}&#xff1b;定义结构体变量struct 结构体名 变量名&a…

Maven 3.0.5 安装和配置:

摘要&#xff1a;现在的Web项目越来越多的都用maven管理了&#xff0c;所以我也抽时间学习学习&#xff0c;为了赶上时代&#xff01; 一&#xff1a;首先到maven官网&#xff1a;http://maven.apache.org/&#xff0c;然后选择相应的版本下载&#xff0c;我这里下载的是maven…

学习笔记18-C语言-文件

文件的分类&#xff1a; 文本文件&#xff1a; 存储的是ASCII码值的二进制 二进制文件&#xff1a; 存储的是数据的补码文件IO&#xff1a; FILE *fopen(const char *path, const char *mode); 功能&#xff1a;打开或者创建文件 path&#xff1a;文件的路径 mode&#x…

使用INNER JOIN ON 多表关联查询,获取指定用户下指定权限的资源SQL:

摘要&#xff1a;最近在看一个开源框架&#xff0c;其中用户&#xff0c;角色&#xff0c;资源&#xff0c;这块我感觉比较重要&#xff0c;所以就自己也模仿着写了下&#xff0c;其中在获取指定用户下的权限资源的时候遇到问题了&#xff0c;开始时&#xff0c;我首先想到的方…

Maven学习记录之maven基本操作命令,maven本地工厂的创建,maven骨架的生成,以及在eclipse中创建maven工程:...

摘要&#xff1a;今天又学习了一下maven&#xff0c;之前是下载并安装和配置好了maven的环境&#xff0c;今天主要学习的内容包括&#xff1a;maven本地工厂的创建&#xff0c;maven骨架的生成命令&#xff0c;maven在dos下创建maven工程&#xff0c;以及在eclipse中创建mavne工…

Oracle中通过游标执行带参数的存储过程实现解析CLOB字段内的xml字符串:

摘要&#xff1a;近来之前的项目数据出现了问题&#xff0c;原因是由于之前在设计数据库的时候把时间字段设置成了字符串格式&#xff0c;所以给后期的数据操作带来了很大的麻烦&#xff0c;这里提醒一下各位程序猿&#xff0c;以后在开发项目的时候时间字段一定要是时间字段&a…

Eclipse中使用Checkstyle,checkstyle插件检查java代码的自定义配置文件:

摘要&#xff1a;近来项目组在搞代码检查&#xff0c;所以领导让把checkstyle这个插件搞明白&#xff0c;现在我把我们写的自定义的checkstyle.xml文件记录一下&#xff0c;以便大家可以一起使用&#xff1a; 一&#xff1a;要使用checkstyle插件在eclipse中检查java代码&…

Linux 下安装 jdk-7u75-linux-x64.gz,jdk1.7.0_75,jdk1.7步骤:

摘要&#xff1a;近来又用到了Linux系统&#xff0c;所以就又新装了一个虚拟机和CentOS 6.4来用&#xff0c;搞开发的程序猿们可能都知道&#xff0c;在现在的很多企业中&#xff0c;生产环境大多都是Linux服务器&#xff0c;并且用的比较多的大都是CentOS&#xff0c;Red hat系…