一个适合初学者的C++推箱子小游戏
博主最近在学习关于C++的一些基础,这是本人突发奇想做的一个小游戏,编程其实并不难,重要的是,你的思路,以及优化,当然,这个小游戏,本人也是基于一个学习者编写的
本篇文章会教大家用C++基本语句来实现一个推箱子的小游戏。
展示
这是游戏开始时的界面。
当然,如果你喜欢,你可以任意更改地图:
当把所有箱子推到目的地,就完成游戏
思路:
当有一个问题出现的时候,我们首先应该先考虑这个问题有可能的解法:
这里博主想到的方法是
1. 通过二维数组来存储地图信息
2. 通过交换数组元素,来达到角色移动的目的
3. 而推箱子,则让箱子和角色同步移动便可。
4. 移动控制:_getch()
ps:_getch()方法需要头文件conio.h的支持,功能是不需要按回车键便可以得到输入的字符
那么这里我们有了大概的思路,但是再实际操作中,我们发现二维数组并不方便,因为它有两个下标,会加剧问题的复杂度,这里我们用一维数组便可。
移动:我们知道地图是一个方形:要么是m*n,要么就是m^2(正方形);
这里我们简单绘制一个长4,宽4的长方体来说明:
如果我在5的位置,那么我要左移,应该是当前位置 -1,同样,向右便是 +1,向上 -4,向下 +4。
地图:
有了这些知识,我们便可以开始编程了,首先写出地图:
int map[100] = //玩家地图
{
1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,3,0,4,0,0,1,
1,2,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,3,0,4,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,3,0,0,0,0,1,
1,0,0,0,0,0,0,4,0,1,
1,1,1,1,1,1,1,1,1,1
};
上面地图中:0代表空地,1代表墙壁,2代表玩家,3代表箱子,4代表箱子目的地,5代表当人和箱子目的地重合的时候显示的图标,6代表箱子放在正确位置时候的图标
for (int i = 0; i < 100; i++)
{
switch (map[i])
{
case 1:std::cout << "□"; break; //墙壁
case 0:std::cout << " "; break; //空地
case 2:std::cout << "Pe"; break; //人
case 3:std::cout << "■"; break; //箱子
case 4:std::cout << "**"; break; //箱子目的地
case 5:std::cout << "×"; break; //和人重合
case 6:std::cout << "√"; break; //和箱子重合
}
if (i % w == 9)
std::cout << '\n';
}
我们打印一下:
我们发现和我们一维数组里的数字所代表的意义是一样的!
移动:
移动需要记录当前位置和移动的目标位置,比如你向上,那么
当前坐标=(当前坐标-地图宽度)
我们声明如下变量:
int input; //输入常数
int nowpoint=31; //玩家现在的地点
int shift; //玩家目标点
const int w=10; //地图宽度
移动方法如下:
shift = map[nowpoint-w]; //把目标点赋值给shift
map[nowpoint - w] = map[nowpoint];
map[nowpoint] = shift; //移动目标点
nowpoint -= w; //移动当前所处的坐标位置
当然