C#零基础入门 数组应用 -- 推箱子游戏
- 前言
- 一,游戏介绍
- 1.1 游戏规则
- 1.2 关卡设计
- 二,地图初始化
- 2.1 概念定义
- 2.2 代码实现
前言
本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论,私信等方式找到我,我会一对一解答你的问题。
系列文章目录:
《C#零基础入门之百识百例》 目录文章传送门
一,游戏介绍
最经典的推箱子游戏,类似的游戏你一定早就玩过。要控制搬运工上下左右移动,来将箱子推到指定地点
1.1 游戏规则
《推箱子游戏》是一款益智游戏,游戏目标是搬运工自己来找 出到某个位置的最短路径,然后自己走过去。
- 小人通过上下左右按键移动;
- 小人不能穿过箱子和墙;遇到箱子就推,遇到墙则不动;
- 小人每次只能推动一个箱子(两个箱子叠在同一方向,就推不动);
- 箱子只能向前推,不能拉;
- 当所有的箱子都被成功推到目的地时,即游戏成功。
1.2 关卡设计
经典推箱子第一关效果图:
集合之前学过的数组,可以将其上述效果图使用数组表示出来;我们用0表示空格,1来表示“墙”。
-
首先, 我们可以按照上图所示的墙体来创建一个8*9的二维数组,然后用1来表示每块墙在数组中的位置;
-
其次,再使用0来将数组完善,即可表示出第一关卡的地图了。
代码实现:
int[,] levelMap = new int[8, 9]
{
{0,0,0,1,1,1,0,0,0}, //空 <= { , , ,1,1,1, , , },
{0,0,0,1,0,1,0,0,0}, //位 <= { , , ,1, ,1, , , },
{0,0,0,1,0,1,1,1,1}, //置 <= { , , ,1, ,1,1,1,1},
{0,1,1,1,0,0,0,0,1}, //用 <= { ,1,1,1, , , , ,1},
{0,1,0,0,0,0,1,1,1}, //零 <= { ,1, , , , ,1,1,1},
{0,1,1,1,1,0,1,0,0}, //来 <= { ,1,1,1,1, ,1, , },
{0,0,0,0,1,0,1,0,0}, //补 <= { , , , ,1, ,1, , },
{0,0,0,0,1,1,1,0,0} //位 <= { , , , ,1,1,1, , }
};
二,地图初始化
2.1 概念定义
通过2.2的示例,是不是有一点思路了? 试着将2.2的图示打印到控制台吧:
首先我们要确定一下数组值的含义和其对应的表示:
数值 | 含义 | 符号 |
---|---|---|
0 | 空格 | “ ” 空字符串 |
1 | 墙体 | ■ 实心正方形 |
2 | 箱子 | □ 空心正方形 |
3 | 小人 | 人 汉字 |
4 | 目标 | ☆ 空心五角星 |
5 | 完成 | ★实心五角星 |
PS:符号可以选择自己喜欢的,只需要保证它们所占的字符是一样的即可,这样就可以保证打印到控制台时,是整齐的了。
2.2 代码实现
既然定义好了那么就代码实现一下,并将其打印到控制台看一下效果吧:
class Program
{
static void Main(string[] args)
{
// 关卡地图
// 数组值 -> 0:空格; 墙:1■; 箱子:2□; 人:3人; 目标:4☆; 完
int[,] levelMap = new int[8, 9]
{
{0,0,0,1,1,1,0,0,0},
{0,0,0,1,4,1,0,0,0},
{0,0,0,1,0,1,1,1,1},
{0,1,1,1,2,0,2,4,1},
{0,1,4,0,2,3,1,1,1},
{0,1,1,1,1,2,1,0,0},
{0,0,0,0,1,4,1,0,0},
{0,0,0,0,1,1,1,0,0}
};
// 遍历数组 -- 初始化地图
for (int i = 0; i < levelMap.GetLength(0); i++)
{
for (int j = 0; j < levelMap.GetLength(1); j++)
{
if (levelMap[i, j] == 0)
{
Console.Write(" ");
}
else if (levelMap[i, j] == 1)
{
Console.Write("■");
}
else if (levelMap[i, j] == 2)
{
Console.Write("□");
}
else if (levelMap[i, j] == 3)
{
Console.Write("人");
}
else if (levelMap[i, j] == 4)
{
Console.Write("☆");
}
else if (levelMap[i, j] == 5)
{
Console.Write("★");
}
}
Console.WriteLine();
}
Console.ReadLine();
}
}
运行结果如下:
PS:本文只对数组的应用和游戏逻辑的对接进行引导。完整游戏会在后面函数章节,将对推箱子游戏进行完善,敬请期待~