只有一张地图,没有写通关判定,见谅(毕竟我懒)
#include<stdio.h> #include<Windows.h> #include<stdlib.h> #include<conio.h> #include<windef.h> //请设置属性为中文 //HUAJI作品,未经许可不得转载 int i,j,SAVE[10][12]; //地图 //0:空地;1:墙壁;3:目的地;4:箱子;6:人;7:已完成;9:人在目的地 int map[10][12]= { {1,1,1,1,1,0,0,0,0,0,0,0}, {1,0,0,0,1,0,0,0,0,0,0,0}, {1,0,4,0,1,0,1,1,1,1,1,1}, {1,0,4,6,1,0,1,0,0,0,3,1}, {1,1,1,4,1,1,1,0,0,0,3,1}, {0,1,0,0,0,0,0,0,0,0,3,1}, {0,1,0,0,0,1,0,0,0,0,0,1}, {0,1,0,0,0,1,0,0,0,0,0,1}, {0,1,1,1,1,1,0,0,0,0,0,1}, {0,0,0,0,0,1,1,1,1,1,1,1}, }; //打印地图 void DrapMap() { printf("PRESS Esc to exit\n"); for(i=0;i<10;i++) { for(j=0;j<12;j++) { switch(map[i][j]) { case 0: { printf(" "); break; } case 1: { printf("■"); break; } case 3: { printf("☆"); break; } case 4: { printf("□"); break; } case 6: { printf("♀"); break; } case 7: { printf("★"); break; } case 9: { printf("♀"); break; } } } printf("\n"); } } //获取坐标 POINT get() { POINT pos={-1,-1}; for(int i=0;i<=10;i++) for(int j=0;j<=12;j++) if(map[i][j]==6||map[i][j]==9) { pos.x=i; pos.y=j; return pos; } return pos; } void up() { POINT pos=get(); if(map[pos.x-1][pos.y]==0)//上面是空地 { map[pos.x-1][pos.y]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x-1][pos.y]==3)//上面是目的地 { map[pos.x-1][pos.y]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x-1][pos.y]==4)//上面是箱子 { if(map[pos.x-2][pos.y]==0)//箱子上面是空地 { map[pos.x-2][pos.y]=4; map[pos.x-1][pos.y]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x-2][pos.y]==3)//箱子上面是目的地 { map[pos.x-2][pos.y]=7; map[pos.x-1][pos.y]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } } if(map[pos.x-1][pos.y]==7)//上面已完成 { if(map[pos.x-2][pos.y]==0)//箱子上面是空地 { map[pos.x-2][pos.y]=4; map[pos.x-1][pos.y]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x-2][pos.y]==3)//箱子上面是目的地 { map[pos.x-2][pos.y]=7; map[pos.x-1][pos.y]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } } } void left() { POINT pos=get(); if(map[pos.x][pos.y-1]==0)//左边是空地 { map[pos.x][pos.y-1]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x][pos.y-1]==3)//左边是目的地 { map[pos.x][pos.y-1]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x][pos.y-1]==4)//左边是箱子 { if(map[pos.x][pos.y-2]==0)//箱子左边是空地 { map[pos.x][pos.y-2]=4; map[pos.x][pos.y-1]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x][pos.y-2]==3)//箱子左边是目的地 { map[pos.x][pos.y-2]=7; map[pos.x][pos.y-1]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } } if(map[pos.x][pos.y-1]==7)//左边已完成 { if(map[pos.x][pos.y-2]==0)//箱子左边是空地 { map[pos.x][pos.y-2]=4; map[pos.x][pos.y-1]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x][pos.y-2]==3)//箱子左边是目的地 { map[pos.x][pos.y-2]=7; map[pos.x][pos.y-1]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } } } void down() { POINT pos=get(); if(map[pos.x+1][pos.y]==0)//下面是空地 { map[pos.x+1][pos.y]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x+1][pos.y]==3)//下面是目的地 { map[pos.x+1][pos.y]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x+1][pos.y]==4)//下面是箱子 { if(map[pos.x+2][pos.y]==0)//箱子下面是空地 { map[pos.x+2][pos.y]=4; map[pos.x+1][pos.y]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x+2][pos.y]==3)//箱子下面是目的地 { map[pos.x+2][pos.y]=7; map[pos.x+1][pos.y]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } } if(map[pos.x+1][pos.y]==7)//下面已完成 { if(map[pos.x+2][pos.y]==0)//箱子下面是空地 { map[pos.x+2][pos.y]=4; map[pos.x+1][pos.y]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x+2][pos.y]==3)//箱子下面是目的地 { map[pos.x+2][pos.y]=7; map[pos.x+1][pos.y]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } } } void right() { POINT pos=get(); if(map[pos.x][pos.y+1]==0)//右边是空地 { map[pos.x][pos.y+1]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x][pos.y+1]==3)//右边是目的地 { map[pos.x][pos.y+1]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x][pos.y+1]==4)//右边是箱子 { if(map[pos.x][pos.y+2]==0)//箱子右边是空地 { map[pos.x][pos.y+2]=4; map[pos.x][pos.y+1]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x][pos.y+2]==3)//箱子右边是目的地 { map[pos.x][pos.y+2]=7; map[pos.x][pos.y+1]=6; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } } if(map[pos.x][pos.y+1]==7)//右边已完成 { if(map[pos.x][pos.y+2]==0)//箱子右边是空地 { map[pos.x][pos.y+2]=4; map[pos.x][pos.y+1]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } if(map[pos.x][pos.y+2]==3)//箱子右边是目的地 { map[pos.x][pos.y+2]=7; map[pos.x][pos.y+1]=9; if(map[pos.x][pos.y]==9) map[pos.x][pos.y]=3; else map[pos.x][pos.y]=0; } } } void save() { system("cls"); for(int i=0;i<10;i++) for(int j=0;j<12;j++) SAVE[i][j]=map[i][j]; printf("GAME SAVED"); int Esc=getch(); } void save_1st() { system("cls"); for(int i=0;i<10;i++) for(int j=0;j<12;j++) SAVE[i][j]=map[i][j]; } void reset_() { system("cls"); for(int i=0;i<10;i++) for(int j=0;j<12;j++) map[i][j]=SAVE[i][j]; printf("GAME RESETED"); int Esc=getch(); } void play() { while(1) { //清屏 system("cls"); //打印地图 DrapMap(); char arrow=getch(); switch(arrow) { case 'w':case 72:up(); break; case 's':case 80:down(); break; case 'a':case 75:left(); break; case 'd':case 77:right(); break; case 'S':save(); break; case 'R':reset_(); break; case 27:return; } } } void help() { system("cls"); printf("press \"wasd\" or arrow keys to move\nPRESS S to save\nPRESS R to reset"); int Esc=getch(); } int main() { //标题 SetConsoleTitle("box"); //窗口大小 system("mode con cols=26 lines=12"); save_1st(); char mode; while(1) { system("cls"); printf("PRESS\na:play\nb:help\nc:exit"); mode=getch(); switch(mode) { case 'a':play();break; case 'b':help();break; case 'c':return 0; } } }