- 1.游戏界面
- 2.游戏说明
- 3.程序分析
- 4.整个游戏源代码
贪吃蛇游戏按键说明:
升级版的功能:可以进行通关模式,通过方向键WSAD键或者上下左右键,可以改变人移动方向的改变:
第一部分——绘制并打印地图(使用三维数组):
//地图
//0:空地 1:墙壁 3:箱子的目的地 4:箱子
//6:人 7:箱子和目的地重合 9:人站在目的地
int g_map[2][10][12] =
{
{
{1,1,1,1,1,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,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,0,1,1,1,1,1,1},
},
{
{0,1,1,1,1,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,1,1,0,0,0},
{0,1,0,0,0,0,1,1,1,1,1,1},
{1,1,4,1,1,0,1,1,0,0,0,1},
{1,0,6,0,1,0,0,1,0,0,0,1},
{1,0,0,1,1,1,0,0,0,0,0,1},
{1,0,0,0,4,0,0,4,0,0,0,1},
{1,0,3,3,1,0,4,0,0,0,1,1},
{1,1,3,3,1,0,0,0,1,1,1,0},
{0,1,1,1,1,1,1,1,1,1,1,0},
},
};
int g_nCurrentLevel = 0; //当前关卡
void DrapMap(); //打印地图
//打印地图
void DrapMap()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 12; j++)
{
switch (g_map[g_nCurrentLevel][i][j])
{
case 0: //空地
printf(" ");
break;
case 1: //墙壁
SetColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
printf("■");
break;
case 3: //箱子的目的地
SetColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
printf("☆");
break;
case 4: //箱子
SetColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
printf("□");
break;
case 6: //人
SetColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
printf("♀");
break;
case 7: //箱子与目的地重合
SetColor(FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
printf("★");
break;
case 9: //人站在目的地
SetColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
printf("♀");
break;
}
}
printf("\n");
}
}
第二部分——获取玩家位置,控制方向:
//获取玩家坐标
POINT GetGamerPosition()
{
POINT pos = { -1,-1 };
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 12; j++)
{
if (g_map[i][j] == 6 || g_map[i][j] == 9)
{
pos.x = i;
pos.y = j;
return pos;
}
}
}
return pos;
}
//往上
void Up()
{
POINT pos = GetGamerPosition();
//1.人的前面是空地
if (g_map[pos.x - 1][pos.y] == 0)
{
g_map[pos.x - 1][pos.y] = 6;//空地改为人
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//2.人的前面是目的地
if (g_map[pos.x - 1][pos.y] == 3)
{
g_map[pos.x - 1][pos.y] = 9;//人站在目的地
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//3.人的前面是箱子
if (g_map[pos.x - 1][pos.y] == 4)
{
//a.箱子的前面是空地
if (g_map[pos.x - 2][pos.y] == 0)
{
g_map[pos.x - 2][pos.y] = 4;
g_map[pos.x - 1][pos.y] = 6;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[pos.x - 2][pos.y] == 3)
{
g_map[pos.x - 2][pos.y] = 7;
g_map[pos.x - 1][pos.y] = 6;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
}
//4.人的前面是箱子和目的地的重合
if (g_map[pos.x - 1][pos.y] == 7)
{
//a.箱子的前面是空地
if (g_map[pos.x - 2][pos.y] == 0)
{
g_map[pos.x - 2][pos.y] = 4;
g_map[pos.x - 1][pos.y] = 9;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[pos.x - 2][pos.y] == 3)
{
g_map[pos.x - 2][pos.y] = 7;
g_map[pos.x - 1][pos.y] = 9;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
}
}
//往下
void Down()
{
POINT pos = GetGamerPosition();
//1.人的前面是空地
if (g_map[pos.x + 1][pos.y] == 0)
{
g_map[pos.x + 1][pos.y] = 6;//空地改为人
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//2.人的前面是目的地
if (g_map[pos.x + 1][pos.y] == 3)
{
g_map[pos.x + 1][pos.y] = 9;//人站在目的地
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//3.人的前面是箱子
if (g_map[pos.x + 1][pos.y] == 4)
{
//a.箱子的前面是空地
if (g_map[pos.x + 2][pos.y] == 0)
{
g_map[pos.x + 2][pos.y] = 4;
g_map[pos.x + 1][pos.y] = 6;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[pos.x + 2][pos.y] == 3)
{
g_map[pos.x + 2][pos.y] = 7;
g_map[pos.x + 1][pos.y] = 6;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
}
//4.人的前面是箱子和目的地的重合
if (g_map[pos.x + 1][pos.y] == 7)
{
//a.箱子的前面是空地
if (g_map[pos.x + 2][pos.y] == 0)
{
g_map[pos.x + 2][pos.y] = 4;
g_map[pos.x + 1][pos.y] = 9;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[pos.x + 2][pos.y] == 3)
{
g_map[pos.x + 2][pos.y] = 7;
g_map[pos.x + 1][pos.y] = 9;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
}
}
//往左
void Left()
{
POINT pos = GetGamerPosition();
//1.人的前面是空地
if (g_map[pos.x][pos.y - 1] == 0)
{
g_map[pos.x][pos.y - 1] = 6;//空地改为人
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//2.人的前面是目的地
if (g_map[pos.x][pos.y - 1] == 3)
{
g_map[pos.x][pos.y - 1] = 9;//人站在目的地
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//3.人的前面是箱子
if (g_map[pos.x][pos.y - 1] == 4)
{
//a.箱子的前面是空地
if (g_map[pos.x][pos.y - 2] == 0)
{
g_map[pos.x][pos.y - 2] = 4;
g_map[pos.x][pos.y - 1] = 6;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[pos.x][pos.y - 2] == 3)
{
g_map[pos.x][pos.y - 2] = 7;
g_map[pos.x][pos.y - 1] = 6;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
}
//4.人的前面是箱子和目的地的重合
if (g_map[pos.x][pos.y - 1] == 7)
{
//a.箱子的前面是空地
if (g_map[pos.x][pos.y - 2] == 0)
{
g_map[pos.x][pos.y - 2] = 4;
g_map[pos.x][pos.y - 1] = 9;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[pos.x][pos.y - 2] == 3)
{
g_map[pos.x][pos.y - 2] = 7;
g_map[pos.x][pos.y - 1] = 9;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
}
}
//往右
void Right()
{
POINT pos = GetGamerPosition();
//1.人的前面是空地
if (g_map[pos.x][pos.y + 1] == 0)
{
g_map[pos.x][pos.y + 1] = 6;//空地改为人
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//2.人的前面是目的地
if (g_map[pos.x][pos.y + 1] == 3)
{
g_map[pos.x][pos.y + 1] = 9;//人站在目的地
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//3.人的前面是箱子
if (g_map[pos.x][pos.y + 1] == 4)
{
//a.箱子的前面是空地
if (g_map[pos.x][pos.y + 2] == 0)
{
g_map[pos.x][pos.y + 2] = 4;
g_map[pos.x][pos.y + 1] = 6;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[pos.x][pos.y + 2] == 3)
{
g_map[pos.x][pos.y + 2] = 7;
g_map[pos.x][pos.y + 1] = 6;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
}
//4.人的前面是箱子和目的地的重合
if (g_map[pos.x][pos.y + 1] == 7)
{
//a.箱子的前面是空地
if (g_map[pos.x][pos.y + 2] == 0)
{
g_map[pos.x][pos.y + 2] = 4;
g_map[pos.x][pos.y + 1] = 9;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[pos.x][pos.y + 2] == 3)
{
g_map[pos.x][pos.y + 2] = 7;
g_map[pos.x][pos.y + 1] = 9;
//原来人的位置还原
if (g_map[pos.x][pos.y] == 9)
g_map[pos.x][pos.y] = 3;
else
g_map[pos.x][pos.y] = 0;
}
}
}
第三部分——计算空余箱子的个数,判断是否进入下一关:
//计算空余箱子的个数
int GetSpaceBox()
{
int nCount = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 12; j++)
{
if (g_map[g_nCurrentLevel][i][j] == 4)
nCount++;
}
}
return nCount;
}
4.整个游戏源代码
#include
#include
#include
#include
//地图
//0:空地 1:墙壁 3:箱子的目的地 4:箱子
//6:人 7:箱子和目的地重合 9:人站在目的地
int g_map[2][10][12] =
{
{
{1,1,1,1,1,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,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,0,1,1,1,1,1,1},
},
{
{0,1,1,1,1,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,1,1,0,0,0},
{0,1,0,0,0,0,1,1,1,1,1,1},
{1,1,4,1,1,0,1,1,0,0,0,1},
{1,0,6,0,1,0,0,1,0,0,0,1},
{1,0,0,1,1,1,0,0,0,0,0,1},
{1,0,0,0,4,0,0,4,0,0,0,1},
{1,0,3,3,1,0,4,0,0,0,1,1},
{1,1,3,3,1,0,0,0,1,1,1,0},
{0,1,1,1,1,1,1,1,1,1,1,0},
},
};
int g_nCurrentLevel = 0; //当前关卡
void DrapMap(); //打印地图
POINT GetGamerPosition(); //获取玩家坐标
void Up(); //往上
void Down(); //往下
void Left(); //往左
void Right(); //往右
int GetSpaceBox(); //计算空余箱子
void SetColor(int nColor); //设置颜色
int main()
{
//设置标题
SetConsoleTitle(L"推箱子");
//设置窗口的大小
system("mode con cols=26 lines=12");
while (1)
{
//获取剩余箱子的个数
if (GetSpaceBox() == 0)
{
g_nCurrentLevel++;
}
//清屏
system("cls");
//打印地图
DrapMap();
//getchar();
//scanf(); 这两个需要按回车才能输入
char ch = _getch();
switch (ch)
{
case 'w':case 72: //往上
Up();
break;
case 's':case 80: //往下
Down();
break;
case 'a':case 75: //往左
Left();
break;
case 'd':case 77: //往右
Right();
break;
}
}
return 0;
}
/*===========================================*/
//打印地图
void DrapMap()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 12; j++)
{
switch (g_map[g_nCurrentLevel][i][j])
{
case 0: //空地
printf(" ");
break;
case 1: //墙壁
SetColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
printf("■");
break;
case 3: //箱子的目的地
SetColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
printf("☆");
break;
case 4: //箱子
SetColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
printf("□");
break;
case 6: //人
SetColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
printf("♀");
break;
case 7: //箱子与目的地重合
SetColor(FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
printf("★");
break;
case 9: //人站在目的地
SetColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
printf("♀");
break;
}
}
printf("\n");
}
}
//获取玩家坐标
POINT GetGamerPosition()
{
POINT pos = { -1,-1 };
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 12; j++)
{
if (g_map[g_nCurrentLevel][i][j] == 6 || g_map[g_nCurrentLevel][i][j] == 9)
{
pos.x = i;
pos.y = j;
return pos;
}
}
}
return pos;
}
//往上
void Up()
{
POINT pos = GetGamerPosition();
//1.人的前面是空地
if (g_map[g_nCurrentLevel][pos.x - 1][pos.y] == 0)
{
g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 6;//空地改为人
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//2.人的前面是目的地
if (g_map[g_nCurrentLevel][pos.x - 1][pos.y] == 3)
{
g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 9;//人站在目的地
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//3.人的前面是箱子
if (g_map[g_nCurrentLevel][pos.x - 1][pos.y] == 4)
{
//a.箱子的前面是空地
if (g_map[g_nCurrentLevel][pos.x - 2][pos.y] == 0)
{
g_map[g_nCurrentLevel][pos.x - 2][pos.y] = 4;
g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 6;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[g_nCurrentLevel][pos.x - 2][pos.y] == 3)
{
g_map[g_nCurrentLevel][pos.x - 2][pos.y] = 7;
g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 6;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
}
//4.人的前面是箱子和目的地的重合
if (g_map[g_nCurrentLevel][pos.x - 1][pos.y] == 7)
{
//a.箱子的前面是空地
if (g_map[g_nCurrentLevel][pos.x - 2][pos.y] == 0)
{
g_map[g_nCurrentLevel][pos.x - 2][pos.y] = 4;
g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 9;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[g_nCurrentLevel][pos.x - 2][pos.y] == 3)
{
g_map[g_nCurrentLevel][pos.x - 2][pos.y] = 7;
g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 9;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
}
}
//往下
void Down()
{
POINT pos = GetGamerPosition();
//1.人的前面是空地
if (g_map[g_nCurrentLevel][pos.x + 1][pos.y] == 0)
{
g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 6;//空地改为人
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//2.人的前面是目的地
if (g_map[g_nCurrentLevel][pos.x + 1][pos.y] == 3)
{
g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 9;//人站在目的地
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//3.人的前面是箱子
if (g_map[g_nCurrentLevel][pos.x + 1][pos.y] == 4)
{
//a.箱子的前面是空地
if (g_map[g_nCurrentLevel][pos.x + 2][pos.y] == 0)
{
g_map[g_nCurrentLevel][pos.x + 2][pos.y] = 4;
g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 6;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[g_nCurrentLevel][pos.x + 2][pos.y] == 3)
{
g_map[g_nCurrentLevel][pos.x + 2][pos.y] = 7;
g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 6;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
}
//4.人的前面是箱子和目的地的重合
if (g_map[g_nCurrentLevel][pos.x + 1][pos.y] == 7)
{
//a.箱子的前面是空地
if (g_map[g_nCurrentLevel][pos.x + 2][pos.y] == 0)
{
g_map[g_nCurrentLevel][pos.x + 2][pos.y] = 4;
g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 9;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[g_nCurrentLevel][pos.x + 2][pos.y] == 3)
{
g_map[g_nCurrentLevel][pos.x + 2][pos.y] = 7;
g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 9;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
}
}
//往左
void Left()
{
POINT pos = GetGamerPosition();
//1.人的前面是空地
if (g_map[g_nCurrentLevel][pos.x][pos.y - 1] == 0)
{
g_map[g_nCurrentLevel][pos.x][pos.y - 1] = 6;//空地改为人
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//2.人的前面是目的地
if (g_map[g_nCurrentLevel][pos.x][pos.y - 1] == 3)
{
g_map[g_nCurrentLevel][pos.x][pos.y - 1] = 9;//人站在目的地
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//3.人的前面是箱子
if (g_map[g_nCurrentLevel][pos.x][pos.y - 1] == 4)
{
//a.箱子的前面是空地
if (g_map[g_nCurrentLevel][pos.x][pos.y - 2] == 0)
{
g_map[g_nCurrentLevel][pos.x][pos.y - 2] = 4;
g_map[g_nCurrentLevel][pos.x][pos.y - 1] = 6;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[g_nCurrentLevel][pos.x][pos.y - 2] == 3)
{
g_map[g_nCurrentLevel][pos.x][pos.y - 2] = 7;
g_map[g_nCurrentLevel][pos.x][pos.y - 1] = 6;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
}
//4.人的前面是箱子和目的地的重合
if (g_map[g_nCurrentLevel][pos.x][pos.y - 1] == 7)
{
//a.箱子的前面是空地
if (g_map[g_nCurrentLevel][pos.x][pos.y - 2] == 0)
{
g_map[g_nCurrentLevel][pos.x][pos.y - 2] = 4;
g_map[g_nCurrentLevel][pos.x][pos.y - 1] = 9;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[g_nCurrentLevel][pos.x][pos.y - 2] == 3)
{
g_map[g_nCurrentLevel][pos.x][pos.y - 2] = 7;
g_map[g_nCurrentLevel][pos.x][pos.y - 1] = 9;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
}
}
//往右
void Right()
{
POINT pos = GetGamerPosition();
//1.人的前面是空地
if (g_map[g_nCurrentLevel][pos.x][pos.y + 1] == 0)
{
g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 6;//空地改为人
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//2.人的前面是目的地
if (g_map[g_nCurrentLevel][pos.x][pos.y + 1] == 3)
{
g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 9;//人站在目的地
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//3.人的前面是箱子
if (g_map[g_nCurrentLevel][pos.x][pos.y + 1] == 4)
{
//a.箱子的前面是空地
if (g_map[g_nCurrentLevel][pos.x][pos.y + 2] == 0)
{
g_map[g_nCurrentLevel][pos.x][pos.y + 2] = 4;
g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 6;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[g_nCurrentLevel][pos.x][pos.y + 2] == 3)
{
g_map[g_nCurrentLevel][pos.x][pos.y + 2] = 7;
g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 6;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
}
//4.人的前面是箱子和目的地的重合
if (g_map[g_nCurrentLevel][pos.x][pos.y + 1] == 7)
{
//a.箱子的前面是空地
if (g_map[g_nCurrentLevel][pos.x][pos.y + 2] == 0)
{
g_map[g_nCurrentLevel][pos.x][pos.y + 2] = 4;
g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 9;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
//b.箱子的前面是目的地
if (g_map[g_nCurrentLevel][pos.x][pos.y + 2] == 3)
{
g_map[g_nCurrentLevel][pos.x][pos.y + 2] = 7;
g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 9;
//原来人的位置还原
if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)
g_map[g_nCurrentLevel][pos.x][pos.y] = 3;
else
g_map[g_nCurrentLevel][pos.x][pos.y] = 0;
}
}
}
//计算空余箱子的个数
int GetSpaceBox()
{
int nCount = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 12; j++)
{
if (g_map[g_nCurrentLevel][i][j] == 4)
nCount++;
}
}
return nCount;
}
//设置颜色
void SetColor(int nColor)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, nColor);
}
感谢阅读,如有不足之处,欢迎来指正。
谢谢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)