《C#零基础入门之百识百例》(三十)数组应用 -- 推箱子游戏 -- 地图初始化
Posted 陈言必行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《C#零基础入门之百识百例》(三十)数组应用 -- 推箱子游戏 -- 地图初始化相关的知识,希望对你有一定的参考价值。
前言
本文属于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:本文只对数组的应用和游戏逻辑的对接进行引导。完整游戏会在后面函数章节,将对推箱子游戏进行完善,敬请期待~
以上是关于《C#零基础入门之百识百例》(三十)数组应用 -- 推箱子游戏 -- 地图初始化的主要内容,如果未能解决你的问题,请参考以下文章
《C#零基础入门之百识百例》(三十四)方法参数 -- 可选参数和形参数组 -- N数的最大公约数
《C#零基础入门之百识百例》(三十六)方法重载 -- 回文数
《C#零基础入门之百识百例》(三十五)方法返回 -- 自守数
《C#零基础入门之百识百例》(三十七)方法递归 -- 李白打酒