基于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);
}
/********** 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
- 基于VS 2010下图形库版本的 C++程序之推箱子
- C语言,用EGE图形库实现推箱子小游戏
- 基于Linux C语言的字符界面《推箱子》
- c语言的推箱子
- 基于Android的推箱子小游戏 源码
- 012-C语言小游戏之推箱子
- C语言之推箱子游戏代码
- 刚学c两个礼拜,写的推箱子(控制台版本)
- 基于Opengles和android环境下的3D推箱子。
- 推箱子 C语言版
- C 推箱子游戏
- c++之简单的推箱子游戏
- FPGA学习之基于MicroBlaze软核的推箱子游戏设计
- 黑马程序员——C基础之推箱子游戏
- C语言实践之推箱子游戏思路与代码
- Java游戏程序 - 推箱子
- C语言,推箱子游戏
- c实现 推箱子游戏
- Jquery选择器
- Java类加载机制与Tomcat类加载器架构
- win10系统安装Android studio过程
- BestCoder Round #92 题解 (待续)
- 网络地址转换NAT
- 基于VS 2010下图形库版本的 C++程序之推箱子
- 欢迎使用CSDN-markdown编辑器
- Java多线程线程池(2)--ThreadPoolExecutor
- linux less命令简介
- Lua与.net的CLR相互调用
- 蓝桥杯<<未名湖边的烦恼>>
- 解决数据分权访问----SQL2016 行级安全解决方案
- HDU 3277 Marriage Match III
- Metasploit信息收集1