您的位置:首页 > 编程语言 > C语言/C++

基于VS 2010下图形库版本的 C++程序之推箱子

2017-02-26 10:59 316 查看
/*** win32控制台版本的推箱子 ****/

/**********  2017.2.21   make by  qiu **********/

/***墙 1,箱子 4,目的地 3,人 5,空地0 ********/

/*********箱子在目地地 4+3 *****/

/*********人在目地地   5+3 ********/

#include <stdio.h>

#include <graphics.h>  //图形库   //TC2.0  VC6.0

#include <mmsystem.h>   //多媒体

#pragma comment(lib,"winmm.lib") //库文件

#include <conio.h>     

IMAGE backImage, blankImg, boxImg, peopleImg, darkboxImg, endpointImg, wallImg;

int map[8][8] = { //用不同的数字去表示不同的元素 打印出界面.
{ 0,0,1,1,1,1,0,0 },
{ 0,0,1,3,3,1,0,0 },
{ 0,1,1,0,3,1,1,0 },
{ 0,1,0,0,4,3,1,0 },
{ 1,1,0,4,0,0,1,1 },
{ 1,0,0,1,4,4,0,1 },
{ 1,0,5,0,0,0,0,1 },
{ 1,1,1,1,1,1,1,1 } 

};

void DrawMap();

void PlayGame();

void Game_inti();

//主函数

int main()

{

    initgraph(800,800);
Game_inti();

PlayGame();
return 0;

}

//画出来

void DrawMap()

{
//for循环遍历二维数组
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
switch (map[i][j])
{
case 0:  //空地
putimage(i * 100, j * 100, &blankImg);
break;

case 1:
putimage(i * 100, j * 100, &wallImg);
break;

case 3:
putimage(i * 100, j * 100, &endpointImg);
break;

case 4:
putimage(i * 100, j * 100, &boxImg);
break;

case 5:
putimage(i * 100, j * 100, &peopleImg);
break;

case 7:

putimage(i * 100, j * 100, &darkboxImg);
break;

case 8:
putimage(i * 100, j * 100, &peopleImg);
break;
}
}
printf("\n");
}

}

//玩游戏 原理:不断改变数组元素,然后重新打印

void PlayGame()

{
//
char input;
int i, j; //循环控制变量
int peoR, peoC;  //人的下标

while (1)
{
cleardevice();
DrawMap();

//确定人的位置
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
if (map[i][j] == 5 || map[i][j] == 8) //5人 
{
peoR = i;
peoC = j;
}
}
}

printf("(%d %d)", peoR, peoC);

input = getch();
//对不同的键盘输入采取不同的处理 //分支结构
switch (input)
{
case 'W':  //上  WASD  上下左右键控制方向
case 'w':
case 72:  //键值
//判断人的前面是空地或者目的地  //改变两个位置
if (map[peoR][peoC - 1] == 0 || map[peoR][peoC - 1] == 3)
{
map[peoR][peoC - 1] += 5;
map[peoR][peoC] -= 5;
}
//改变三个位置 箱子
else if (map[peoR][peoC - 1] == 4 || map[peoR][peoC - 1] == 7)
{
if (map[peoR][peoC - 2] == 0 || map[peoR][peoC - 2] == 3)
{
map[peoR][peoC - 2] += 4;
map[peoR][peoC - 1] += 1;
map[peoR][peoC] -= 5;
}
}

break;

case 'S':  //下
case 's':
case 80:  //map[peoR + 1][peoC]
//判断人的前面是空地或者目的地  //改变两个位置
if (map[peoR][peoC + 1] == 0 || map[peoR][peoC + 1] == 3)
{
map[peoR][peoC + 1] += 5;
map[peoR][peoC] -= 5;
}
//改变三个位置 箱子
else if (map[peoR][peoC + 1] == 4 || map[peoR][peoC + 1] == 7)
{
if (map[peoR][peoC + 2] == 0 || map[peoR][peoC + 2] == 3)
{
map[peoR][peoC + 2] += 4;
map[peoR][peoC + 1] += 1;
map[peoR][peoC] -= 5;
}
}

break;

case 'A':  //map[peoR][peoC - 1]
case 'a':
case 75:
//判断人的前面是空地或者目的地  //改变两个位置
if (map[peoR - 1][peoC] == 0 || map[peoR - 1][peoC] == 3)
{
map[peoR - 1][peoC] += 5;
map[peoR][peoC] -= 5;
}
//改变三个位置 箱子
else if (map[peoR - 1][peoC] == 4 || map[peoR - 1][peoC] == 7)
{
if (map[peoR - 2][peoC] == 0 || map[peoR - 2][peoC] == 3)
{
map[peoR - 2][peoC] += 4;
map[peoR - 1][peoC] += 1;
map[peoR][peoC] -= 5;
}
}
break;

case 'D':
case 'd':
case 77:
//判断人的前面是空地或者目的地  //改变两个位置
if (map[peoR + 1][peoC] == 0 || map[peoR + 1][peoC] == 3)
{
map[peoR + 1][peoC] += 5;
map[peoR][peoC] -= 5;
}
//改变三个位置 箱子
else if (map[peoR + 1][peoC] == 4 || map[peoR + 1][peoC] == 7)
{
if (map[peoR + 2][peoC] == 0 || map[peoR + 2][peoC] == 3)
{
map[peoR + 2][peoC] += 4;
map[peoR + 1][peoC] += 1;
map[peoR][peoC] -= 5;
}
}
break;
}
}

}

void Game_inti()

{
PlaySound(L"梦中的婚礼.wav", NULL, SND_LOOP | SND_ASYNC | SND_FILENAME); //循环播放, 异步处理, 文件的名称
loadimage(&backImage, L"./Image/background.jpg", 800, 800);
loadimage(&blankImg, L"./Image/blank.jpg", 100, 100);
loadimage(&boxImg, L"./Image/box.jpg", 100, 100);
loadimage(&peopleImg, L"./Image/people.jpg", 100, 100);
loadimage(&darkboxImg, L"./Image/Darkbox.jpg", 100, 100);
loadimage(&wallImg, L"./Image/wall.jpg", 100, 100);
loadimage(&endpointImg, L"./Image/EndPoint.jpg", 100, 100);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: