推箱子Unity

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

 

需要注意的地方不少:

  • 进一步,需要考虑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

 

基本上整个推箱子的逻辑部分就已经完成了,现在只要在Unity下进行实例化就可以了。

 

Source Code:

   1 using UnityEngine;
   2 using System.Collections;
   3 using UnityEngine.UI;
   4 
   5 struct State
   6 {
   7     public int posX, posY, mapx;
   8 }
   9 public class Map : MonoBehaviour
  10 {
  11 
  12     public GameObject wallPre;
  13     public GameObject Box;
  14     public GameObject Point;
  15     public GameObject EndPoint;
  16     public GameObject man;
  17 
  18     int posX, posY;
  19 
  20     State[] list = new State[5];
  21     int list_cnt = 0;
  22     //箱子个数
  23     int cube_cnt;
  24     int _cube_cnt;
  25     //步数
  26     int cnt;
  27 
  28 
  29     void pre_clear()
  30     {
  31         list_cnt = 0;
  32     }
  33     void pre_save(int POSX, int POSY)
  34     {
  35         list[list_cnt].posX = POSX;
  36         list[list_cnt].posY = POSY;
  37         list[list_cnt].mapx = map[POSX, POSY];
  38         list_cnt++;
  39     }
  40     bool victory()
  41     {
  42         int flag_cube_cnt = 0;
  43         for (int i = 0; i < 10; i++)
  44         {
  45             for (int j = 0; j < 10; j++)
  46             {
  47                 if (map[i, j] == 7)
  48                     flag_cube_cnt++;
  49             }
  50         }
  51         return flag_cube_cnt == cube_cnt;
  52     }
  53 
  54 
  55 
  56 
  57     static int[,] map = new int[10, 10]
  58         {
  59             {1,1,1,1,1,1,1,1,1,1},
  60             {1,4,0,0,0,0,0,0,0,1},
  61             {1,0,0,0,0,0,0,4,0,1},
  62             {1,0,3,0,0,4,0,0,0,1},
  63             {1,0,0,0,0,3,0,0,0,1},
  64             {1,0,0,2,0,0,0,0,0,1},
  65             {1,4,0,0,0,3,0,0,0,1},
  66             {1,0,0,3,0,0,0,0,0,1},
  67             {1,0,0,0,0,0,0,0,0,1},
  68             {1,1,1,1,1,1,1,1,1,1},
  69         };
  70     static int[,] map_1 = new int[10, 10] {
  71         {1,1,1,1,1,1,1,1,1,1},
  72             {1,4,0,0,0,0,0,0,0,1},
  73             {1,0,0,0,0,0,0,4,0,1},
  74             {1,0,3,0,0,4,0,0,0,1},
  75             {1,0,0,0,0,3,0,0,0,1},
  76             {1,0,0,2,0,0,0,0,0,1},
  77             {1,4,0,0,0,3,0,0,0,1},
  78             {1,0,0,3,0,0,0,0,0,1},
  79             {1,0,0,0,0,0,0,0,0,1},
  80             {1,1,1,1,1,1,1,1,1,1},
  81     };
  82 
  83     static int[,] map_2 = new int[10, 10] {
  84             {1,1,1,1,1,1,1,1,1,1},
  85             {1,4,0,0,0,0,0,0,0,1},
  86             {1,4,0,0,0,0,0,4,0,1},
  87             {1,0,3,0,0,4,0,0,0,1},
  88             {1,0,0,3,0,3,0,0,0,1},
  89             {1,0,0,0,0,0,0,0,0,1},
  90             {1,4,0,0,0,3,0,0,0,1},
  91             {1,0,0,3,0,2,0,0,0,1},
  92             {1,0,0,0,0,0,0,0,0,1},
  93             {1,1,1,1,1,1,1,1,1,1},
  94     };
  95 
  96     GameObject x;
  97     // Use this for initialization
  98     void Start()
  99     {
 100         x = GameObject.Find("victory_UI");
 101         x.SetActive(false);
 102         init();
 103         draw();
 104     }
 105     // Update is called once per frame
 106     void Update()
 107     {
 108         draw();
 109         if (move())
 110         {
 111             print("xxxxxxxxxxxxxxxxxxxxx\n");
 112             
 113             x.SetActive(true);
 114             
 115             //init();
 116            // draw();
 117         }
 118     }
 119 
 120     Vector3 getPoint(int x, float y, int z)
 121     {
 122         return new Vector3(x - 5.5f, y, z - 5.5f);
 123     }
 124 
 125     //关卡
 126     static int level;
 127     void init()
 128     {
 129         cube_cnt = 0;
 130         cnt = 0;
 131 
 132         GameObject x = GameObject.Find("level");
 133         string tmp;
 134         tmp = "" + (level+1).ToString() + "";
 135         x.GetComponent<Text>().text = tmp; 
 136 
 137         if (level == 0)
 138         {
 139             for (int i = 0; i < 10; i++)
 140             {
 141                 for (int j = 0; j < 10; j++)
 142                 {
 143                     if (map[i, j] == 3)
 144                     {
 145                         cube_cnt++;
 146                     }
 147                     if (map[i, j] == 2)
 148                     {
 149                         posX = i;
 150                         posY = j;
 151                         pre_save(i, j);
 152                     }
 153                 }
 154             }
 155         }
 156         else if (level >= 1)
 157         {
 158             map = new int[10, 10] {
 159             {1,1,1,1,1,1,1,1,1,1},
 160             {1,4,0,0,0,0,0,0,0,1},
 161             {1,4,0,0,0,0,0,4,0,1},
 162             {1,0,3,0,0,4,0,0,0,1},
 163             {1,0,0,3,0,3,0,0,0,1},
 164             {1,0,0,0,0,0,0,0,0,1},
 165             {1,4,0,0,0,3,0,0,0,1},
 166             {1,0,0,3,0,2,0,0,0,1},
 167             {1,0,0,0,0,0,0,0,0,1},
 168             {1,1,1,1,1,1,1,1,1,1},
 169             };
 170             for (int i = 0; i < 10; i++)
 171             {
 172                 for (int j = 0; j < 10; j++)
 173                 {
 174                     if (map[i, j] == 3)
 175                     {
 176                         cube_cnt++;
 177                     }
 178                     if (map[i, j] == 2)
 179                     {
 180                         posX = i;
 181                         posY = j;
 182                         pre_save(i, j);
 183                     }
 184                 }
 185             }
 186         }
 187         level++;
 188         Game_UI_Manage.Level++;
 189     }
 190 
 191 
 192     void draw()
 193     {
 194         destroyMap();
 195         for (int i = 0; i < 10; i++)
 196         {
 197             for (int j = 0; j < 10; j++)
 198             {
 199                 if (map[i, j] == 1)             //#
 200                 {
 201                     Instantiate(wallPre, getPoint(i, 0.5f, j), Quaternion.identity);
 202                     //System.Console.Write("■");
 203                 }
 204                 else if (map[i, j] == 0)
 205                 {
 206 
 207                 }
 208 
 209                 //System.Console.Write("  ");
 210                 else if (map[i, j] == 2)        //pepole
 211                 {
 212                     Instantiate(man, getPoint(i, 0.5f, j), Quaternion.identity);
 213                     //System.Console.Write("♀");
 214                 }
 215                 else if (map[i, j] == 3)
 216                 {
 217                     Instantiate(Box, getPoint(i, 0.5f, j), Quaternion.identity);
 218                     //System.Console.Write("△");
 219                 }
 220                 else if (map[i, j] == 4)
 221                 {
 222                     Instantiate(Point, getPoint(i, 0.5f, j), Quaternion.identity);
 223                     //System.Console.Write("☆");f
 224                 }
 225                 else if (map[i, j] == 6)   // 人 + 成功点
 226                 {
 227                     Instantiate(man, getPoint(i, 0.5f, j), Quaternion.identity);
 228                 }
 229                 else if (map[i, j] == 7)
 230                 {
 231                     Instantiate(EndPoint, getPoint(i, 0.5f, j), Quaternion.identity);
 232 
 233                 }
 234 
 235             }
 236 
 237         }
 238 
 239     }
 240 
 241 
 242     void destroyMap()
 243     {
 244         GameObject[] gos = GameObject.FindGameObjectsWithTag("brick");
 245         foreach (var go in gos)
 246         {
 247             Destroy(go);
 248         }
 249     }
 250 
 251 
 252 
 253 
 254     bool move()
 255     {
 256         //
 257         if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.A))
 258         {
 259             cnt++;
 260             moveUp();
 261         }
 262         //
 263         else if (Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.D))
 264         {
 265             cnt++;
 266             moveDown();
 267 
 268         }
 269         //
 270         else if (Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.S))
 271         {
 272             cnt++;
 273             moveLeft();
 274         }
 275         //
 276         else if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W))
 277         {
 278             cnt++;
 279             moveRight();
 280         }
 281         else if (Input.GetKeyDown(KeyCode.Z))
 282         {
 283             if (list_cnt > 0)
 284             {
 285                 cnt--;
 286                 for (int i = 0; i < list_cnt; i++)
 287                 {
 288                     int tx = list[i].posX;
 289                     int ty = list[i].posY;
 290                     int tmax = list[i].mapx;
 291 
 292                     map[tx, ty] = tmax;
 293 
 294                 }
 295                 posX = list[0].posX;
 296                 posY = list[0].posY;
 297                 pre_clear();
 298             }
 299         }
 300         return victory();
 301     }
 302 
 303 
 304 
 305 
 306     void moveUp()
 307     {
 308         if (posX - 1 >= 0)
 309         {
 310             if (map[posX - 1, posY] == 0)   // 空地
 311             {
 312                 if (map[posX, posY] == 6)
 313                 {
 314                     pre_clear();
 315                     pre_save(posX, posY);
 316                     pre_save(posX - 1, posY);
 317 
 318 
 319                     map[posX, posY] = 4;
 320                     map[posX - 1, posY] = 2;
 321                     posX--;
 322                     //now_save();
 323                 }
 324                 else if (map[posX, posY] == 2)
 325                 {
 326                     pre_clear();
 327                     pre_save(posX, posY);
 328                     pre_save(posX - 1, posY);
 329                     map[posX, posY] = 0;
 330                     map[posX - 1, posY] = 2;
 331                     posX--;
 332                 }
 333             }
 334             else if (map[posX - 1, posY] == 4)  //成功点
 335             {
 336 
 337                 if (map[posX, posY] == 6)
 338                 {
 339                     pre_clear();
 340                     pre_save(posX, posY);
 341                     pre_save(posX - 1, posY);
 342                     map[posX - 1, posY] = 6;
 343                     map[posX, posY] = 4;
 344                     posX--;
 345                 }
 346                 else if (map[posX, posY] == 2)
 347                 {
 348                     pre_clear();
 349                     pre_save(posX, posY);
 350                     pre_save(posX - 1, posY);
 351 
 352                     map[posX - 1, posY] = 6;
 353                     map[posX, posY] = 0;
 354                     posX--;
 355                 }
 356             }
 357             else if (map[posX - 1, posY] == 3)   // 箱子
 358             {
 359                 if (posX - 2 >= 0)
 360                 {
 361                     if (map[posX - 2, posY] == 0)       // 箱子上面是空地
 362                     {
 363                         if (map[posX, posY] == 6)
 364                         {
 365 
 366                             // pre_save();
 367                             pre_clear();
 368                             pre_save(posX, posY);
 369                             pre_save(posX - 1, posY);
 370                             pre_save(posX - 2, posY);
 371 
 372 
 373                             map[posX - 2, posY] = 3;
 374                             map[posX - 1, posY] = 2;
 375                             map[posX, posY] = 4;
 376                             posX--;
 377                         }
 378                         else if (map[posX, posY] == 2)
 379                         {
 380                             pre_clear();
 381                             pre_save(posX, posY);
 382                             pre_save(posX - 1, posY);
 383                             pre_save(posX - 2, posY);
 384 
 385                             map[posX - 2, posY] = 3;
 386                             map[posX - 1, posY] = 2;
 387                             map[posX, posY] = 0;
 388                             posX--;
 389                         }
 390                     }
 391                     else if (map[posX - 2, posY] == 4)      //箱子上面是成功点
 392                     {
 393                         if (map[posX, posY] == 6)
 394                         {
 395                             pre_clear();
 396                             pre_save(posX, posY);
 397                             pre_save(posX - 1, posY);
 398                             pre_save(posX - 2, posY);
 399 
 400                             map[posX - 2, posY] = 7;
 401                             map[posX - 1, posY] = 2;
 402                             map[posX, posY] = 4;
 403                             posX--;
 404                         }
 405                         else if (map[posX, posY] == 2)
 406                         {
 407                             pre_clear();
 408                             pre_save(posX, posY);
 409                             pre_save(posX - 1, posY);
 410                             pre_save(posX - 2, posY);
 411 
 412                             map[posX - 2, posY] = 7;
 413                             map[posX - 1, posY] = 2;
 414                             map[posX, posY] = 0;
 415                             posX--;
 416                         }
 417 
 418                     }
 419                 }
 420             }
 421             else if (map[posX - 1, posY] == 7)          // 箱子+成功点
 422             {
 423                 if (posX - 2 >= 0)
 424                 {
 425                     if (map[posX - 2, posY] == 0)       // 箱子上面是空地
 426                     {
 427                         if (map[posX, posY] == 6)
 428                         {
 429                             pre_clear();
 430                             pre_save(posX, posY);
 431                             pre_save(posX - 1, posY);
 432                             pre_save(posX - 2, posY);
 433 
 434                             map[posX - 2, posY] = 3;
 435                             map[posX - 1, posY] = 6;
 436                             map[posX, posY] = 4;
 437                             posX--;
 438                         }
 439                         else if (map[posX, posY] == 2)
 440                         {
 441                             pre_clear();
 442                             pre_save(posX, posY);
 443                             pre_save(posX - 1, posY);
 444                             pre_save(posX - 2, posY);
 445 
 446                             map[posX - 2, posY] = 3;
 447                             map[posX - 1, posY] = 6;
 448                             map[posX, posY] = 0;
 449                             posX--;
 450                         }
 451                     }
 452                     else if (map[posX - 2, posY] == 4)      //箱子上面是成功点
 453                     {
 454                         if (map[posX, posY] == 6)
 455                         {
 456                             pre_clear();
 457                             pre_save(posX, posY);
 458                             pre_save(posX - 1, posY);
 459                             pre_save(posX - 2, posY);
 460 
 461                             map[posX - 2, posY] = 7;
 462                             map[posX - 1, posY] = 6;
 463                             map[posX, posY] = 4;
 464                             posX--;
 465                         }
 466                         else if (map[posX, posY] == 2)
 467                         {
 468                             pre_clear();
 469                             pre_save(posX, posY);
 470                             pre_save(posX - 1, posY);
 471                             pre_save(posX - 2, posY);
 472 
 473                             map[posX - 2, posY] = 7;
 474                             map[posX - 1, posY] = 6;
 475                             map[posX, posY] = 0;
 476                             posX--;
 477                         }
 478 
 479                     }
 480                 }
 481             }
 482         }
 483     }
 484 
 485 
 486     //向下移动
 487     void moveDown()
 488     {
 489         if (posX + 1 < 10)
 490         {
 491             if (map[posX + 1, posY] == 0)   // 空地
 492             {
 493                 if (map[posX, posY] == 6)
 494                 {
 495                     pre_clear();
 496                     pre_save(posX, posY);
 497                     pre_save(posX + 1, posY);
 498 
 499                     map[posX, posY] = 4;
 500                     map[posX + 1, posY] = 2;
 501                     posX++;
 502                 }
 503                 else if (map[posX, posY] == 2)
 504                 {
 505                     pre_clear();
 506                     pre_save(posX, posY);
 507                     pre_save(posX + 1, posY);
 508 
 509                     map[posX, posY] = 0;
 510                     map[posX + 1, posY] = 2;
 511                     posX++;
 512                 }
 513             }
 514             else if (map[posX + 1, posY] == 4)  //成功点
 515             {
 516 
 517                 if (map[posX, posY] == 6)
 518                 {
 519                     pre_clear();
 520                     pre_save(posX, posY);
 521                     pre_save(posX + 1, posY);
 522 
 523                     map[posX + 1, posY] = 6;
 524                     map[posX, posY] = 4;
 525                     posX++;
 526                 }
 527                 else if (map[posX, posY] == 2)
 528                 {
 529                     pre_clear();
 530                     pre_save(posX, posY);
 531                     pre_save(posX + 1, posY);
 532 
 533                     map[posX + 1, posY] = 6;
 534                     map[posX, posY] = 0;
 535                     posX++;
 536                 }
 537             }
 538             else if (map[posX + 1, posY] == 3)   // 箱子
 539             {
 540                 if (posX + 2 < 10)
 541                 {
 542                     if (map[posX + 2, posY] == 0)       // 箱子上面是空地
 543                     {
 544                         if (map[posX, posY] == 6)
 545                         {
 546                             pre_clear();
 547                             pre_save(posX, posY);
 548                             pre_save(posX + 1, posY);
 549                             pre_save(posX + 2, posY);
 550 
 551 
 552                             map[posX + 2, posY] = 3;
 553                             map[posX + 1, posY] = 2;
 554                             map[posX, posY] = 4;
 555                             posX++;
 556                         }
 557                         else if (map[posX, posY] == 2)
 558                         {
 559                             pre_clear();
 560                             pre_save(posX, posY);
 561                             pre_save(posX + 1, posY);
 562                             pre_save(posX + 2, posY);
 563 
 564                             map[posX + 2, posY] = 3;
 565                             map[posX + 1, posY] = 2;
 566                             map[posX, posY] = 0;
 567                             posX++;
 568                         }
 569                     }
 570                     else if (map[posX + 2, posY] == 4)      //箱子上面是成功点
 571                     {
 572                         if (map[posX, posY] == 6)
 573                         {
 574                             pre_clear();
 575                             pre_save(posX, posY);
 576                             pre_save(posX + 1, posY);
 577                             pre_save(posX + 2, posY);
 578 
 579                             map[posX + 2, posY] = 7;
 580                             map[posX + 1, posY] = 2;
 581                             map[posX, posY] = 4;
 582                             posX++;
 583                         }
 584                         else if (map[posX, posY] == 2)
 585                         {
 586                             pre_clear();
 587                             pre_save(posX, posY);
 588                             pre_save(posX + 1, posY);
 589                             pre_save(posX + 2, posY);
 590 
 591                             map[posX + 2, posY] = 7;
 592                             map[posX + 1, posY] = 2;
 593                             map[posX, posY] = 0;
 594                             posX++;
 595                         }
 596 
 597                     }
 598                 }
 599             }
 600             else if (map[posX + 1, posY] == 7)          // 箱子+成功点
 601             {
 602                 if (posX + 2 < 10)
 603                 {
 604                     if (map[posX + 2, posY] == 0)       // 箱子上面是空地
 605                     {
 606                         if (map[posX, posY] == 6)
 607                         {
 608                             pre_clear();
 609                             pre_save(posX, posY);
 610                             pre_save(posX + 1, posY);
 611                             pre_save(posX + 2, posY);
 612 
 613                             map[posX + 2, posY] = 3;
 614                             map[posX + 1, posY] = 6;
 615                             map[posX, posY] = 4;
 616                             posX++;
 617                         }
 618                         else if (map[posX, posY] == 2)
 619                         {
 620                             pre_clear();
 621                             pre_save(posX, posY);
 622                             pre_save(posX + 1, posY);
 623                             pre_save(posX + 2, posY);
 624 
 625                             map[posX + 2, posY] = 3;
 626                             map[posX + 1, posY] = 6;
 627                             map[posX, posY] = 0;
 628                             posX++;
 629                         }
 630                     }
 631                     else if (map[posX + 2, posY] == 4)      //箱子上面是成功点
 632                     {
 633                         if (map[posX, posY] == 6)
 634                         {
 635                             pre_clear();
 636                             pre_save(posX, posY);
 637                             pre_save(posX + 1, posY);
 638                             pre_save(posX + 2, posY);
 639 
 640                             map[posX + 2, posY] = 7;
 641                             map[posX + 1, posY] = 6;
 642                             map[posX, posY] = 4;
 643                             posX++;
 644                         }
 645                         else if (map[posX, posY] == 2)
 646                         {
 647                             pre_clear();
 648                             pre_save(posX, posY);
 649                             pre_save(posX + 1, posY);
 650                             pre_save(posX + 2, posY);
 651 
 652                             map[posX + 2, posY] = 7;
 653                             map[posX + 1, posY] = 6;
 654                             map[posX, posY] = 0;
 655                             posX++;
 656                         }
 657 
 658                     }
 659                 }
 660             }
 661         }
 662     }
 663 
 664     void moveLeft()
 665     {
 666         if (posY - 1 >= 0)
 667         {
 668             if (map[posX, posY - 1] == 0)   // 空地
 669             {
 670                 if (map[posX, posY] == 6)
 671                 {
 672                     pre_clear();
 673                     pre_save(posX, posY);
 674                     pre_save(posX, posY - 1);
 675 
 676                     map[posX, posY] = 4;
 677                     map[posX, posY - 1] = 2;
 678                     posY--;
 679                 }
 680                 else if (map[posX, posY] == 2)
 681                 {
 682                     pre_clear();
 683                     pre_save(posX, posY);
 684                     pre_save(posX, posY - 1);
 685 
 686                     map[posX, posY] = 0;
 687                     map[posX, posY - 1] = 2;
 688                     posY--;
 689                 }
 690             }
 691             else if (map[posX, posY - 1] == 4)  //成功点
 692             {
 693 
 694                 if (map[posX, posY] == 6)
 695                 {
 696                     pre_clear();
 697                     pre_save(posX, posY);
 698                     pre_save(posX, posY - 1);
 699 
 700                     map[posX, posY - 1] = 6;
 701                     map[posX, posY] = 4;
 702                     posY--;
 703                 }
 704                 else if (map[posX, posY] == 2)
 705                 {
 706                     pre_clear();
 707                     pre_save(posX, posY);
 708                     pre_save(posX, posY - 1);
 709 
 710                     map[posX, posY - 1] = 6;
 711                     map[posX, posY] = 0;
 712                     posY--;
 713                 }
 714             }
 715             else if (map[posX, posY - 1] == 3)   // 箱子
 716             {
 717                 if (posY - 2 >= 0)
 718                 {
 719                     if (map[posX, posY - 2] == 0)       // 箱子上面是空地
 720                     {
 721                         if (map[posX, posY] == 6)
 722                         {
 723                             pre_clear();
 724                             pre_save(posX, posY);
 725                             pre_save(posX, posY - 1);
 726                             pre_save(posX, posY - 2);
 727 
 728                             map[posX, posY - 2] = 3;
 729                             map[posX, posY - 1] = 2;
 730                             map[posX, posY] = 4;
 731                             posY--;
 732                         }
 733                         else if (map[posX, posY] == 2)
 734                         {
 735                             pre_clear();
 736                             pre_save(posX, posY);
 737                             pre_save(posX, posY - 1);
 738                             pre_save(posX, posY - 2);
 739 
 740                             map[posX, posY - 2] = 3;
 741                             map[posX, posY - 1] = 2;
 742                             map[posX, posY] = 0;
 743                             posY--;
 744                         }
 745                     }
 746                     else if (map[posX, posY - 2] == 4)      //箱子上面是成功点
 747                     {
 748                         if (map[posX, posY] == 6)
 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] = 7;
 756                             map[posX, posY - 1] = 2;
 757                             map[posX, posY] = 4;
 758                             posY--;
 759                         }
 760                         else if (map[posX, posY] == 2)
 761                         {
 762                             pre_clear();
 763                             pre_save(posX, posY);
 764                             pre_save(posX, posY - 1);
 765                             pre_save(posX, posY - 2);
 766 
 767                             map[posX, posY - 2] = 7;
 768                             map[posX, posY - 1] = 2;
 769                             map[posX, posY] = 0;
 770                             posY--;
 771                         }
 772 
 773                     }
 774                 }
 775             }
 776             else if (map[posX, posY - 1] == 7)          // 箱子+成功点
 777             {
 778                 if (posY - 2 >= 0)
 779                 {
 780                     if (map[posX, posY - 2] == 0)       // 箱子上面是空地
 781                     {
 782                         if (map[posX, posY] == 6)
 783                         {
 784                             pre_clear();
 785                             pre_save(posX, posY);
 786                             pre_save(posX, posY - 1);
 787                             pre_save(posX, posY - 2);
 788 
 789                             map[posX, posY - 2] = 3;
 790                             map[posX, posY - 1] = 6;
 791                             map[posX, posY] = 4;
 792                             posY--;
 793                         }
 794                         else if (map[posX, posY] == 2)
 795                         {
 796                             pre_clear();
 797                             pre_save(posX, posY);
 798                             pre_save(posX, posY - 1);
 799                             pre_save(posX, posY - 2);
 800 
 801                             map[posX, posY - 2] = 3;
 802                             map[posX, posY - 1] = 6;
 803                             map[posX, posY] = 0;
 804                             posY--;
 805                         }
 806                     }
 807                     else if (map[posX, posY - 2] == 4)      //箱子上面是成功点
 808                     {
 809                         if (map[posX, posY] == 6)
 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] = 7;
 817                             map[posX, posY - 1] = 6;
 818                             map[posX, posY] = 4;
 819                             posY--;
 820                         }
 821                         else if (map[posX, posY] == 2)
 822                         {
 823                             pre_clear();
 824                             pre_save(posX, posY);
 825                             pre_save(posX, posY - 1);
 826                             pre_save(posX, posY - 2);
 827 
 828                             map[posX, posY - 2] = 7;
 829                             map[posX, posY - 1] = 6;
 830                             map[posX, posY] = 0;
 831                             posY--;
 832                         }
 833 
 834                     }
 835                 }
 836             }
 837         }
 838     }
 839 
 840 
 841     void moveRight()
 842     {
 843         if (posY + 1 < 10)
 844         {
 845             if (map[posX, posY + 1] == 0)   // 空地
 846             {
 847                 if (map[posX, posY] == 6)
 848                 {
 849                     pre_clear();
 850                     pre_save(posX, posY);
 851                     pre_save(posX, posY + 1);
 852 
 853                     map[posX, posY] = 4;
 854                     map[posX, posY + 1] = 2;
 855                     posY++;
 856                 }
 857                 else if (map[posX, posY] == 2)
 858                 {
 859                     pre_clear();
 860                     pre_save(posX, posY);
 861                     pre_save(posX, posY + 1);
 862 
 863                     map[posX, posY] = 0;
 864                     map[posX, posY + 1] = 2;
 865                     posY++;
 866                 }
 867             }
 868             else if (map[posX, posY + 1] == 4)  //成功点
 869             {
 870 
 871                 if (map[posX, posY] == 6)
 872                 {
 873                     pre_clear();
 874                     pre_save(posX, posY);
 875                     pre_save(posX, posY + 1);
 876 
 877                     map[posX, posY + 1] = 6;
 878                     map[posX, posY] = 4;
 879                     posY++;
 880                 }
 881                 else if (map[posX, posY] == 2)
 882                 {
 883                     pre_clear();
 884                     pre_save(posX, posY);
 885                     pre_save(posX, posY + 1);
 886 
 887                     map[posX, posY + 1] = 6;
 888                     map[posX, posY] = 0;
 889                     posY++;
 890                 }
 891             }
 892             else if (map[posX, posY + 1] == 3)   // 箱子
 893             {
 894                 if (posY + 2 < 10)
 895                 {
 896                     if (map[posX, posY + 2] == 0)       // 箱子上面是空地
 897                     {
 898                         if (map[posX, posY] == 6)
 899                         {
 900                             pre_clear();
 901                             pre_save(posX, posY);
 902                             pre_save(posX, posY + 1);
 903                             pre_save(posX, posY + 2);
 904 
 905                             map[posX, posY + 2] = 3;
 906                             map[posX, posY + 1] = 2;
 907                             map[posX, posY] = 4;
 908                             posY++;
 909                         }
 910                         else if (map[posX, posY] == 2)
 911                         {
 912                             pre_clear();
 913                             pre_save(posX, posY);
 914                             pre_save(posX, posY + 1);
 915                             pre_save(posX, posY + 2);
 916 
 917                             map[posX, posY + 2] = 3;
 918                             map[posX, posY + 1] = 2;
 919                             map[posX, posY] = 0;
 920                             posY++;
 921                         }
 922                     }
 923                     else if (map[posX, posY + 2] == 4)      //箱子上面是成功点
 924                     {
 925                         if (map[posX, posY] == 6)
 926                         {
 927                             pre_clear();
 928                             pre_save(posX, posY);
 929                             pre_save(posX, posY + 1);
 930                             pre_save(posX, posY + 2);
 931 
 932                             map[posX, posY + 2] = 7;
 933                             map[posX, posY + 1] = 2;
 934                             map[posX, posY] = 4;
 935                             posY++;
 936                         }
 937                         else if (map[posX, posY] == 2)
 938                         {
 939                             pre_clear();
 940                             pre_save(posX, posY);
 941                             pre_save(posX, posY + 1);
 942                             pre_save(posX, posY + 2);
 943 
 944                             map[posX, posY + 2] = 7;
 945                             map[posX, posY + 1] = 2;
 946                             map[posX, posY] = 0;
 947                             posY++;
 948                         }
 949 
 950                     }
 951                 }
 952             }
 953             else if (map[posX, posY + 1] == 7)          // 箱子+成功点
 954             {
 955                 if (posY + 2 < 10)
 956                 {
 957                     if (map[posX, posY + 2] == 0)       // 箱子上面是空地
 958                     {
 959                         if (map[posX, posY] == 6)
 960                         {
 961                             pre_clear();
 962                             pre_save(posX, posY);
 963                             pre_save(posX, posY + 1);
 964                             pre_save(posX, posY + 2);
 965 
 966                             map[posX, posY + 2] = 3;
 967                             map[posX, posY + 1] = 6;
 968                             map[posX, posY] = 4;
 969                             posY++;
 970                         }
 971                         else if (map[posX, posY] == 2)
 972                         {
 973                             pre_clear();
 974                             pre_save(posX, posY);
 975                             pre_save(posX, posY + 1);
 976                             pre_save(posX, posY + 2);
 977 
 978                             map[posX, posY + 2] = 3;
 979                             map[posX, posY + 1] = 6;
 980                             map[posX, posY] = 0;
 981                             posY++;
 982                         }
 983                     }
 984                     else if (map[posX, posY + 2] == 4)      //箱子上面是成功点
 985                     {
 986                         if (map[posX, posY] == 6)
 987                         {
 988                             pre_clear();
 989                             pre_save(posX, posY);
 990                             pre_save(posX, posY + 1);
 991                             pre_save(posX, posY + 2);
 992 
 993                             map[posX, posY + 2] = 7;
 994                             map[posX, posY + 1] = 6;
 995                             map[posX, posY] = 4;
 996                             posY++;
 997                         }
 998                         else if (map[posX, posY] == 2)
 999                         {
1000                             pre_clear();
1001                             pre_save(posX, posY);
1002                             pre_save(posX, posY + 1);
1003                             pre_save(posX, posY + 2);
1004 
1005                             map[posX, posY + 2] = 7;
1006                             map[posX, posY + 1] = 6;
1007                             map[posX, posY] = 0;
1008                             posY++;
1009                         }
1010 
1011                     }
1012                 }
1013             }
1014         }
1015     }
1016 
1017 
1018     static public void Reset(int Level)
1019     {
1020         level = Level;
1021         if (Level == 0)
1022         {
1023             for (int i = 0; i < 10; i++)
1024                 for (int j = 0; j < 10; j++)
1025                     map[i,j] = map_1[i,j];
1026 
1027         }
1028         else if (Level >= 1)
1029         {
1030             for (int i = 0; i < 10; i++)
1031                 for (int j = 0; j < 10; j++)
1032                     map[i, j] = map_2[i, j];
1033 
1034         }
1035         
1036     }
1037 
1038     public static void set_level(int Level)
1039     {
1040         level = Level;
1041         if (Level == 0)
1042         {
1043             for (int i = 0; i < 10; i++)
1044                 for (int j = 0; j < 10; j++)
1045                     map[i, j] = map_1[i, j];
1046 
1047         }
1048         else if (Level >= 1)
1049         {
1050             for (int i = 0; i < 10; i++)
1051                 for (int j = 0; j < 10; j++)
1052                     map[i, j] = map_2[i, j];
1053 
1054         }
1055     }
1056 
1057 
1058 }
Map.cs
 1 using UnityEngine;
 2 using System.Collections;
 3 using UnityEngine.SceneManagement;
 4 
 5 
 6 public class UI_Manage : MonoBehaviour {
 7 
 8     // Use this for initialization
 9     void Start () {
10     
11     }
12     
13     // Update is called once per frame
14     void Update () {
15     
16     }
17 
18 
19     public void onStartBtnClick()
20     {
21         //跳转场景
22         
23         SceneManager.LoadScene("Game");
24         //退出游戏
25         //Application.Quit();
26         //显示与隐藏
27         //游戏物体.setActive(true / false);
28         
29     
30     }
31 
32     public void onEndBtnClick()
33     {
34         Application.Quit();
35         System.Console.WriteLine("Exit!");
36     }
37 
38 }
UI_Manage.cs
 1 using UnityEngine;
 2 using System.Collections;
 3 using UnityEngine.SceneManagement;
 4 
 5 
 6 public class Game_UI_Manage : MonoBehaviour {
 7 
 8     // Use this for initialization
 9     void Start () {
10         
11     }
12     
13     // Update is called once per frame
14     void Update () {
15     
16     }
17 
18     public void onHomeBtnClick()
19     {
20         Level = 0;
21         print(Level);
22         Map.set_level(Level);
23         SceneManager.LoadScene("Start");
24         
25     }
26 
27     public static int Level;
28     public void onResetClick()
29     {
30         print(Level);
31         Map.set_level(--Level);
32         SceneManager.LoadScene("Game");
33     }
34 
35 
36     public void victory_Home()
37     {
38         Level = 0;
39         Map.set_level(Level);
40         SceneManager.LoadScene("Start");
41     }
42 
43     public void victory_next()
44     {
45         SceneManager.LoadScene("Game");
46     }
47 
48 }
View Code

 

 

结构:

UI_Manage管理开始界面的所有UI

 

 Map:控制绘图,和行走

Game_UI_Manage:控制游戏界面的所有UI

 

转载于:https://www.cnblogs.com/TreeDream/p/9313902.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值