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

来源:互联网 发布:科锐c语言 编辑:程序博客网 时间:2024/06/04 21:34
/*** 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);
}
0 0
原创粉丝点击