小伙熬夜用C++实现推箱子游戏,这次是你们没有见过的船新版本!

本文中的推箱子玩法:上:W,下:S,左:A,右:D。

我从小就喜欢玩电脑游戏,但我所玩过的每一个游戏都难以满足我的需求。从此,我开始自己构思游戏,并希望将来能够掌握游戏设计技术,自己制作游戏。所以,高考完后,我毅然决然地选择了北邮计算机科学与技术专业。

下面是小编整理好的一套C/C++资料,加小编C/C++学习群825414254获取系统性学习C/C++的学习资料

小伙熬夜用C++实现推箱子游戏,这次是你们没有见过的船新版本!_第1张图片
image
小伙熬夜用C++实现推箱子游戏,这次是你们没有见过的船新版本!_第2张图片
image

当我第一次看到我们所使用的Dev C++的时候,我的内心是崩溃的,在我的眼中,这个C语言编译器能做的也就是读取数据,处理数据,再把结果输出来(当时我并没有发现计算机游戏做的也就是这事),设计出的程序的界面也就是一张黑板,就这玩意能搞出个游戏出来?好吧,如果你非要把猜数字当一个游戏我也没话说。

小伙熬夜用C++实现推箱子游戏,这次是你们没有见过的船新版本!_第3张图片
image

就当我对C语言的兴趣越来越弱的时候,QQ空间中一个贪吃蛇的C语言源码吸引了我的眼球;紧接着,我看到了同班大佬用C制作的推箱子。从那时起,我开始意识到使用C语言制作游戏并不是一件不可能的事。

小伙熬夜用C++实现推箱子游戏,这次是你们没有见过的船新版本!_第4张图片
image

不久,计导课上出现了数组这个玩意。数组说白了就是一种数据储存的方式,但这种奇特的数据储存方式却极大的方便了我们对数据的访问。

以前我们如果要保存10个整数,就需要定义10个变量(假设是A-J)去储存这些数;如果我想把这10个数中每个数都加上1,就要动用10条语句。

image

而如果使用数组(假设是X[10])储存这些数,只需要一个循环,就能达到我的要求,即:

image

想想看,如果要处理100个数的话,用数组是不是极大的减少了代码的数量?这就是数组的好处。

但这样的数组还是搞不出什么可以愉快玩耍的游戏来的。不过很快,我们班的大佬们给我介绍了我们当前所学数组的升级版——二维数组。

目前的一维数组可以被看做一行N列的数,也就是这样。

image

而二维数组可以储存M行N列的数,他可以储存M*N个数,也就是这样。

image

这下有的玩了,如果数组中存的是字符的话,那么我们把数组中的东西输出出来,不就能构出一个图形吗?然后我们就可以通过对数组中某个储存单位的字符的改变,使输出后呈现出的图形发生改变,比如:

image

这不就有游戏的效果了吗?

当然,为了更好的游戏体验,我们需要用到system(“cls”);用于清除当前屏幕上的东西,随时更新图像。这样,我们至少可以做出个走地图的东西出来。

当然,光只有走地图还是不能算做游戏的,我们还需要在地图上加很多元素。比如说墙。

image

这个时候该怎么办呢?

数组的能力体现出来了,在知道主角坐标(X,Y)的情况下,我们只需要判断坐标为(X+1,Y),(X-1,Y),(X,Y+1),(X+1,Y-1)的位置在数组中对应的值是不是#就可以了。用代码表示如下:

(其中map[][]中储存着地图每个坐标对应的元素,用#表示墙。X,Y为主角的位置坐标,key中储存着你输入的控制指令。)

image

这样一来,当你输入的控制指令为W(向上)时,计算机就会判断主角位置上方是什么,如果不是#,主角就可以向上走一格了。

运用这种方法,我们可以轻松整出一个走迷宫的游戏出来。如果我们在地图上增加更多元素,那游戏内容不就更丰富了吗?利用闲暇时间动手试一试吧。

顺带发一下我写的推箱子,其算法并不算是好算法,仅供大家参考:

小伙熬夜用C++实现推箱子游戏,这次是你们没有见过的船新版本!_第5张图片
image
小伙熬夜用C++实现推箱子游戏,这次是你们没有见过的船新版本!_第6张图片
image
小伙熬夜用C++实现推箱子游戏,这次是你们没有见过的船新版本!_第7张图片
image

(效果图和上方推箱子图一样)

如果多想想的话,在使用二维数组的情况下,我们可以搞出平面游戏出来,那如果使用三维数组呢?如果使用n维数组呢?那可就更好玩了。

你可能感兴趣的:(小伙熬夜用C++实现推箱子游戏,这次是你们没有见过的船新版本!)