标签:平面 函数 ade -o ges 结束 技术 很多 ref
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了。这个是C语言写的推箱子小游戏,可以使逻辑能力得到提升。
要写这个小游戏,我们面临的问题有以下几个。
1、游戏地图怎么保存?
2、游戏怎么运行?
3、游戏地图怎样在位置固定的情况下不断变化?
4、小人的移动逻辑怎么写?
5、游戏怎么结束?
1、游戏地图怎么保存?
C语言中只有基本的数据类型,游戏地图是二维的平面结构,很容易想到使用二维数组来保存游戏地图。
2、游戏怎么运行?
因为推箱子游戏在游戏结束之前要不断接受用户的输入,所以我们可以设置一个标志来判断游戏是否结束,把这个标志设置为一个 while 循环的条件。
在每次循环中,都要接收用户的输入,根据用户输入的值,
来进行下一步的操作,在游戏中就是小人的移动方向,上下左右,这里我们可以用一个 switch 语句判断。每一次循环,对应一次用户输入。
3、游戏地图怎样在位置固定的情况下不断变化?
在每次循环中,首先要把当前的地图显示出来,便于用户下一次的移动输入。我们将游戏地图设置为一个全局变量,这样在小人移动后,地图上的字符改变就是永久的,然后打印局部改变的新地图。
这样程序不断循环,一遍遍的打印地图,游戏地图上的字符是可以不断改变了,但是地图的位置并不能固定下来。如果我们能刷新界面上的值,不就可以在位置固定的情况下不断变化了。
刷新本质就是除旧迎新,即把原来的除去,迎来新的。在程序中,我们可以把原来的界面清除,再把新的界面显示在原来的位置。
C语言中可以用system("cls")函数来清除控制台的内容,然后我们再把新的地图内容显示出来。
小人的移动逻辑属于具体的程序实现,我们放到下面再说,先来说说程序怎么结束。
4、游戏怎么结束?
前面我们说设置一个标志来判断游戏是否结束,但是游戏什么时候结束呢?推箱子的游戏目标是将每个箱子推到目标位置,这是一种游戏结束的情况,由于每次循环都要判断,可以将其写成一个函数。
另外,如果用户不想玩了想退出,这也是一种游戏结束的情况,这里我只考虑了这两种情况,至于其他情况,读者可自行考虑。
到目前位置我们可以写出程序大致的框架了,外部一个大循环,每次循环都是先刷新界面,接收用户输入,处理用户的输入,判断游戏是否结束。
5、小人的移动逻辑怎么写?
在上面的程序截图中,可以看到我把小人的上下左右移动分别写到了四个函数中,分别是
MoveToUp()、MoveToDown()、MoveToLeft()、MoveToRight()。以 MoveToUp() 函数为例,我们来分析小人移动的逻辑。
理论上,小人是可以上下左右的移动的,但是,由于有地图的限制,小人不能穿墙的,只能在允许的道路上移动,比如下面这种情况,小人想向上移动,肯定是不允许的。
所以我们要对小人理论上可以移动到的那格(下一位置)进行判断,如果不是限制物(箱子和箱子要移动到的位置下面在详细说),小人就可以移动,如果有限制物就不能移动。
所以我们需要记录一个坐标点的值,这里“下一位置”的参照物可以选取小人当前的位置,游戏开始时,把小人的开始位置作为当前位置。
小人向上移动,“下一位置”的横坐标就是小人当前位置的横坐标减一,纵坐标就是小人当前位置的纵坐标。
然后我们就可以根据“下一位置”的横纵坐标找到具体的字符值,如果是空的,就可以移动,如果是箱子要移动的目标位置,
小人也可以移动,还有一种情况是“下一位置”是箱子,我们还要考虑箱子的“下一位置”,箱子的下一位置也很好得到。
因为小人和箱子是在一条线上移动的,所以在小人向上移动时,箱子的“下一位置”的横坐标就是小人“下一位置”的横坐标减一,两者的纵坐标相同。
同样我们也要对箱子“下一位置”的字符值进行判断,如果字符值是空格和箱子可以移动的位置,就是可以移动的。小人向上移动的代码如下:
小人向下、向左、向右移动的代码也是类似的,无非就是把小人移动的下一坐标改一改,向下移动,
“下一位置”的横坐标就是小人的横坐标位置加一,两者纵坐标相同。
另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
免费学习资料:
标签:平面 函数 ade -o ges 结束 技术 很多 ref
原文地址:https://www.cnblogs.com/zuishuaideou/p/14417971.html