推箱子小游戏
第一次写出一个完整的小游戏,实现
1.多关卡,
2.重玩,
3.跳过本关
4.进入上一关
的功能。
本人能力有限调试不出撤销此步的代码
还写了挺久的,菜鸡都不算的我希望有一天也可以成为真菜鸡
尚有很多不足之处,请多指正!
主要思路
1.用全局变量存储地图,绘制地图
2.用键盘控制人的走向
3.清空
4.根据走向修改相应地图
5.绘制修改后的地图
问题描述:
**
1.关于地图
a.存储地图
数字0,代表空位
数字1,代表■,表示墙
数字2,代表□,表示箱子
数字3,代表♀,表示人
数字4,代表☆,表示目标位置
数字5,代表◆,表示箱子到达目标位置
数字6,代表♀,表示人在目标位置
int maps[rounds][m][n]=
{
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,0,2,3,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
},
.
.
.
//此处省略多个关卡的地图
注意:为了便于多关卡地图的存储,采用横行40,纵列16的大小。(这样无论哪关的地图比较大,都能随意修改)
最后绘制出的地图是这个样子的滴!
b.绘制地图
写一个函数,实现二维数组的遍历。
数字0,打印“ ”,//空
数字1,打印“■”,//墙
数字2,打印“□”,//箱子
数字3,打印“♀”,//人
数字4,打印“☆”,//目标位置
数字5,打印“◆”,//箱子到达目标位置
数字6,打印“♀”,//人在目标位置
2.用键盘控制
键盘上的键对应不同的ASCII码值。部分如下:
使用getch()函数从键盘输入,再用switch()函数对按下的不同键做出响应。
`go=getch();
switch(go)
{
}`
3.清空
使用#include<windows.h>调用函数库
使用system(“cls”);
//clear screen,懂的都懂【手动滑稽】
然后可以达到清屏的目的。
4.根据走向修改相应地图(关键部分在这里!!)
这里我使用了一个自定义函数move()
①.遍历找到找到人的位置
人在空位
人在目标位置
②分情况讨论
A.人在空位
*** 上
a.若人前是空
b.人前是目标位置
c.若人前是箱子
++++若箱子前面是空
++++若箱子前面是目标位置
d.若人前箱子已经到达目的地
++++箱子前面是目的地
++++箱子前面是空
*** 下
同上
*** 左
同上
*** 右
同上
B.人在目标位置(同上)
*** 上
*** 下
*** 左
*** 右
注意:人在空位和目标位置对应的数值不同,要修改地数值也不同,因此要分开讨论。
5.重绘地图
小功能:
三维数组maps[][][]存储所有地图,
二维数组map[]存储当前地图
1.重玩本关
设置全局变量来记录是否重玩,当用户按下重玩的键,让当前地图等于该关卡地图
2.跳过本关和进入上一关
设置全局变量来记录是否跳过或上一关,当用户按下这两个键,让当前地图等于下一关卡/上一关卡地图
尚有不足
1.本来想把地图存到文件里的,这样代码更简洁,由于技术原因,基本功不扎实,最后没能写出相应代码。
2.想做一个回到上一步的功能,但是好像由于写的代码if else语句嵌套过多,跑不出来,又没想到别的更简单的方法。
源代码注释很详细,另外欢迎大佬指正!
喜欢记得一键三连喔~
!!!私聊源代码和可执行文件喔~
qq:1963615455
xv:zsj15570086208