基于VS 2010下图形库版本的 C++程序之推箱子
2017-02-26 10:59
323 查看
/*** 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);
}
/********** 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);
}
相关文章推荐
- 基于Vs2013 C++连接 2010Access 数据库
- C++ 程序 附加 进程调试 方法 本文基于VS2010为例, 其他版本的编译器也可以
- VS2010中c++程序调用PostgreSQL数据库C接口libpq.lib的项目Properties设置
- vs2010 程序语句有错,也报错了 却运行了以前的版本,怎么设置它有错就不要运行了呢?
- win7运行第一个opencv程序,基于opencv3.2,官方vc14编译版本,QT5.8 VS2015平台
- 【C++】低版本VS程序使用高版本打开的问题
- 【C++】MFC中的CString和std::string,以及两者之间的相互转换(基于VS201X版本)
- VS2010创建第一个C程序
- C++ 0x 之 Lambda 受 VS 2010 支持
- 【Visualization Library】一个基于OpenGL和C++的轻型图形库
- TeeChart NET 2010 VS NET2008 版本 4.1.2010.08046
- 发布基于C#的网络爬虫程序 *版本1.0.1*
- 基于Visual C++2010与office2010开发办公自动应用(1)在自己的程序里面打开office文档
- 【处理器体系架构系列】基于TI C6000系列DSP的C/C++程序优化技术
- 基于控制台或Win32 API程序生成文件版本信息
- 关于在VS2008以下版本的MFC程序使用VS 2008 FeaturePack出现内存泄露的理解
- VS2010将序列号内嵌到安装程序的方法
- C++ 0x 之 decltype 和 auto 受 VS 2010 支持
- 基于 VS 2010 阐述C# 4个特性
- Visual C++ Debug 与 Release版本区别 怎样“调试” Release 版的程序