Linux下用下用C语言实现推箱子游戏语言实现推箱子游戏
前面有Linux的常用命令和vim文本编辑器还没有介绍,之后我会补上的。
今天来介绍如何用C语言写一个简单的小游戏,叫做“小老鼠推箱子”。虽然游戏的编写过程不复杂,但是我觉得能够从中找到
自己对于编程的不足和完善自己的编程思维是最重要的。游戏代码不多,所以直接写在一个c文件中。本人小白,有不足之处
还望指教
游戏介绍游戏介绍
下图是游戏开始界面,$是小老鼠,#是墙,O是终点,当小老鼠把所有箱子推进终点就代表游戏通过。
游戏思维游戏思维
游戏地图用一个二维数组去存储。数组中不同的值代表不同的对象(老鼠、墙、路等)。当小老鼠在移动时,数组中的值也会
随之改变,但是为了在游戏无法进行下去时可以从新开始游戏,所以需要另一个数组去保留地图的初始状态。也就是说需要两
个二维数组,一个始终不改变,一个用来记录实时的状态。
小老鼠在移动时会遇到两种情况,即可移动和不可移动。在编写代码时,只需要将可移动的情况写完成,那么就不需要去判断
不可移动的状态。可移动的情况有下面两种:
1、小老鼠面前什么也没有(面前是路或者是终点)。
2、小老鼠前面是箱子,此时分为两种情况(箱子前面是路或者箱子前面是终点)。
这时候,应当思考的是如何根据二维数组的值去判断上述情况,以及当小老鼠移动和推动箱子时,二维数组的值是如何变化
的。
#include <stdio.h>
#include "get_keyboard.h"
//地图7行8列 行[0-6] 列[0-7] //0 路
//1 墙
//2 箱子
//3 终点
//4 小老鼠
//7 小老鼠站在终止上
//5 箱子到达终点上
int g_boards[7][8] =
{
{0,1,1,1,1,1,1,0},
{0,1,0,0,0,0,1,1},
{1,3,0,1,1,2,0,1},
{1,0,3,3,2,0,0,1},
{1,0,0,1,2,0,0,1},
{1,0,0,4,0,1,1,1},
{1,1,1,1,1,0,0,0}
}, boards[7][8]={};
//记录小老鼠在移动中的位置
int row = 0;
int col = 0;
int cnt = 0;//箱子个数,用来判断游戏是否结束。
用0~4表示地图上面有的小老鼠等物体,值得提的是对于箱子和小老鼠来说,他们移动时都可能会在终点上,那么他们移入终
点和移开终点时的情况需要分别去判断,为了能够避免过多的判断,当它们移入终点时,终点所在位置的值就等于它们的值加
上终点的值。同理,当它们移开终点时,终点所在位置的值就等于终点的值减去它们的值。这样就不用去判断小老鼠和箱子在
不在终点上了。所以,小老鼠在终点上的值是7。
代码详解代码详解
这里先从main()函数开始思考。当游戏开始时,需要先将地图初始化,即把用来记录实时状态的地图初始化成游戏开始时的地
图(就是前面提的的两个地图),所以这里需要init()函数。初始化后就是开始游戏,游戏过程中需要获取方向键,这些在
start()函数中完成。之后,在这些函数中再去思考是否需要去写其他函数补足功能。
//初始化地图