逻辑首先有控制台写了一下。

 

需要注意的地方不少:

  • 进一步,需要考虑3个层面的问题。
  1. 前面的位置是空地,成功点,墙,还是箱子。
  2. 前面是箱子的时候,箱子的前面是空地,墙,成功点,还是箱子。
  3. 当移动的时候,原先人的地点是空地,成功点,需要恢复。
  • 需要后退一步的时候,需要考虑两种情况。
  1. 恢复两个点的节点原先值。
  2. 由于上面2的情况,需要恢复3个点的原先值。

Source Code:

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 struct State
  8 {
  9     public int posX, posY, mapx;
 10 };
 11 
 12 namespace PushBox
 13 {
 14     
 15 
 16     class Program
 17     {
 18         // 1 表示 强
 19         // 2 表示 人
 20         // 3 表示 箱子
 21         // 4 表示 成功点
 22         static int[,] map = new int[10, 10] {
 23             {1,1,1,1,1,1,1,1,1,1},
 24             {1,0,4,0,0,0,0,0,0,1},
 25             {1,0,0,0,0,4,0,0,0,1},
 26             {1,0,0,0,0,4,0,0,0,1},
 27             {1,0,0,0,0,3,0,0,0,1},
 28             {1,0,3,0,0,4,0,4,0,1},
 29             {1,4,0,4,4,2,0,3,0,1},
 30             {1,0,0,0,0,0,0,4,0,1},
 31             {1,0,0,0,0,0,0,0,0,1},
 32             {1,1,1,1,1,1,1,1,1,1}
 33         };
 34         static int posX, posY;
 35 
 36         static State[] list = new State[3];
 37         static int list_cnt = 0;
 38         //箱子个数
 39         static int cube_cnt;
 40         static int _cube_cnt;
 41         //步数
 42         static int cnt;
 43 
 44 
 45         static void pre_clear()
 46         {
 47             list_cnt = 0;
 48         }
 49         static void pre_save(int POSX,int POSY)
 50         {
 51             list[list_cnt].posX = POSX;
 52             list[list_cnt].posY = POSY;
 53             list[list_cnt].mapx = map[POSX, POSY];
 54             list_cnt++;
 55         }
 56 
 57         static bool victory()
 58         {
 59             int flag_cube_cnt = 0;
 60             for (int i = 0; i < 10; i++)
 61             {
 62                 for (int j = 0; j < 10; j++)
 63                 {
 64                     if (map[i, j] == 7)
 65                         flag_cube_cnt++;
 66                 }
 67             }
 68             return flag_cube_cnt == cube_cnt;
 69         }
 70 
 71         static void init()
 72         {
 73             cube_cnt = 0;
 74             cnt = 0;
 75             for (int i = 0; i < 10; i++)
 76             {
 77                 for (int j = 0; j < 10; j++)
 78                 {
 79                     if (map[i, j] == 3)
 80                     {
 81                         cube_cnt++;
 82                     }
 83                     if (map[i, j] == 2)
 84                     {
 85                         posX = i;
 86                         posY = j;
 87                         pre_save(i, j);
 88                     }
 89                 }
 90             }
 91         }
 92 
 93         static void draw()
 94         {
 95             Console.Clear();
 96             for (int i = 0; i < 10; i++)
 97             {
 98                 for (int j = 0; j < 10; j++)
 99                 {
100                     if (map[i, j] == 1)             //#
101                     {
102                         System.Console.Write("");
103                     }
104                     else if(map[i,j]==0)
105                         System.Console.Write("  ");
106                     else if (map[i, j] == 2)        //pepole
107                     {
108                         System.Console.Write("");
109                     }
110                     else if(map[i,j] == 3)
111                     {
112                         System.Console.Write("");
113                     }
114                     else if (map[i, j] == 4)
115                     {
116                         System.Console.Write("");
117                     }
118                     else if (map[i,j] == 6)   // 人 + 成功点
119                     {
120                         System.Console.Write("");
121                     }
122                     else if (map[i, j] == 7)
123                     {
124                         _cube_cnt++;
125                         System.Console.Write("");
126 
127 
128                     }
129 
130                 }
131                 Console.WriteLine("");
132                 
133             }
134             /*
135             System.Console.Write("步数:{0}\n保存的链表",cnt);
136 
137             for (int i = 0; i < list_cnt; i++)
138             {
139                 Console.WriteLine("{0} {1} {2}", list[i].posX, list[i].posY, list[i].mapx);
140 
141             }*/
142             System.Console.WriteLine("按z键退回一步哦!");
143         }
144 
145         //向上移动
146         static void moveUp()
147         {
148             if (posX - 1 >= 0)
149             {
150                 if (map[posX - 1, posY] == 0)   // 空地
151                 {
152                     if (map[posX, posY] == 6)
153                     {
154                         pre_clear();
155                         pre_save(posX, posY);
156                         pre_save(posX - 1, posY);
157                        
158 
159                         map[posX, posY] = 4;
160                         map[posX-1,posY] = 2;
161                         posX--;
162                         //now_save();
163                     }
164                     else if (map[posX, posY] == 2)
165                     {
166                         pre_clear();
167                         pre_save(posX, posY);
168                         pre_save(posX-1, posY);
169                         map[posX, posY] = 0;
170                         map[posX-1, posY] = 2;
171                         posX--;
172                     }
173                 }
174                 else if (map[posX - 1, posY] == 4)  //成功点
175                 {
176                     
177                     if (map[posX, posY] == 6)
178                     {
179                         pre_clear();
180                         pre_save(posX, posY);
181                         pre_save(posX - 1, posY);
182                         map[posX - 1, posY] = 6;
183                         map[posX, posY] = 4;
184                         posX--;
185                     }
186                     else if (map[posX, posY] == 2)
187                     {
188                         pre_clear();
189                         pre_save(posX, posY);
190                         pre_save(posX - 1, posY);
191 
192                         map[posX - 1, posY] = 6;
193                         map[posX, posY] = 0;
194                         posX--;
195                     }
196                 }
197                 else if (map[posX - 1, posY] == 3)   // 箱子
198                 {
199                     if (posX - 2 >= 0)
200                     {
201                         if (map[posX - 2, posY] == 0)       // 箱子上面是空地
202                         {
203                             if (map[posX, posY] == 6)
204                             {
205 
206                                // pre_save();
207                                 pre_clear();
208                                 pre_save(posX, posY);
209                                 pre_save(posX - 1, posY);
210                                 pre_save(posX - 2, posY);
211                                 
212 
213                                 map[posX - 2, posY] = 3;
214                                 map[posX - 1, posY] = 2;
215                                 map[posX, posY] = 4;
216                                 posX--;
217                             }
218                             else if (map[posX, posY] == 2)
219                             {
220                                 pre_clear();
221                                 pre_save(posX, posY);
222                                 pre_save(posX - 1, posY);
223                                 pre_save(posX - 2, posY);
224 
225                                 map[posX - 2, posY] = 3;
226                                 map[posX - 1, posY] = 2;
227                                 map[posX, posY] = 0;
228                                 posX--;
229                             }
230                         }
231                         else if (map[posX - 2, posY] == 4)      //箱子上面是成功点
232                         {
233                             if (map[posX, posY] == 6)
234                             {
235                                 pre_clear();
236                                 pre_save(posX, posY);
237                                 pre_save(posX - 1, posY);
238                                 pre_save(posX - 2, posY);
239 
240                                 map[posX - 2, posY] = 7;
241                                 map[posX - 1, posY] = 2;
242                                 map[posX, posY] = 4;
243                                 posX--;
244                             }
245                             else if (map[posX, posY] == 2)
246                             {
247                                 pre_clear();
248                                 pre_save(posX, posY);
249                                 pre_save(posX - 1, posY);
250                                 pre_save(posX - 2, posY);
251 
252                                 map[posX - 2, posY] = 7;
253                                 map[posX - 1, posY] = 2;
254                                 map[posX, posY] = 0;
255                                 posX--;
256                             }
257 
258                         }
259                     }
260                 }
261                 else if (map[posX - 1, posY] == 7)          // 箱子+成功点
262                 {
263                     if (posX - 2 >= 0)
264                     {
265                         if (map[posX - 2, posY] == 0)       // 箱子上面是空地
266                         {
267                             if (map[posX, posY] == 6)
268                             {
269                                 pre_clear();
270                                 pre_save(posX, posY);
271                                 pre_save(posX - 1, posY);
272                                 pre_save(posX - 2, posY);
273 
274                                 map[posX - 2, posY] = 3;
275                                 map[posX - 1, posY] = 6;
276                                 map[posX, posY] = 4;
277                                 posX--;
278                             }
279                             else if (map[posX, posY] == 2)
280                             {
281                                 pre_clear();
282                                 pre_save(posX, posY);
283                                 pre_save(posX - 1, posY);
284                                 pre_save(posX - 2, posY);
285 
286                                 map[posX - 2, posY] = 3;
287                                 map[posX - 1, posY] = 6;
288                                 map[posX, posY] = 0;
289                                 posX--;
290                             }
291                         }
292                         else if (map[posX - 2, posY] == 4)      //箱子上面是成功点
293                         {
294                             if (map[posX, posY] == 6)
295                             {
296                                 pre_clear();
297                                 pre_save(posX, posY);
298                                 pre_save(posX - 1, posY);
299                                 pre_save(posX - 2, posY);
300 
301                                 map[posX - 2, posY] = 7;
302                                 map[posX - 1, posY] = 6;
303                                 map[posX, posY] = 4;
304                                 posX--;
305                             }
306                             else if (map[posX, posY] == 2)
307                             {
308                                 pre_clear();
309                                 pre_save(posX, posY);
310                                 pre_save(posX - 1, posY);
311                                 pre_save(posX - 2, posY);
312 
313                                 map[posX - 2, posY] = 7;
314                                 map[posX - 1, posY] = 6;
315                                 map[posX, posY] = 0;
316                                 posX--;
317                             }
318 
319                         }
320                     }
321                 }
322             }
323         }
324 
325         //向下移动
326         static void moveDown()
327         {
328             if (posX + 1 < 10)
329             {
330                 if (map[posX + 1, posY] == 0)   // 空地
331                 {
332                     if (map[posX, posY] == 6)
333                     {
334                         pre_clear();
335                         pre_save(posX, posY);
336                         pre_save(posX + 1, posY);
337 
338                         map[posX, posY] = 4;
339                         map[posX + 1, posY] = 2;
340                         posX++;
341                     }
342                     else if (map[posX, posY] == 2)
343                     {
344                         pre_clear();
345                         pre_save(posX, posY);
346                         pre_save(posX + 1, posY);
347 
348                         map[posX, posY] = 0;
349                         map[posX + 1, posY] = 2;
350                         posX++;
351                     }
352                 }
353                 else if (map[posX + 1, posY] == 4)  //成功点
354                 {
355                     
356                     if (map[posX, posY] == 6)
357                     {
358                         pre_clear();
359                         pre_save(posX, posY);
360                         pre_save(posX + 1, posY);
361 
362                         map[posX + 1, posY] = 6;
363                         map[posX, posY] = 4;
364                         posX++;
365                     }
366                     else if (map[posX, posY] == 2)
367                     {
368                         pre_clear();
369                         pre_save(posX, posY);
370                         pre_save(posX + 1, posY);
371 
372                         map[posX + 1, posY] = 6;
373                         map[posX, posY] = 0;
374                         posX++;
375                     }
376                 }
377                 else if (map[posX + 1, posY] == 3)   // 箱子
378                 {
379                     if (posX + 2 < 10)
380                     {
381                         if (map[posX + 2, posY] == 0)       // 箱子上面是空地
382                         {
383                             if (map[posX, posY] == 6)
384                             {
385                                 pre_clear();
386                                 pre_save(posX, posY);
387                                 pre_save(posX + 1, posY);
388                                 pre_save(posX + 2, posY);
389 
390 
391                                 map[posX + 2, posY] = 3;
392                                 map[posX + 1, posY] = 2;
393                                 map[posX, posY] = 4;
394                                 posX++;
395                             }
396                             else if (map[posX, posY] == 2)
397                             {
398                                 pre_clear();
399                                 pre_save(posX, posY);
400                                 pre_save(posX + 1, posY);
401                                 pre_save(posX + 2, posY);
402 
403                                 map[posX + 2, posY] = 3;
404                                 map[posX + 1, posY] = 2;
405                                 map[posX, posY] = 0;
406                                 posX++;
407                             }
408                         }
409                         else if (map[posX + 2, posY] == 4)      //箱子上面是成功点
410                         {
411                             if (map[posX, posY] == 6)
412                             {
413                                 pre_clear();
414                                 pre_save(posX, posY);
415                                 pre_save(posX + 1, posY);
416                                 pre_save(posX + 2, posY);
417 
418                                 map[posX + 2, posY] = 7;
419                                 map[posX + 1, posY] = 2;
420                                 map[posX, posY] = 4;
421                                 posX++;
422                             }
423                             else if (map[posX, posY] == 2)
424                             {
425                                 pre_clear();
426                                 pre_save(posX, posY);
427                                 pre_save(posX + 1, posY);
428                                 pre_save(posX + 2, posY);
429 
430                                 map[posX + 2, posY] = 7;
431                                 map[posX + 1, posY] = 2;
432                                 map[posX, posY] = 0;
433                                 posX++;
434                             }
435 
436                         }
437                     }
438                 }
439                 else if (map[posX + 1, posY] == 7)          // 箱子+成功点
440                 {
441                     if (posX + 2 < 10)
442                     {
443                         if (map[posX + 2, posY] == 0)       // 箱子上面是空地
444                         {
445                             if (map[posX, posY] == 6)
446                             {
447                                 pre_clear();
448                                 pre_save(posX, posY);
449                                 pre_save(posX + 1, posY);
450                                 pre_save(posX + 2, posY);
451 
452                                 map[posX + 2, posY] = 3;
453                                 map[posX + 1, posY] = 6;
454                                 map[posX, posY] = 4;
455                                 posX++;
456                             }
457                             else if (map[posX, posY] == 2)
458                             {
459                                 pre_clear();
460                                 pre_save(posX, posY);
461                                 pre_save(posX + 1, posY);
462                                 pre_save(posX + 2, posY);
463 
464                                 map[posX + 2, posY] = 3;
465                                 map[posX + 1, posY] = 6;
466                                 map[posX, posY] = 0;
467                                 posX++;
468                             }
469                         }
470                         else if (map[posX + 2, posY] == 4)      //箱子上面是成功点
471                         {
472                             if (map[posX, posY] == 6)
473                             {
474                                 pre_clear();
475                                 pre_save(posX, posY);
476                                 pre_save(posX + 1, posY);
477                                 pre_save(posX + 2, posY);
478 
479                                 map[posX + 2, posY] = 7;
480                                 map[posX + 1, posY] = 6;
481                                 map[posX, posY] = 4;
482                                 posX++;
483                             }
484                             else if (map[posX, posY] == 2)
485                             {
486                                 pre_clear();
487                                 pre_save(posX, posY);
488                                 pre_save(posX + 1, posY);
489                                 pre_save(posX + 2, posY);
490 
491                                 map[posX + 2, posY] = 7;
492                                 map[posX + 1, posY] = 6;
493                                 map[posX, posY] = 0;
494                                 posX++;
495                             }
496 
497                         }
498                     }
499                 }
500             }
501         }
502 
503         static void moveLeft()
504         {
505             if (posY - 1 >= 0)
506             {
507                 if (map[posX , posY-1] == 0)   // 空地
508                 {
509                     if (map[posX, posY] == 6)
510                     {
511                         pre_clear();
512                         pre_save(posX, posY);
513                         pre_save(posX, posY-1);
514 
515                         map[posX, posY] = 4;
516                         map[posX, posY-1] = 2;
517                         posY--;
518                     }
519                     else if (map[posX, posY] == 2)
520                     {
521                         pre_clear();
522                         pre_save(posX, posY);
523                         pre_save(posX, posY - 1);
524 
525                         map[posX, posY] = 0;
526                         map[posX, posY-1] = 2;
527                         posY--;
528                     }
529                 }
530                 else if (map[posX, posY-1] == 4)  //成功点
531                 {
532                     
533                     if (map[posX, posY] == 6)
534                     {
535                         pre_clear();
536                         pre_save(posX, posY);
537                         pre_save(posX, posY - 1);
538 
539                         map[posX, posY - 1] = 6;
540                         map[posX, posY] = 4;
541                         posY--;
542                     }
543                     else if (map[posX, posY] == 2)
544                     {
545                         pre_clear();
546                         pre_save(posX, posY);
547                         pre_save(posX, posY - 1);
548 
549                         map[posX, posY - 1] = 6;
550                         map[posX, posY] = 0;
551                         posY--;
552                     }
553                 }
554                 else if (map[posX, posY-1] == 3)   // 箱子
555                 {
556                     if (posY - 2 >= 0)
557                     {
558                         if (map[posX, posY-2] == 0)       // 箱子上面是空地
559                         {
560                             if (map[posX, posY] == 6)
561                             {
562                                 pre_clear();
563                                 pre_save(posX, posY);
564                                 pre_save(posX, posY - 1);
565                                 pre_save(posX, posY - 2);
566 
567                                 map[posX , posY-2] = 3;
568                                 map[posX, posY-1] = 2;
569                                 map[posX, posY] = 4;
570                                 posY--;
571                             }
572                             else if (map[posX, posY] == 2)
573                             {
574                                 pre_clear();
575                                 pre_save(posX, posY);
576                                 pre_save(posX, posY - 1);
577                                 pre_save(posX, posY - 2);
578 
579                                 map[posX , posY-2] = 3;
580                                 map[posX , posY-1] = 2;
581                                 map[posX, posY] = 0;
582                                 posY--;
583                             }
584                         }
585                         else if (map[posX , posY-2] == 4)      //箱子上面是成功点
586                         {
587                             if (map[posX, posY] == 6)
588                             {
589                                 pre_clear();
590                                 pre_save(posX, posY);
591                                 pre_save(posX, posY - 1);
592                                 pre_save(posX, posY - 2);
593 
594                                 map[posX, posY-2] = 7;
595                                 map[posX, posY-1] = 2;
596                                 map[posX, posY] = 4;
597                                 posY--;
598                             }
599                             else if (map[posX, posY] == 2)
600                             {
601                                 pre_clear();
602                                 pre_save(posX, posY);
603                                 pre_save(posX, posY - 1);
604                                 pre_save(posX, posY - 2);
605 
606                                 map[posX , posY-2] = 7;
607                                 map[posX , posY-1] = 2;
608                                 map[posX, posY] = 0;
609                                 posY--;
610                             }
611 
612                         }
613                     }
614                 }
615                 else if (map[posX, posY-1] == 7)          // 箱子+成功点
616                 {
617                     if (posY - 2 >= 0)
618                     {
619                         if (map[posX, posY-2] == 0)       // 箱子上面是空地
620                         {
621                             if (map[posX, posY] == 6)
622                             {
623                                 pre_clear();
624                                 pre_save(posX, posY);
625                                 pre_save(posX, posY - 1);
626                                 pre_save(posX, posY - 2);
627 
628                                 map[posX, posY-2] = 3;
629                                 map[posX, posY-1] = 6;
630                                 map[posX, posY] = 4;
631                                 posY--;
632                             }
633                             else if (map[posX, posY] == 2)
634                             {
635                                 pre_clear();
636                                 pre_save(posX, posY);
637                                 pre_save(posX, posY - 1);
638                                 pre_save(posX, posY - 2);
639 
640                                 map[posX, posY-2] = 3;
641                                 map[posX, posY-1] = 6;
642                                 map[posX, posY] = 0;
643                                 posY--;
644                             }
645                         }
646                         else if (map[posX, posY-2] == 4)      //箱子上面是成功点
647                         {
648                             if (map[posX, posY] == 6)
649                             {
650                                 pre_clear();
651                                 pre_save(posX, posY);
652                                 pre_save(posX, posY - 1);
653                                 pre_save(posX, posY - 2);
654 
655                                 map[posX, posY-2] = 7;
656                                 map[posX, posY-1] = 6;
657                                 map[posX, posY] = 4;
658                                 posY--;
659                             }
660                             else if (map[posX, posY] == 2)
661                             {
662                                 pre_clear();
663                                 pre_save(posX, posY);
664                                 pre_save(posX, posY - 1);
665                                 pre_save(posX, posY - 2);
666 
667                                 map[posX, posY-2] = 7;
668                                 map[posX, posY-1] = 6;
669                                 map[posX, posY] = 0;
670                                 posY--;
671                             }
672 
673                         }
674                     }
675                 }
676             }
677         }
678 
679         static void moveRight()
680         {
681             if (posY + 1 < 10)
682             {
683                 if (map[posX, posY + 1] == 0)   // 空地
684                 {
685                     if (map[posX, posY] == 6)
686                     {
687                         pre_clear();
688                         pre_save(posX, posY);
689                         pre_save(posX, posY + 1);
690 
691                         map[posX, posY] = 4;
692                         map[posX, posY + 1] = 2;
693                         posY++;
694                     }
695                     else if (map[posX, posY] == 2)
696                     {
697                         pre_clear();
698                         pre_save(posX, posY);
699                         pre_save(posX, posY + 1);
700 
701                         map[posX, posY] = 0;
702                         map[posX, posY + 1] = 2;
703                         posY++;
704                     }
705                 }
706                 else if (map[posX, posY + 1] == 4)  //成功点
707                 {
708                     
709                     if (map[posX, posY] == 6)
710                     {
711                         pre_clear();
712                         pre_save(posX, posY);
713                         pre_save(posX, posY + 1);
714 
715                         map[posX, posY + 1] = 6;
716                         map[posX, posY] = 4;
717                         posY++;
718                     }
719                     else if (map[posX, posY] == 2)
720                     {
721                         pre_clear();
722                         pre_save(posX, posY);
723                         pre_save(posX, posY + 1);
724 
725                         map[posX, posY + 1] = 6;
726                         map[posX, posY] = 0;
727                         posY++;
728                     }
729                 }
730                 else if (map[posX, posY + 1] == 3)   // 箱子
731                 {
732                     if (posY + 2 < 10)
733                     {
734                         if (map[posX, posY + 2] == 0)       // 箱子上面是空地
735                         {
736                             if (map[posX, posY] == 6)
737                             {
738                                 pre_clear();
739                                 pre_save(posX, posY);
740                                 pre_save(posX, posY + 1);
741                                 pre_save(posX, posY + 2);
742 
743                                 map[posX, posY + 2] = 3;
744                                 map[posX, posY + 1] = 2;
745                                 map[posX, posY] = 4;
746                                 posY++;
747                             }
748                             else if (map[posX, posY] == 2)
749                             {
750                                 pre_clear();
751                                 pre_save(posX, posY);
752                                 pre_save(posX, posY + 1);
753                                 pre_save(posX, posY + 2);
754 
755                                 map[posX, posY + 2] = 3;
756                                 map[posX, posY + 1] = 2;
757                                 map[posX, posY] = 0;
758                                 posY++;
759                             }
760                         }
761                         else if (map[posX, posY + 2] == 4)      //箱子上面是成功点
762                         {
763                             if (map[posX, posY] == 6)
764                             {
765                                 pre_clear();
766                                 pre_save(posX, posY);
767                                 pre_save(posX, posY + 1);
768                                 pre_save(posX, posY + 2);
769 
770                                 map[posX, posY + 2] = 7;
771                                 map[posX, posY + 1] = 2;
772                                 map[posX, posY] = 4;
773                                 posY++;
774                             }
775                             else if (map[posX, posY] == 2)
776                             {
777                                 pre_clear();
778                                 pre_save(posX, posY);
779                                 pre_save(posX, posY + 1);
780                                 pre_save(posX, posY + 2);
781 
782                                 map[posX, posY + 2] = 7;
783                                 map[posX, posY + 1] = 2;
784                                 map[posX, posY] = 0;
785                                 posY++;
786                             }
787 
788                         }
789                     }
790                 }
791                 else if (map[posX, posY + 1] == 7)          // 箱子+成功点
792                 {
793                     if (posY + 2 < 10)
794                     {
795                         if (map[posX, posY + 2] == 0)       // 箱子上面是空地
796                         {
797                             if (map[posX, posY] == 6)
798                             {
799                                 pre_clear();
800                                 pre_save(posX, posY);
801                                 pre_save(posX, posY + 1);
802                                 pre_save(posX, posY + 2);
803 
804                                 map[posX, posY + 2] = 3;
805                                 map[posX, posY + 1] = 6;
806                                 map[posX, posY] = 4;
807                                 posY++;
808                             }
809                             else if (map[posX, posY] == 2)
810                             {
811                                 pre_clear();
812                                 pre_save(posX, posY);
813                                 pre_save(posX, posY + 1);
814                                 pre_save(posX, posY + 2);
815 
816                                 map[posX, posY + 2] = 3;
817                                 map[posX, posY + 1] = 6;
818                                 map[posX, posY] = 0;
819                                 posY++;
820                             }
821                         }
822                         else if (map[posX, posY + 2] == 4)      //箱子上面是成功点
823                         {
824                             if (map[posX, posY] == 6)
825                             {
826                                 pre_clear();
827                                 pre_save(posX, posY);
828                                 pre_save(posX, posY + 1);
829                                 pre_save(posX, posY + 2);
830 
831                                 map[posX, posY + 2] = 7;
832                                 map[posX, posY + 1] = 6;
833                                 map[posX, posY] = 4;
834                                 posY++;
835                             }
836                             else if (map[posX, posY] == 2)
837                             {
838                                 pre_clear();
839                                 pre_save(posX, posY);
840                                 pre_save(posX, posY + 1);
841                                 pre_save(posX, posY + 2);
842 
843                                 map[posX, posY + 2] = 7;
844                                 map[posX, posY + 1] = 6;
845                                 map[posX, posY] = 0;
846                                 posY++;
847                             }
848 
849                         }
850                     }
851                 }
852             }
853         }
854 
855         static bool move()
856         {
857             var info = Console.ReadKey();
858             if (info.Key == ConsoleKey.UpArrow||info.Key ==  ConsoleKey.W)
859             {
860                 cnt++;
861                 moveUp();
862                 
863             }
864             
865             else if (info.Key == ConsoleKey.DownArrow||info.Key == ConsoleKey.S)
866             {
867                 cnt++;
868                 moveDown();
869             }
870 
871             else if (info.Key == ConsoleKey.LeftArrow || info.Key == ConsoleKey.A)
872             {
873                 cnt++;
874                 moveLeft();   
875             }
876 
877             else if (info.Key == ConsoleKey.RightArrow || info.Key == ConsoleKey.D)
878             {
879                 cnt++;
880                 moveRight();
881             }
882             else if (info.Key == ConsoleKey.Z)
883             {
884                 if (list_cnt > 0)
885                 {
886                     cnt--;
887                     for (int i = 0; i < list_cnt; i++)
888                     {
889                         int tx = list[i].posX;
890                         int ty = list[i].posY;
891                         int tmax = list[i].mapx;
892 
893                         map[tx, ty] = tmax;
894 
895                     }
896                     posX = list[0].posX;
897                     posY = list[0].posY;
898                     pre_clear();
899                 }
900                 
901                 
902             }
903             return victory();
904         }
905 
906         static void Main(string[] args)
907         {
908             // System.Console.WriteLine("Hello");
909             for (int i = 0; i < 1; i++)
910             {
911                 init();
912                 while (true)
913                 {
914 
915                     draw();
916                     if (move()==true)
917                     {
918                         break;
919                     }
920                 }
921                 Console.Clear();
922                 
923                 Console.WriteLine("恭喜!");
924                 Console.ReadKey();
925             }
926                 
927         }
928     }
929 }
PushBox

相关文章: