#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define HEIGHT 10
#define WIDIH 10
int x, y;
int boxs;
void drawMap();
void game();
void initData();
int map[HEIGHT][WIDIH] = {
{0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,0,0,0,0},
{0,1,2,0,0,1,0,0,0,0},
{0,1,0,3,3,1,0,1,1,1},
{0,1,0,3,0,1,0,1,4,1},
{0,1,1,1,0,1,1,1,4,1},
{0,0,1,1,0,0,0,0,4,1},
{0,0,1,0,0,0,1,0,0,1},
{0,0,1,0,0,0,1,1,1,1},
{0,0,1,1,1,1,1,0,0,0}
};
int main() {
initData();
while(1){
system("cls");
printf("箱子数:%d\n",boxs);
drawMap();
if(boxs==0){
break;
}
game();
initData();
}
printf("恭喜你完成游戏..........");
}
void drawMap(){
int i, j;
for(i=0; i<HEIGHT; i++){
for(j=0; j<WIDIH; j++){
switch(map[i][j]){
case 0: printf(" ");break;
case 1: printf("■");break;
case 2: printf("♀");break;
case 3: printf("◆");break;
case 4: printf("☆");break;
case 5: printf("★");break;
case 6: printf("♀");break;
}
}
printf("\n");
}
}
void initData(){
int i, j;
boxs = 0;
for(i=0; i<HEIGHT; i++){
for(j=0; j<WIDIH; j++){
if(map[i][j]==2){
y = i;
x = j;
}
if(map[i][j]==3){
boxs++;
}
}
}
}
void game(){
char direction;
direction = getch();
switch(direction){
case 'w':
case 'W':
int wx,wy;
wx = x;
wy = y-1;
if(y==0){
break;
}
if(map[wy][wx]==1){
break;
}
if(map[wy][wx]==3||map[wy][wx]==5){
if(map[wy-1][wx]==1||map[wy-1][wx]==3||map[wy-1][wx]==5){
break;
}
if(map[wy-1][wx]==4){
map[wy-1][wx] = 5;
}else{
map[wy-1][wx] = 3;
}
}
if(map[y][x]!=6){
map[y][x] = 0;
}
if(map[y][x]==6){
map[y][x] = 4;
}
if(map[wy][wx]==4||map[wy][wx]==5){
map[wy][wx] = 6;
}else{
map[wy][wx] = 2;
}
y = wy;
break;
case 's':
case 'S':
int sx,sy;
sx = x;
sy = y+1;
if(y==HEIGHT-1){
break;
}
if(map[sy][sx]==1){
break;
}
if(map[sy][sx]==3||map[sy][sx]==5){
if(map[sy+1][sx]==1||map[sy+1][sx]==3||map[sy+1][sx]==5){
break;
}
if(map[sy+1][sx]==4){
map[sy+1][sx] = 5;
}else{
map[sy+1][sx] = 3;
}
}
if(map[y][x]!=6){
map[y][x] = 0;
}
if(map[y][x]==6){
map[y][x] = 4;
}
if(map[sy][sx]==4||map[sy][sx]==5){
map[sy][sx] = 6;
}else{
map[sy][sx] = 2;
}
y = sy;
break;
case 'a':
case 'A':
int ax,ay;
ax = x-1;
ay = y;
if(x==0){
break;
}
if(map[ay][ax]==1){
break;
}
if(map[ay][ax]==3||map[ay][ax]==5){
if(map[ay][ax-1]==1||map[ay][ax-1]==3||map[ay][ax-1]==5){
break;
}
if(map[ay][ax-1]==4){
map[ay][ax-1] = 5;
}else{
map[ay][ax-1] = 3;
}
}
map[y][x] = 0;
if(map[ay][ax]==4||map[ay][ax]==5){
map[ay][ax] = 6;
}else{
map[ay][ax] = 2;
}
x = ax;
break;
case 'd':
case 'D':
int dx,dy;
dx = x+1;
dy = y;
if(x==WIDIH-1){
break;
}
if(map[dy][dx]==1){
break;
}
if(map[dy][dx]==3||map[dy][dx]==5){
if(map[dy][dx+1]==1||map[dy][dx+1]==3||map[dy][dx+1]==5){
break;
}
if(map[dy][dx+1]==4){
map[dy][dx+1] = 5;
}else{
map[dy][dx+1] = 3;
}
}
if(map[y][x]!=6){
map[y][x] = 0;
}
if(map[y][x]==6){
map[y][x] = 4;
}
if(map[dy][dx]==4||map[dy][dx]==5){
map[dy][dx] = 6;
}else{
map[dy][dx] = 2;
}
x = dx;
break;
}
}