<>推箱子游戏的实现

<>开发环境的搭建

* 因为我的这里使用的是vs2019所以就用2019来演示
* 首先百度首页搜索easyx
* 找到官网

* 下载好之后直接打开安装就可以了
* 对照自己的版本直接安装就可以了
*
这样开发环境就搭建好了
<>游戏实现

* 温馨提示
需要添加头文件graphics.h #include <graphics.h> #include <iostream> #include
<stdlib.h> #include <string.h> #include <conio.h> using namespace std; #define
RATIO 61 #define SCREEN_WIDTH 960 #define SCREEN_HEIGHT 768 //按键 上、下、左、右 控制方向
,‘q’退出 #define KEY_UP 'w' //char'a' #define KEY_LEFT 'a' #define KEY_RIGHT 'd' #
define KEY_DOWN 's' #define KEY_QUIT 'q' #define LINE 9 #define COLUMN 12 #
define START_X 100 //图片显示偏移量 #define START_Y 150 enum _PROPS { WALL, //墙 FLOOR,
//地板 BOX_DES, //箱子目的地 MAN, //小人 BOX, //箱子 HIT, //箱子命中目标 ALL }; //游戏控制方向 enum
_DIRECTION{ UP, DOWN, LEFT, RIGHT }; struct _POS { int x; //小人所在二维数组的行 int y;
//小人所在二维数组的列 }; IMAGE images[ALL]; struct _POS man; //小人所在二维数组中的位置 /*游戏地图*/ int
map[LINE][COLUMN] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 1, 1, 1
, 1, 1, 1, 1, 0, 0 }, { 0, 1, 4, 1, 0, 2, 1, 0, 2, 1, 1, 0 }, { 0, 1, 0, 1, 0, 1
, 0, 0, 1, 1, 1, 0 }, { 0, 1, 0, 2, 0, 1, 1, 4, 1, 1, 1, 0 }, { 0, 1, 1, 1, 1, 3
, 1, 1, 1, 4, 1, 0 }, { 0, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 0 }, { 0, 1, 0, 0, 1, 0
, 1, 1, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, };
/*************************************************** *改变游戏视图中一格对应道具并重新显示 *输入: *
line - 道具在地图数组的行下标 * column- - 道具在地图数组的列下标 * prop - 道具的类型 * 返回值:无
***************************************************/ void changeMap(int line,
int column, enum _PROPS prop) { map[line][column] = prop; putimage(START_X +
column* RATIO, START_Y + line * RATIO, &images[prop]); }
/************************************************** *实现游戏四个方向(上、下、左、右)的控制 *输入:
* direct - 人前进方向 * 输出:无 ***************************************************/
void gameControl(enum _DIRECTION direct) { int x = man.x; int y = man.y; if (
direct= UP) {//先处理前进方向是地板的情况 if ((x - 1) >= 0 && map[x - 1][y] == FLOOR) {
changeMap(x - 1, y, MAN);//小人的前进一格 man.x = x - 1; changeMap(x, y, FLOOR); } }
else if (direct == DOWN) { if ((x + 1) < LINE && map[x + 1][y] == FLOOR) {
changeMap(x + 1, y, MAN);//小人的前进一格 man.x = x + 1; changeMap(x, y, FLOOR); } }
else if (direct == LEFT) { if ((y - 1) >= 0 && map[x][y - 1] == FLOOR) {
changeMap(x, y - 1, MAN);//小人的前进一格 man.y = y - 1; changeMap(x, y, FLOOR); } }
else if (direct == RIGHT) { if ((y + 1) < COLUMN && map[x][y + 1] == FLOOR) {
changeMap(x, y + 1, MAN);//小人的前进一格 man.y = y + 1; changeMap(x, y, FLOOR); } } }
int main(void) { IMAGE bg_img; //游戏背景的初始化就像,搭台唱戏唱戏一样 initgraph(SCREEN_WIDTH,
SCREEN_HEIGHT); loadimage(&bg_img, _T("blackground.bmp"), SCREEN_WIDTH,
SCREEN_HEIGHT, true); putimage(0, 0, &bg_img); //加载道具图标 loadimage(&images[WALL],
_T("wall.bmp"), RATIO, RATIO, true); loadimage(&images[FLOOR], _T("floor.bmp"),
RATIO, RATIO, true); loadimage(&images[BOX_DES], _T("des.bmp"), RATIO, RATIO,
true); loadimage(&images[MAN], _T("man.bmp"), RATIO, RATIO, true); loadimage(&
images[BOX], _T("box.bmp"), RATIO, RATIO, true); loadimage(&images[HIT], _T(
"box.bmp"), RATIO, RATIO, true); for (int i = 0; i < LINE; i++) { for (int j = 0
; j < COLUMN; j++) { if (map[i][j] == MAN) { man.x = i; man.y = j; }
//显示道具puimage(图片左上角的位置坐标显示在窗口的位置,数组的地址 putimage(START_X + j * RATIO, START_Y + i
* RATIO, &images[map[i][j]]); } } //游戏环节 bool quit = false; do { if (_kbhit()) {
//玩家按键 char ch = _getch(); if (ch == KEY_UP) { gameControl(UP); } else if (ch ==
KEY_DOWN) { gameControl(DOWN); } else if (ch == KEY_LEFT) { gameControl(LEFT);
} else if (ch == KEY_RIGHT) { gameControl(RIGHT); } else if (ch == KEY_QUIT) {
quit= true; } } Sleep(100); //休眠100ms ,100毫秒0.1秒 } while (quit = false); //!quit
system("pause"); return 0; //奇牛学院-残芯 }

技术
©2019-2020 Toolsou All rights reserved,
颠覆!午睡千万别超过这个时间!当心引发致命疾病…el-select同时获取label和value值element-ui+vue-treeselect下拉框的校验latex中自定义的命令———\newcommand基于STM32红外避障小车的设计(有代码)pytorch之ResNet18(对cifar10数据进行分类准确度达到94%)[work] python读取txt文件最后一行(精华)2020年8月9日 C#基础知识点 反射C#/.NET 系统优化专题(redis第六篇 数据结构【List】)golang一行代码将切片转成以分号分隔的字符串