C++实现推箱子游戏
用vs2015写的一个推箱子游戏,用到了graphics.h头文件进行贴图,图片都是自己随手画的,比较难看。自己实现了悔步功能,悔步功能想了一天才完成,代码比较多,思路比较乱,编程小白,能力有限,希望大佬们不喜勿喷。下方贴上自绘图片和代码。
vs2015 loadimage函数会报错,将解决方案里的属性改为多字节就能正常运行了。
/*
0 墙
1 空地
2 箱子
3 目的地
4 人
5 箱子到达目的地
6 人在目的地上,显示人
*/
/*
1.基本绘图窗口
1.1 initgraph(400,200)
1.2 closegraph()
1.3 窗口坐标
2.基本贴图
2.1 声明一个图片变量 IMAGE img
2.2 加载资源到变量 loadimage(&img,"URL")
2.2.1 宽字节
2.2.2 改变图片大小
2.3 显示图片 putimage(int x,int y,&image)
*/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <graphics.h>
#include <conio.h>
using namespace std;
int val = 0;//关卡数
int total;//记录上一次移动的方向,以便进行悔步,与上一次的移动方向相反
int flag;
int tx, ty; /* tx , ty 记录人移动过后的原来的人所在的位置 */
int a[3][8][8] = {
0,0,0,0,0,0,0,0,
0,3,2,1,1,0,1,0,
0,1,1,2,1,1,1,0,
0,1,0,2,1,1,3,0,
0,1,1,1,4,3,1,0,
0,1,1,1,1,1,1,0,
0,1,1,1,1,2,3,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,1,1,2,3,0,1,0,
0,0,1,1,1,1,1,0,
0,1,2,2,3,1,1,0,
0,0,1,1,1,3,1,0,
0,1,1,1,1,4,1,0,
0,1,2,1,3,1,1,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,0,
0,0,1,2,0,1,3,0,
0,1,2,3,1,1,1,0,
0,1,1,1,1,4,1,0,
0,1,1,2,1,1,1,0,
0,1,1,1,0,3,1,0,
0,0,0,0,0,0,0,0
};
//批量初始化处理图片
IMAGE img[6];
int imgindex[6] = {
0,1,2,3,4,5 };
void loadresource()
{
int i;
for (i = 0; i < 6; i++) {
char buf[20];
sprintf(buf, "%d.jpg", imgindex[i]);
loadimage(img + i, buf, 50, 50);
}
}
void drawmap()
{
int i, j;
for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
int x = 50 * j;
int y = 50 * i;//x,y代表像素位置,每个像素大小设为50*50
switch (a[val][i][j]) {
case 0:
putimage(x, y, img);
break;
case 1:
putimage(x, y, img + 1);
break;
case 2:
putimage(x, y, img + 2);
break;
case 3:
putimage(x, y, img + 3);
break;
case 4:
case 6:
putimage(x, y, img + 4);
break;
case