只有一张地图,没有写通关判定,见谅(毕竟我懒)
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 }
浙公网安备 33010602011771号