《C#零基础入门之百识百例》(三十)数组应用 -- 推箱子游戏 -- 地图初始化

Posted 陈言必行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《C#零基础入门之百识百例》(三十)数组应用 -- 推箱子游戏 -- 地图初始化相关的知识,希望对你有一定的参考价值。

前言

本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论私信等方式找到我,我会一对一解答你的问题。


系列文章目录:
《C#零基础入门之百识百例》 目录文章传送门


一,游戏介绍

最经典的推箱子游戏,类似的游戏你一定早就玩过。要控制搬运工上下左右移动,来将箱子推到指定地点

1.1 游戏规则

《推箱子游戏》是一款益智游戏,游戏目标是搬运工自己来找 出到某个位置的最短路径,然后自己走过去。

  1. 小人通过上下左右按键移动;
  2. 小人不能穿过箱子和墙;遇到箱子就推,遇到墙则不动;
  3. 小人每次只能推动一个箱子(两个箱子叠在同一方向,就推不动);
  4. 箱子只能向前推,不能拉;
  5. 当所有的箱子都被成功推到目的地时,即游戏成功。

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#零基础入门之百识百例》(三十七)方法递归 -- 李白打酒

《C#零基础入门之百识百例》(三十一)方法定义 -- 猜数游戏

《C#零基础入门之百识百例》(三十二)方法参数 -- 引用&输出参数 -- 两数交换