只有一张地图,没有写通关判定,见谅(毕竟我懒)

  1 #include<stdio.h>
  2 #include<Windows.h>
  3 #include<stdlib.h>
  4 #include<conio.h>
  5 #include<windef.h>
  6 //请设置属性为中文
  7 //EM作品,未经许可不得转载
  8 int i,j,SAVE[10][12];
  9 //地图
 10 //0:空地;1:墙壁;3:目的地;4:箱子;6:人;7:已完成;9:人在目的地
 11 int map[10][12]=
 12 {
 13     {1,1,1,1,1,0,0,0,0,0,0,0},
 14     {1,0,0,0,1,0,0,0,0,0,0,0},
 15     {1,0,4,0,1,0,1,1,1,1,1,1},
 16     {1,0,4,6,1,0,1,0,0,0,3,1},
 17     {1,1,1,4,1,1,1,0,0,0,3,1},
 18     {0,1,0,0,0,0,0,0,0,0,3,1},
 19     {0,1,0,0,0,1,0,0,0,0,0,1},
 20     {0,1,0,0,0,1,0,0,0,0,0,1},
 21     {0,1,1,1,1,1,0,0,0,0,0,1},
 22     {0,0,0,0,0,1,1,1,1,1,1,1},
 23 };
 24 //打印地图
 25 void DrapMap()
 26 {
 27     printf("PRESS Esc to exit\n");
 28     for(i=0;i<10;i++)
 29     {
 30         for(j=0;j<12;j++)
 31         {
 32             switch(map[i][j])
 33             {
 34                 case 0:
 35                 {
 36                     printf("  ");
 37                     break;
 38                 }
 39                 case 1:
 40                 {
 41                     printf("");
 42                     break;
 43                 }
 44                 case 3:
 45                 {
 46                     printf("");
 47                     break;
 48                 }
 49                 case 4:
 50                 {
 51                     printf("");
 52                     break;
 53                 }
 54                 case 6:
 55                 {
 56                     printf("");
 57                     break;
 58                 }
 59                 case 7:
 60                 {
 61                     printf("");
 62                     break;
 63                 }
 64                 case 9:
 65                 {
 66                     printf("");
 67                     break;
 68                 }
 69             }
 70         }
 71         printf("\n");
 72     }
 73 }
 74 //获取坐标
 75 POINT get()
 76 {
 77     POINT pos={-1,-1};
 78     for(int i=0;i<=10;i++)
 79     for(int j=0;j<=12;j++)
 80     if(map[i][j]==6||map[i][j]==9)
 81     {
 82         pos.x=i;
 83         pos.y=j;
 84         return pos;
 85     }
 86     return pos;
 87 }
 88 void up()
 89 {
 90     POINT pos=get();
 91     if(map[pos.x-1][pos.y]==0)//上面是空地
 92     {
 93         map[pos.x-1][pos.y]=6;
 94         if(map[pos.x][pos.y]==9)
 95         map[pos.x][pos.y]=3;
 96         else
 97         map[pos.x][pos.y]=0;
 98     }
 99     if(map[pos.x-1][pos.y]==3)//上面是目的地
100     {
101         map[pos.x-1][pos.y]=9;
102         if(map[pos.x][pos.y]==9)
103         map[pos.x][pos.y]=3;
104         else
105         map[pos.x][pos.y]=0;
106     }
107     if(map[pos.x-1][pos.y]==4)//上面是箱子
108     {
109         if(map[pos.x-2][pos.y]==0)//箱子上面是空地
110         {
111             map[pos.x-2][pos.y]=4;
112             map[pos.x-1][pos.y]=6;
113             if(map[pos.x][pos.y]==9)
114             map[pos.x][pos.y]=3;
115             else
116             map[pos.x][pos.y]=0;
117         }
118         if(map[pos.x-2][pos.y]==3)//箱子上面是目的地
119         {
120             map[pos.x-2][pos.y]=7;
121             map[pos.x-1][pos.y]=6;
122             if(map[pos.x][pos.y]==9)
123             map[pos.x][pos.y]=3;
124             else
125             map[pos.x][pos.y]=0;
126         }
127     }
128     if(map[pos.x-1][pos.y]==7)//上面已完成
129     {
130         if(map[pos.x-2][pos.y]==0)//箱子上面是空地
131         {
132             map[pos.x-2][pos.y]=4;
133             map[pos.x-1][pos.y]=9;
134             if(map[pos.x][pos.y]==9)
135             map[pos.x][pos.y]=3;
136             else
137             map[pos.x][pos.y]=0;
138         }
139         if(map[pos.x-2][pos.y]==3)//箱子上面是目的地
140         {
141             map[pos.x-2][pos.y]=7;
142             map[pos.x-1][pos.y]=9;
143             if(map[pos.x][pos.y]==9)
144             map[pos.x][pos.y]=3;
145             else
146             map[pos.x][pos.y]=0;
147         }
148     }
149 }
150 void left()
151 {
152     POINT pos=get();
153     if(map[pos.x][pos.y-1]==0)//左边是空地
154     {
155         map[pos.x][pos.y-1]=6;
156         if(map[pos.x][pos.y]==9)
157         map[pos.x][pos.y]=3;
158         else
159         map[pos.x][pos.y]=0;
160     }
161     if(map[pos.x][pos.y-1]==3)//左边是目的地
162     {
163         map[pos.x][pos.y-1]=9;
164         if(map[pos.x][pos.y]==9)
165         map[pos.x][pos.y]=3;
166         else
167         map[pos.x][pos.y]=0;
168     }
169     if(map[pos.x][pos.y-1]==4)//左边是箱子
170     {
171         if(map[pos.x][pos.y-2]==0)//箱子左边是空地
172         {
173             map[pos.x][pos.y-2]=4;
174             map[pos.x][pos.y-1]=6;
175             if(map[pos.x][pos.y]==9)
176             map[pos.x][pos.y]=3;
177             else
178             map[pos.x][pos.y]=0;
179         }
180         if(map[pos.x][pos.y-2]==3)//箱子左边是目的地
181         {
182             map[pos.x][pos.y-2]=7;
183             map[pos.x][pos.y-1]=6;
184             if(map[pos.x][pos.y]==9)
185             map[pos.x][pos.y]=3;
186             else
187             map[pos.x][pos.y]=0;
188         }
189     }
190     if(map[pos.x][pos.y-1]==7)//左边已完成
191     {
192         if(map[pos.x][pos.y-2]==0)//箱子左边是空地
193         {
194             map[pos.x][pos.y-2]=4;
195             map[pos.x][pos.y-1]=9;
196             if(map[pos.x][pos.y]==9)
197             map[pos.x][pos.y]=3;
198             else
199             map[pos.x][pos.y]=0;
200         }
201         if(map[pos.x][pos.y-2]==3)//箱子左边是目的地
202         {
203             map[pos.x][pos.y-2]=7;
204             map[pos.x][pos.y-1]=9;
205             if(map[pos.x][pos.y]==9)
206             map[pos.x][pos.y]=3;
207             else
208             map[pos.x][pos.y]=0;
209         }
210     }
211 }
212 void down()
213 {
214     POINT pos=get();
215     if(map[pos.x+1][pos.y]==0)//下面是空地
216     {
217         map[pos.x+1][pos.y]=6;
218         if(map[pos.x][pos.y]==9)
219         map[pos.x][pos.y]=3;
220         else
221         map[pos.x][pos.y]=0;
222     }
223     if(map[pos.x+1][pos.y]==3)//下面是目的地
224     {
225         map[pos.x+1][pos.y]=9;
226         if(map[pos.x][pos.y]==9)
227         map[pos.x][pos.y]=3;
228         else
229         map[pos.x][pos.y]=0;
230     }
231     if(map[pos.x+1][pos.y]==4)//下面是箱子
232     {
233         if(map[pos.x+2][pos.y]==0)//箱子下面是空地
234         {
235             map[pos.x+2][pos.y]=4;
236             map[pos.x+1][pos.y]=6;
237             if(map[pos.x][pos.y]==9)
238             map[pos.x][pos.y]=3;
239             else
240             map[pos.x][pos.y]=0;
241         }
242         if(map[pos.x+2][pos.y]==3)//箱子下面是目的地
243         {
244             map[pos.x+2][pos.y]=7;
245             map[pos.x+1][pos.y]=6;
246             if(map[pos.x][pos.y]==9)
247             map[pos.x][pos.y]=3;
248             else
249             map[pos.x][pos.y]=0;
250         }
251     }
252     if(map[pos.x+1][pos.y]==7)//下面已完成
253     {
254         if(map[pos.x+2][pos.y]==0)//箱子下面是空地
255         {
256             map[pos.x+2][pos.y]=4;
257             map[pos.x+1][pos.y]=9;
258             if(map[pos.x][pos.y]==9)
259             map[pos.x][pos.y]=3;
260             else
261             map[pos.x][pos.y]=0;
262         }
263         if(map[pos.x+2][pos.y]==3)//箱子下面是目的地
264         {
265             map[pos.x+2][pos.y]=7;
266             map[pos.x+1][pos.y]=9;
267             if(map[pos.x][pos.y]==9)
268             map[pos.x][pos.y]=3;
269             else
270             map[pos.x][pos.y]=0;
271         }
272     }
273 }
274 void right()
275 {
276     POINT pos=get();
277     if(map[pos.x][pos.y+1]==0)//右边是空地
278     {
279         map[pos.x][pos.y+1]=6;
280         if(map[pos.x][pos.y]==9)
281         map[pos.x][pos.y]=3;
282         else
283         map[pos.x][pos.y]=0;
284     }
285     if(map[pos.x][pos.y+1]==3)//右边是目的地
286     {
287         map[pos.x][pos.y+1]=9;
288         if(map[pos.x][pos.y]==9)
289         map[pos.x][pos.y]=3;
290         else
291         map[pos.x][pos.y]=0;
292     }
293     if(map[pos.x][pos.y+1]==4)//右边是箱子
294     {
295         if(map[pos.x][pos.y+2]==0)//箱子右边是空地
296         {
297             map[pos.x][pos.y+2]=4;
298             map[pos.x][pos.y+1]=6;
299             if(map[pos.x][pos.y]==9)
300             map[pos.x][pos.y]=3;
301             else
302             map[pos.x][pos.y]=0;
303         }
304         if(map[pos.x][pos.y+2]==3)//箱子右边是目的地
305         {
306             map[pos.x][pos.y+2]=7;
307             map[pos.x][pos.y+1]=6;
308             if(map[pos.x][pos.y]==9)
309             map[pos.x][pos.y]=3;
310             else
311             map[pos.x][pos.y]=0;
312         }
313     }
314     if(map[pos.x][pos.y+1]==7)//右边已完成
315     {
316         if(map[pos.x][pos.y+2]==0)//箱子右边是空地
317         {
318             map[pos.x][pos.y+2]=4;
319             map[pos.x][pos.y+1]=9;
320             if(map[pos.x][pos.y]==9)
321             map[pos.x][pos.y]=3;
322             else
323             map[pos.x][pos.y]=0;
324         }
325         if(map[pos.x][pos.y+2]==3)//箱子右边是目的地
326         {
327             map[pos.x][pos.y+2]=7;
328             map[pos.x][pos.y+1]=9;
329             if(map[pos.x][pos.y]==9)
330             map[pos.x][pos.y]=3;
331             else
332             map[pos.x][pos.y]=0;
333         }
334     }
335 }
336 void save()
337 {
338     system("cls");
339     for(int i=0;i<10;i++)
340     for(int j=0;j<12;j++)
341     SAVE[i][j]=map[i][j];
342     printf("GAME SAVED");
343     int Esc=getch();
344 }
345 void save_1st()
346 {
347     system("cls");
348     for(int i=0;i<10;i++)
349     for(int j=0;j<12;j++)
350     SAVE[i][j]=map[i][j];
351 }
352 void reset_()
353 {
354     system("cls");
355     for(int i=0;i<10;i++)
356     for(int j=0;j<12;j++)
357     map[i][j]=SAVE[i][j];
358     printf("GAME RESETED");
359     int Esc=getch();
360 }
361 void play()
362 {
363     while(1)
364     {
365         //清屏
366         system("cls");
367         //打印地图
368         DrapMap();
369         char arrow=getch();
370         switch(arrow)
371         {
372             case 'w':case 72:up();
373             break;
374             case 's':case 80:down();
375             break;
376             case 'a':case 75:left();
377             break;
378             case 'd':case 77:right();
379             break;
380             case 'S':save();
381             break;
382             case 'R':reset_();
383             break;
384             case 27:return;
385         }
386     }
387 }
388 void help()
389 {
390     system("cls");
391     printf("press \"wasd\" or arrow keys to move\nPRESS S to save\nPRESS R to reset");
392     int Esc=getch();
393 
394 }
395 int main()
396 {
397     //标题
398     SetConsoleTitle("box");
399     //窗口大小
400     system("mode con cols=26 lines=12");
401     save_1st();
402     char mode;
403     while(1)
404     {
405         system("cls");
406         printf("PRESS\na:play\nb:help\nc:exit");
407         mode=getch();
408         switch(mode)
409         {
410             case 'a':play();break;
411             case 'b':help();break;
412             case 'c':return 0;
413         }
414     }
415 }

 

posted on 2019-04-14 11:45  滑了个稽  阅读(352)  评论(0)    收藏  举报