• 小游戏●推箱子(利用二维数组制作)


    利用数组制作的简单推箱子游戏

     该游戏思路如下:

    1、定义地图

    2、主体循环:

      2.1、清屏,显示关数

      2.2、读取键盘按键,判断是否开始游戏

      2.3、开始游戏,调用地图

        2.3.1、确定人的初始位置

        2.3.2、判断终点个数

        2.3.3、显示及操作

          2.3.3.1、输出显示(把数组显示成图形符号)

          2.3.3.2、判断有箱子的终点个数,如果所有终点有箱子,跳出循环,进行下一关

          2.3.3.3、操作(上、下、左、右)

    上面思路已对应至代码中,各部分也用空行隔开,这里不再一部分一部分写。各部分代码写完,然后按思路组合、修改,再适当位置还可以添加一点小功能,比如重新开始、选关等。

    代码及分析如下:

      1             //推箱子小游戏
      2             //1、定义地图
      3             //定义一个三维数组存放地图,三维数组由单独的二维数组组成,本游戏中只有三个地图
      4             int[][,] a = new int[3][,];
      5             //用二维数组创建地图,0是空位,1是墙,2是人,3是箱子,4是终点
      6             int[,] b0 = new int[10, 10]{
      7                         {1,1,1,1,1,1,1,1,1,1},
      8                         {1,0,0,0,1,0,1,0,0,1},
      9                         {1,0,0,0,1,0,1,0,0,1},
     10                         {1,0,3,0,1,0,1,0,0,1},
     11                         {1,0,0,0,1,1,1,0,0,1},
     12                         {1,0,0,0,0,0,0,0,0,1},
     13                         {1,0,0,1,0,0,0,0,0,1},
     14                         {1,2,0,1,1,1,1,0,0,1},
     15                         {1,0,0,1,0,4,0,0,0,1},
     16                         {1,1,1,1,1,1,1,1,1,1}};
     17             int[,] b1 = new int[10, 10]{
     18                         {1,1,1,1,1,1,1,1,1,1},
     19                         {1,0,0,0,1,0,1,0,0,1},
     20                         {1,0,3,0,1,0,1,3,0,1},
     21                         {1,0,0,0,1,0,1,0,0,1},
     22                         {1,0,0,0,1,1,1,0,0,1},
     23                         {1,0,0,0,0,0,0,0,0,1},
     24                         {1,0,0,1,4,0,0,0,0,1},
     25                         {1,2,0,1,1,1,1,0,0,1},
     26                         {1,0,0,1,0,4,0,0,0,1},
     27                         {1,1,1,1,1,1,1,1,1,1}};
     28             int[,] b2 = new int[10, 10]{
     29                       {1,1,1,1,1,1,1,1,1,1},
     30                       {1,0,4,1,0,0,0,0,0,1},
     31                       {1,0,0,1,0,0,0,0,4,1},
     32                       {1,0,0,0,0,0,0,0,4,1},
     33                       {1,0,0,3,0,0,0,0,0,1},
     34                       {1,1,1,0,0,0,0,0,0,1},
     35                       {1,0,0,2,0,0,0,0,0,1},
     36                       {1,0,3,0,1,0,3,0,0,1},
     37                       {1,0,0,0,1,0,0,0,0,1},
     38                       {1,1,1,1,1,1,1,1,1,1}};
     39             a[0] = b0;
     40             a[1] = b1;
     41             a[2] = b2;
     42 
     43             //2、主体循环
     44             for (int z = 0; z < 3; z++)    //如果增加地图,需修改判断条件
     45             {//for1
     46 
     47                 //2.1、清屏,显示关数
     48                 Console.Clear();
     49                 Console.WriteLine("第{0}关!", z + 1);    //清屏并显示第几关
     50 
     51                 //2.2、读取键盘按键,用于判断是否开始游戏
     52                 ConsoleKeyInfo start = Console.ReadKey();
     53                 string st = start.Key.ToString().ToLower();    //以上两行为读取按键信息,转成字符串格式并小写
     54 
     55                 //2.3判断游戏开始,调用地图
     56                 if (st == "spacebar")    //按空格键,游戏开始
     57                 {//if1
     58                     int[,] map = a[z];    //读取地图
     59 
     60                     //2.3.1、确定人的初始位置,i为行,j为列
     61                     int i = 0, j = 0;
     62                     for (int m = 0; m < 10; m++)
     63                     {
     64                         for (int n = 0; n < 10; n++)
     65                         {
     66                             if (map[m, n] == 2)
     67                             {
     68                                 i = m;
     69                                 j = n;
     70                                 break;
     71                             }
     72                         }
     73                     }
     74 
     75                     //2.3.2判断终点个数
     76                     int over = 0;
     77                     for (int m = 0; m < 10; m++)
     78                     {
     79                         for (int n = 0; n < 10; n++)
     80                         {
     81                             if (map[m, n] == 4)
     82                             {
     83                                 over++;
     84                             }
     85                         }
     86                     }
     87 
     88                     //2.3.3显示及操作
     89                     for (; true; )
     90                     {//for2
     91 
     92                         //2.3.3.1输出显示
     93                         Console.Clear();
     94                         for (int x = 0; x < 10; x++)
     95                         {
     96                             for (int y = 0; y < 10; y++)
     97                             {
     98                                 if (map[x, y] == 0)
     99                                 {
    100                                     Console.Write("  ");
    101                                 }
    102                                 else if (map[x, y] == 1)
    103                                 {
    104                                     Console.Write("");
    105                                 }
    106                                 else if (map[x, y] == 2 || map[x, y] == 6)
    107                                 {
    108                                     Console.Write("");
    109                                 }
    110                                 else if (map[x, y] == 3 || map[x, y] == 7)
    111                                 {
    112                                     Console.Write("");
    113                                 }
    114                                 else if (map[x, y] == 4)
    115                                 {
    116                                     Console.Write("");
    117                                 }
    118                             }
    119                             Console.Write("
    ");    //换行
    120                         }
    121 
    122                         //2.3.3.2判断有箱子的终点个数
    123                         int over1 = 0;
    124                         for (int m = 0; m < 10; m++)
    125                         {
    126                             for (int n = 0; n < 10; n++)
    127                             {
    128                                 if (map[m, n] == 7)
    129                                 {
    130                                     over1++;
    131                                 }
    132                             }
    133                         }
    134                         //判断是否所有终点有箱子
    135                         if (over1 == over)
    136                         {
    137                             Console.WriteLine("过关!");
    138                             break;
    139                         }
    140 
    141                         //2.3.3.3、操作部分
    142                         ConsoleKeyInfo K = Console.ReadKey();
    143                         string k = K.Key.ToString();
    144                         k = k.ToLower();
    145                         //向上
    146                         if (k == "uparrow")    //判断人是否是向上
    147                         {
    148                             if (map[i - 1, j] == 0 || map[i - 1, j] == 4)    //判断人上方是不是空位
    149                             {
    150                                 map[i - 1, j] = map[i - 1, j] + 2;
    151                                 map[i, j] = map[i, j] - 2;
    152                                 i--;    //人移动之后,改变其所在行数
    153                             }
    154                             else if ((map[i - 1, j] == 3 || map[i - 1, j] == 7) && map[i - 2, j] != 1)    //人上方是箱子,判断箱子上方是否是空位
    155                             {
    156                                 map[i - 2, j] = map[i - 2, j] + 3;
    157                                 map[i - 1, j] = map[i - 1, j] - 3 + 2;
    158                                 map[i, j] = map[i, j] - 2;
    159                                 i--;    //人移动之后,改变其所在行数
    160                             }
    161                             else    //如果人移动,输出提示音
    162                                 Console.Write("a");
    163                         }
    164                         //向下
    165                         else if (k == "downarrow")
    166                         {
    167                             if (map[i + 1, j] == 0 || map[i + 1, j] == 4)    //判断人下方是不是空位
    168                             {
    169                                 map[i + 1, j] = map[i + 1, j] + 2;
    170                                 map[i, j] = map[i, j] - 2;
    171                                 i++;    //人移动之后,改变其所在行数
    172                             }
    173                             else if ((map[i + 1, j] == 3 || map[i + 1, j] == 7) && map[i + 2, j] != 1)    //人下方是箱子,判断箱子下方是否是空位
    174                             {
    175                                 map[i + 2, j] = map[i + 2, j] + 3;
    176                                 map[i + 1, j] = map[i + 1, j] - 3 + 2;
    177                                 map[i, j] = map[i, j] - 2;
    178                                 i++;    //人移动之后,改变其所在行数
    179                             }
    180                             else    //如果人移动,输出提示音
    181                                 Console.Write("a");
    182                         }
    183                         //向左
    184                         else if (k == "leftarrow")
    185                         {
    186                             if (map[i, j - 1] == 0 || map[i, j - 1] == 4)    //判断人左方是不是空位
    187                             {
    188                                 map[i, j - 1] = map[i, j - 1] + 2;
    189                                 map[i, j] = map[i, j] - 2;
    190                                 j--;    //人移动之后,改变其所在列数
    191                             }
    192                             else if ((map[i, j - 1] == 3 || map[i, j - 1] == 7) && map[i, j - 2] != 1)    //人左方是箱子,判断箱子左方是否是空位
    193                             {
    194                                 map[i, j - 2] = map[i, j - 2] + 3;
    195                                 map[i, j - 1] = map[i, j - 1] - 3 + 2;
    196                                 map[i, j] = map[i, j] - 2;
    197                                 j--;    //人移动之后,改变其所在列数
    198                             }
    199                             else    //如果人移动,输出提示音
    200                                 Console.Write("a");
    201                         }
    202                         //向右
    203                         else if (k == "rightarrow")
    204                         {
    205                             if (map[i, j + 1] == 0 || map[i, j + 1] == 4)    //判断人右方是不是空位
    206                             {
    207                                 map[i, j + 1] = map[i, j + 1] + 2;
    208                                 map[i, j] = map[i, j] - 2;
    209                                 j++;    //人移动之后,改变其所在列数
    210                             }
    211                             else if ((map[i, j + 1] == 3 || map[i, j + 1] == 7) && map[i, j + 2] != 1)    //人右方是箱子,判断箱子右方是否是空位
    212                             {
    213                                 map[i, j + 2] = map[i, j + 2] + 3;
    214                                 map[i, j + 1] = map[i, j + 1] - 3 + 2;
    215                                 map[i, j] = map[i, j] - 2;
    216                                 j++;    //人移动之后,改变其所在列数
    217                             }
    218                             else    //如果人移动,输出提示音
    219                                 Console.Write("a");
    220                         }
    221                         //其他按键
    222                         else if (k == "b")    //按“B”键,重新开始
    223                         {
    224                             z--;    //用来抵消for1的“z++”
    225                             break;    //跳出for2循环
    226                         }
    227                     }//for2
    228                 }//if1
    229                 else if (st == "n")    //按“N”键,进入下一关
    230                 {
    231                     continue;    //for1进入下一次循环
    232                 }
    233                 else
    234                     z--;
    235                     Console.Write("a");
    236             }//for1

    显示效果图

     程序及代码下载http://pan.baidu.com/s/1mgDlz3y

     

  • 相关阅读:
    MVC系列14-后台我的文章页
    MVC系列-13.前台文章显示页
    MVC系列-12.项目的重新规划
    MVC系列-11.两表联合-发表文章
    MVC系列-10.用户验证-导航条改造
    百思不得姐第4天:文本框占位文字颜色
    swift学习:自定义Log
    swift学习第十六天:懒加载和tableView
    swift学习第十五天:闭包
    swift学习第十四天:属性监听器
  • 原文地址:https://www.cnblogs.com/phantom-k/p/3939498.html
Copyright © 2020-2023  润新知