推箱子源碼,有這個之後你也會寫遊戲哦
#include
#include
#include
#include
#pragma comment(lib,"winmm.lib")
IMAGE blank, end, people, wall, box, darkbox;
int map[7][8] = { //1代表牆
{ 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 1, 0, 0, 0, 1 }, //0-空地
{ 1, 0, 4, 7, 7, 0, 0, 1 }, //5-人
{ 1, 0, 0, 3, 3, 0, 1, 1 }, //4-箱子
{ 1, 0, 4, 7, 7, 0, 0, 1 }, //3-目的地
{ 1, 5, 0, 1, 0, 0, 0, 1 }, //7-(4+3)箱子在目的地中
{ 1, 1, 1, 1, 1, 1, 1, 1 } }; //隱藏 人+目的地(5 3) 8
void DrawMap();
void PlayGame();
int main()
{
initgraph(350, 400); //窗口
mciSendString(L"open ./image/你還要我怎樣.mp3 alias niangniang", 0, 0, 0);
mciSendString(L"play niangniang", 0, 0, 0);
loadimage(&blank,L"./image/blank.jpg",50,50); //1保存的地方 2路徑 3大小
loadimage(&end, L"./image/end.jpg", 50, 50);
loadimage(&people, L"./image/people.jpg", 50, 50);
loadimage(&wall, L"./image/wall.jpg", 50, 50);
loadimage(&box, L"./image/box.jpg", 50, 50);
loadimage(&darkbox, L"./image/darkbox.jpg", 50, 50);
while (1)
{
DrawMap();
PlayGame();
}
}
void DrawMap()
{
//列印二維數組
for (int i = 0; i
{
for (int j = 0; j
{
switch (map[i][j])
{
case 0:
putimage(i * 50, j * 50, &blank);
break;
case 1:
putimage(i * 50, j * 50, &wall);
break;
case 3:
putimage(i * 50, j * 50, &end);
break;
case 4:
putimage(i * 50, j * 50, &box);
break;
case 5:
putimage(i * 50, j * 50, &people);
break;
case 7:
putimage(i * 50, j * 50, &darkbox);
break;
case 8:
putimage(i * 50, j * 50, &people);
break;
}
}
printf("
");
}
}
//玩這個遊戲!!!
void PlayGame()
{
//3.改變那些元素------人周圍的元素.
/*遊戲規則 以上為例
1.人的前面是空地.
2.人的前面是目的地.
3.人的前面是箱子.(不一定)
3.1 箱子的前面是空地.
3.2 箱子的前面是目的地.
//以上是可以改變的情況 只要去改變數組就可以
//除此之外都是不可以改變的情況 什麼都不做就可以
**************************/
char ch;
//3.改變那些元素------人周圍的元素. 人
int r, c; //人的行和列
for (int i = 0; i
{
for (int j = 0; j
{
if (map[i][j] == 5 || map[i][j] == 8)
{
r = i;
c = j;
}
}
}
printf("人的位置: %d %d", r, c); //map[peoR-1][peoC]
ch = getch(); //接收鍵盤
switch (ch)
{
case "w": //上 上下左右鍵.
case 72: //鍵值 72 80 75 77
//1.人的前面是空地. //2.人的前面是目的地
if (map[r][c - 1] == 0 || map[r][c - 1] == 3)
{
map[r][c - 1] += 5;
map[r][c] -= 5;
}
//3.人的前面是箱子.(不一定)3.1 箱子的前面是空地.3.2 箱子的前面是目的地.
else if (map[r][c - 1] == 4 || map[r][c - 1] == 7) //人的前面是箱子
{
if (map[r][c - 2] == 0 || map[r][c - 2] == 3) //箱子的前面是空地或者目的地
{
map[r][c - 2] += 4;
map[r][c - 1] += 1;
map[r][c] -= 5;
}
}
break;
case "s":
case 80:
//1.人的前面是空地. //2.人的前面是目的地
if (map[r][c + 1] == 0 || map[r][c + 1] == 3)
{
map[r][c + 1] += 5;
map[r][c] -= 5;
}
//3.人的前面是箱子.(不一定)3.1 箱子的前面是空地.3.2 箱子的前面是目的地.
else if (map[r][c + 1] == 4 || map[r][c + 1] == 7) //人的前面是箱子
{
if (map[r][c + 2] == 0 || map[r][c + 2] == 3) //箱子的前面是空地或者目的地
{
map[r][c + 2] += 4;
map[r][c + 1] += 1;
map[r][c] -= 5;
}
}
break;
case "a":
case 75:
//1.人的前面是空地. //2.人的前面是目的地
if (map[r - 1][c] == 0 || map[r - 1][c] == 3)
{
map[r - 1][c] += 5;
map[r][c] -= 5;
}
//3.人的前面是箱子.(不一定)3.1 箱子的前面是空地.3.2 箱子的前面是目的地.
else if (map[r - 1][c] == 4 || map[r - 1][c] == 7) //人的前面是箱子
{
if (map[r - 2][c] == 0 || map[r - 2][c] == 3) //箱子的前面是空地或者目的地
{
map[r - 2][c] += 4;
map[r - 1][c] += 1;
map[r][c] -= 5;
}
}
break;
case "d":
case 77:
//1.人的前面是空地. //2.人的前面是目的地
if (map[r + 1][c] == 0 || map[r + 1][c] == 3)
{
map[r + 1][c] += 5;
map[r][c] -= 5;
}
//3.人的前面是箱子.(不一定)3.1 箱子的前面是空地.3.2 箱子的前面是目的地.
else if (map[r + 1][c] == 4 || map[r + 1][c] == 7) //人的前面是箱子
{
if (map[r + 2][c] == 0 || map[r + 2][c] == 3) //箱子的前面是空地或者目的地
{
map[r + 2][c] += 4;
map[r + 1][c] += 1;
map[r][c] -= 5;
}
}
break;
}
}
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
TAG:豆豆飛 |