【2017-12-09】c#基础-推箱子游戏(三维数组)

效果图:

       

代码如下:

  1     class Program
  2     {
  3         static void Main(string[] args)
  4         {
  5             //1.画地图 0-空地 1-墙 2-箱子 3-小人 4-目标点 5-与箱子重合后的目标点 
  6             const int a = 3;
  7             const int b = 10;
  8             const int c = 10;
  9             int[,,] map = new int[a, b, c]
 10             {
 11                 {
 12                     {1,1,1,1,1,1,0,0,0,0},
 13                     {1,0,3,0,0,1,0,0,0,0},
 14                     {1,0,0,0,0,1,1,1,1,1},
 15                     {1,0,0,0,0,0,0,0,0,1},
 16                     {1,0,0,2,0,0,0,0,0,1},
 17                     {1,0,0,0,0,0,0,0,0,1},
 18                     {1,0,0,0,0,0,0,0,0,1},
 19                     {1,0,0,0,0,0,0,0,0,1},
 20                     {1,0,0,0,0,0,4,0,0,1},
 21                     {1,1,1,1,1,1,1,1,1,1}
 22                 },
 23                 {
 24                     {1,1,1,1,1,1,0,0,0,0},
 25                     {1,0,0,0,0,1,0,0,0,0},
 26                     {1,0,0,3,0,1,1,1,1,1},
 27                     {1,0,2,0,0,0,0,0,0,1},
 28                     {1,0,0,0,0,0,0,0,0,1},
 29                     {1,0,0,4,0,2,0,0,0,1},
 30                     {1,0,0,0,0,0,0,0,0,1},
 31                     {1,0,0,0,0,0,0,0,0,1},
 32                     {1,0,0,0,0,0,4,0,0,1},
 33                     {1,1,1,1,1,1,1,1,1,1}
 34                 },
 35                 {
 36                     {1,1,1,1,1,1,0,0,0,0},
 37                     {1,0,3,0,0,1,0,0,0,0},
 38                     {1,0,0,0,0,1,1,1,1,1},
 39                     {1,0,0,0,0,0,0,0,0,1},
 40                     {1,0,2,0,0,0,0,0,0,1},
 41                     {1,0,0,1,0,0,0,0,0,1},
 42                     {1,0,0,1,0,0,0,0,0,1},
 43                     {1,0,0,1,0,0,4,0,0,1},
 44                     {1,0,0,1,0,0,0,0,0,1},
 45                     {1,1,1,1,1,1,1,1,1,1}
 46                 }
 47             };
 48             //0 - 空地 1 - 墙 2 - 箱子 3 - 小人 4 - 目标点 5 - 与箱子重合后的目标点
 49             int g = 0;
 50             int x = -1;
 51             int y = -1;
 52             bool xr = false;//记录是否找到小人
 53             //获取第一关小人坐标
 54             for (int i = 0; i < b; i++)
 55             {
 56                 for (int j = 0; j < c; j++)
 57                 {
 58                     if (map[g, i, j] == 3)
 59                     {
 60                         x = i;
 61                         y = j;
 62                         xr = true;
 63                         break;
 64                     }
 65                     if (xr == true)
 66                         break;
 67                 }
 68             }
 69             //地图数组未设置小人3
 70             if (xr == false)
 71             {
 72                 //死循环,防止系统崩溃
 73                 while (true)
 74                 {
 75                     Console.Write("游戏设置错误:第" + (g + 1) + "关未设置小人3!");
 76                     Console.ReadLine();
 77                 }
 78             }
 79             //开始循环 
 80             while (true)
 81             {
 82                 //清除屏幕
 83                 Console.Clear();
 84                 //地图显示
 85                 Console.WriteLine("" + (g + 1) + "关:");
 86                 for (int i = 0; i < b; i++)
 87                 {
 88                     for (int j = 0; j < c; j++)
 89                     {
 90                         if (map[g, i, j] == 0)
 91                             Console.Write(" ");
 92                         else if (map[g, i, j] == 1)
 93                             Console.Write("");
 94                         else if (map[g, i, j] == 2)
 95                             Console.Write("");
 96                         else if (map[g, i, j] == 3)
 97                             Console.Write("");
 98                         else if (map[g, i, j] == 4)
 99                             Console.Write("");
100                         else if (map[g, i, j] == 5)
101                             Console.Write("");
102                     }
103                     Console.WriteLine();
104                 }
105                 //如果地图中不存在未完成目标点4,则过关。
106                 int count = 0;
107                 for (int i = 0; i < b; i++)
108                 {
109                     for (int j = 0; j < c; j++)
110                     {
111                         if (map[g, i, j] == 4)
112                             count++;
113                     }
114                 }
115                 if (count == 0)
116                 {
117                     g++;
118                     if (g < a)
119                     {
120                         Console.WriteLine("恭喜过关!按回车进入下一关!");
121                         //获取下一关小人坐标
122                         for (int i = 0; i < b; i++)
123                         {
124                             for (int j = 0; j < c; j++)
125                             {
126                                 xr = false;
127                                 if (map[g, i, j] == 3)
128                                 {
129                                     x = i;
130                                     y = j;
131                                     xr = true;
132                                     break;
133                                 }
134                             }
135                             if (xr == true)
136                                 break;
137                         }
138                         //地图数组未设置小人3
139                         if (xr == false)
140                         {
141                             //死循环,防止系统崩溃
142                             while (true)
143                             {
144                                 Console.Write("游戏设置错误:第" + (g + 1) + "关未设置小人3!");
145                                 Console.ReadLine();
146                             }
147                         }
148                         Console.ReadLine();
149                         continue;
150                     }
151                     else
152                     {
153                         Console.WriteLine("恭喜通关!");
154                         break;
155                     }
156                 }
157                 //2.让小人动起来
158                 string k = Console.ReadKey().Key.ToString();//获取用户输入的按键               
159                 if (k == "UpArrow")
160                 {
161                     if (map[g, x - 1, y] == 0)
162                     {
163                         //人 空地                      
164                         map[g, x, y] = 0;
165                         map[g, x - 1, y] = 3;
166                         x--;
167                     }
168                     else if (map[g, x - 1, y] == 2 && map[g, x - 2, y] == 0)
169                     {
170                         //人 箱子 空地
171                         map[g, x, y] = 0;
172                         map[g, x - 1, y] = 3;
173                         map[g, x - 2, y] = 2;
174                         x--;
175                     }
176                     else if (map[g, x - 1, y] == 2 && map[g, x - 2, y] == 4)
177                     {
178                         //人 箱子 目标点
179                         map[g, x, y] = 0;
180                         map[g, x - 1, y] = 3;
181                         map[g, x - 2, y] = 5;
182                         x--;
183                     }
184                 }
185                 else if (k == "DownArrow")
186                 {
187                     if (map[g, x + 1, y] == 0)
188                     {
189                         //人 空地                       
190                         map[g, x, y] = 0;
191                         map[g, x + 1, y] = 3;
192                         x++;
193                     }
194                     else if (map[g, x + 1, y] == 2 && map[g, x + 2, y] == 0)
195                     {
196                         //人 箱子 空地
197                         map[g, x, y] = 0;
198                         map[g, x + 1, y] = 3;
199                         map[g, x + 2, y] = 2;
200                         x++;
201                     }
202                     else if (map[g, x + 1, y] == 2 && map[g, x + 2, y] == 4)
203                     {
204                         //人 箱子 目标点
205                         map[g, x, y] = 0;
206                         map[g, x + 1, y] = 3;
207                         map[g, x + 2, y] = 5;
208                         x++;
209                     }
210 
211                 }
212                 else if (k == "LeftArrow")
213                 {
214                     if (map[g, x, y - 1] == 0)
215                     {
216                         //人 空地 
217                         map[g, x, y] = 0;
218                         map[g, x, y - 1] = 3;
219                         y--;
220                     }
221                     else if (map[g, x, y - 1] == 2 && map[g, x, y - 2] == 0)
222                     {
223                         //人 箱子 空地
224                         map[g, x, y] = 0;
225                         map[g, x, y - 1] = 3;
226                         map[g, x, y - 2] = 2;
227                         y--;
228                     }
229                     else if (map[g, x, y - 1] == 2 && map[g, x, y - 2] == 4)
230                     {
231                         //人 箱子 目标点
232                         map[g, x, y] = 0;
233                         map[g, x, y - 1] = 3;
234                         map[g, x, y - 2] = 5;
235                         y--;
236                     }
237                 }
238                 else if (k == "RightArrow")
239                 {
240                     if (map[g, x, y + 1] == 0)
241                     {
242                         //人 空地 
243                         map[g, x, y] = 0;
244                         map[g, x, y + 1] = 3;
245                         y++;
246                     }
247                     else if (map[g, x, y + 1] == 2 && map[g, x, y + 2] == 0)
248                     {
249                         //人 箱子 空地
250                         map[g, x, y] = 0;
251                         map[g, x, y + 1] = 3;
252                         map[g, x, y + 2] = 2;
253                         y++;
254                     }
255                     else if (map[g, x, y + 1] == 2 && map[g, x, y + 2] == 4)
256                     {
257                         //人 箱子 目标点
258                         map[g, x, y] = 0;
259                         map[g, x, y + 1] = 3;
260                         map[g, x, y + 2] = 5;
261                         y++;
262                     }
263 
264                 }
265                 else
266                 {
267                     Console.WriteLine("按上下左右键控制小人移动!(按回车键继续游戏)");
268                     Console.ReadLine();
269                 }
270             }
271             Console.ReadLine();
272         }
273     }

 

posted @ 2017-12-09 19:00  Int64  阅读(293)  评论(0编辑  收藏  举报