提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在学习C语言的数组知识后,我们通常会想能够用这个来干什么呢?下面我们就用数组来实现一款经典的游戏——推箱子。
一、地图思考
在终端地图中,我们使用一个个像素点来绘制地图,通过不同的数值,来使像素点显示不同字符图形,如下效果所示
我们可以通过定义自己的字符图形数组,通过不同的数值变量数组,再从终端输出就可得到以上效果,在以下数组中,firstMap就是我们的图形数组:
/*
⊕------把球推到框里 7
♀-----人 5
●-------球 4
○-------框 3
■----墙 1
两个空格:表示空地 0
*/
char Pic[][3] = {
" ", "■", " ", "○", "●", "♀", " ", "⊕"};
int firstMap[10][10] = {
1,1,1,1,1,1,1,1,1,1,
1,3,1,1,0,0,0,4,3,1,
1,4,1,0,0,1,1,1,1,1,
1,0,0,0,1,1,1,1,1,1,
1,1,0,0,0,5,0,0,1,1,
1,1,4,0,1,1,1,4,1,1,
1,1,3,0,0,0,0,3,1,1,
1,1,0,0,1,1,1,1,1,1,
1,3,4,0,0,0,4,3,1,1,
1,1,1,1,1,1,1,1,1,1
};
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 10; j++)
{
cout << Pic[firstMap[i][j]];
}
cout << endl;
}
二.数值定义解释
在这里可能会有很多小伙伴不明白,为什么不定义连续的数值0~5来表示空地、墙和球等数值,这样定义不就使Pic字符图形数组更好赋图形吗。这是因为,我们在进行人物移动时,是通过数值的加减来实现地图上人物,球,框的位置变化当人物移动时,会将人物当前位置减5,便得到0,而0刚好是空地,移动到的位置加5,则原来是空地的地方就是0+5=5,所以再重新刷新地图后,人物就会出现移动的效果,下面通过一张图片来解释。
同理对于其他操作,比如人物移动方向移动方向是球框挨着,对应的操作如下,当然,在更改数组时,还需要对人物移动方向位置进行判断。
当然还有各种其他情况,比如人物移动方向是墙、框和球已经进入框的情况,这些都需要进行判断来对数值进行加减,从而使地图得到更新,这也是我们定义地图数据的依据。所以,在我们开始编码前,应该想想游戏地图的中的数值安排,使地图中的数据更好操作。
总结
以下是整个推箱子游戏的完整代码,地图部分我只是进行了简单的设置,小伙伴们可自行更改。在代码中,我设置了三个关卡,使用了一个三维数组的方式来实现,也可以使用二维数组或者一维数组的方式来实现。(由于是第一次写文章,有不恰当之处,还请多点理解)
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
/*
⊕------把球推到框里 7
♀-----人 5
●-------球 4
○-------框 3
■----墙 1
两个空格:表示空地 0
*/
int guanKa = 0;
int map[][10][10] = {
{
1,1,1,1,1,1,1,1,1,1,
1,3,1,1,0,0,0,4,3,1,
1,4,1,0,0,1,1,1,1,1,
1,0,0,0,1,1,1,1,1,1,
1,1,0,0,0,5,0,0,1,1,
1,1,4,