推箱子小游戏

推箱子小游戏

第一次写出一个完整的小游戏,实现
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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千槿°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值