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

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

 该游戏思路如下:

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

 

原文地址:https://www.cnblogs.com/phantom-k/p/3939498.html