纸上来得终觉浅,绝知此事要躬行(一)

    实际上最好的学习,我也比较认同的一句话:“我听过的我会忘记,我看过的我会记得,我做过的我才真的懂得”
    相信各位少侠对我们之前的招式有了一定的掌握,已经摩拳擦掌,跃跃欲试了,那么现在就让我们一起开始一个小的项目实战吧

    

项目需求

我们这次一起来实现一个推箱子的小游戏
在这里插入图片描述
图片素材:
链接:https://pan.baidu.com/s/1IrgDJ_q9dR2OEFHrdo8V6g
提取码:tvmn

开发工具:
vc++2010(其他VC、VS版本均可)
easyx图形库(自行百度下载安装)

    

项目实现

开发中程序员一定不是盲目敲代码!不是盲目敲代码!不是盲目敲代码!
    一定要项目分析!一定要项目分析!一定要项目分析!
在这里插入图片描述

那么我们来先实现地图初始化

在这里插入图片描述
在这里插入图片描述

我们先来实现窗口和背景图片的加载

#include <graphics.h>	//导入easyx图形库
#include <Windows.h>
#include <iostream>

using namespace std;

IMAGE picture[6];	//储存图片:IMAGE是easyx库中的图片数据类型 
//墙:0,地板: 1,箱子目的地: 2, 小人: 3, 箱子: 4, 箱子命中目标: 5

int main(void){

	//初始化地图
	IMAGE background;	//储存背景图片
	initgraph(960,768);	//easyx库中函数,初始化窗口大小  960*768
	loadimage(&background,_T("blackground.bmp"),960,768);	//加载背景图片,使用介绍查看easyx文档
	putimage(0,0,&background);	//输出加载的图片,使用介绍查看easyx文档

	system("pause");
	return 0;
}

在这里插入图片描述
窗口和背景图片已经加载好了,下面我们来把游戏道具图片一个一个显示出来,
道具的加载正好可以用上我们刚学的枚举来表示

#include <graphics.h>	//导入easyx图形库
#include <Windows.h>
#include <iostream>

using namespace std;

//用二维数组来表示地图
int map[9][12] = {
	{ 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, 0, 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, 0, 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 }
};

enum PIC{	//图片对应的下标号
	Wall,	//0 墙
	Floor,	//1 地板
	Des,	//2 箱子目的地
	Man,	//3 小人
	Box,	//4	箱子,同时箱子命中目标,显示的就是box
	All		//5 需要数组元素个数
};

IMAGE picture[All];	//储存图片:IMAGE是easyx库中的图片数据类型 

int main(void){

	//初始化地图
	IMAGE background;	//储存背景图片
	initgraph(960,768);	//easyx库中函数,初始化窗口大小  960*768
	loadimage(&background,_T("blackground.bmp"),960,768);	//加载背景图片,使用介绍查看easyx文档
	putimage(0,0,&background);	//输出加载的图片

	//加载游戏道具图片
	loadimage(&picture[Wall],_T("wall.bmp"),61,61);//加载墙的图片,墙的图片大小61*61
	loadimage(&picture[Floor],_T("floor.bmp"),61,61);
	loadimage(&picture[Des],_T("des.bmp"),61,61);
	loadimage(&picture[Man],_T("man.bmp"),61,61);
	loadimage(&picture[Box],_T("box.bmp"),61,61);

	//遍历地图,输出对应图片,游戏道具x轴偏移量100,y轴偏移量150
	for(int i=0; i<9; i++){
		for(int j=0; j<12; j++){
			putimage(100+j*61,150+i*61,&picture[map[i][j]]);
		}
	}

	system("pause");
	return 0;
}

在这里插入图片描述
好了,现在我们第一部分地图的初始化已经完成了。我们先不急的下一个部分,现在我们要做的是把代码更加完善一下,回头看一下我们现在写的代码是不是有很多数字常量啊,什么960,768等等,这样会让我们后期维护起来非常麻烦,如果需要修改就会造成牵一发而动全身。那么我们用学过的宏定义来完善一下。

#include <graphics.h>	//导入easyx图形库
#include <Windows.h>
#include <iostream>

#define LINE  9		//地图的行数
#define ROW	 12		//地图的列数
#define WINDOW_LINE	 768	//游戏窗口高度
#define WINDOW_ROW	 960	//游戏窗口宽度
#define PICTURE_SIZE  61	//道具图片尺寸大小
#define X_OFFSET	 100	//x轴图片偏移量
#define Y_OFFSET	 150	//y轴图片偏移量

using namespace std;

//用二维数组来表示地图
int map[LINE][ROW] = {
	{ 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, 0, 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, 0, 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 }
};

enum PIC{	//图片对应的下标号
	Wall,	//0 墙
	Floor,	//1 地板
	Des,	//2 箱子目的地
	Man,	//3 小人
	Box,	//4	箱子,同时箱子命中目标,显示的就是box
	All		//5 需要数组元素个数
};

IMAGE picture[All];	//储存图片:IMAGE是easyx库中的图片数据类型 

int main(void){

	//初始化地图
	IMAGE background;	//储存背景图片
	initgraph(WINDOW_ROW,WINDOW_LINE);	//easyx库中函数,初始化窗口大小  960*768
	loadimage(&background,_T("blackground.bmp"),WINDOW_ROW,WINDOW_LINE);	//加载背景图片,使用介绍查看easyx文档
	putimage(0,0,&background);	//输出加载的图片

	//加载游戏道具图片
	loadimage(&picture[Wall],_T("wall.bmp"),PICTURE_SIZE,PICTURE_SIZE);//加载墙的图片,墙的图片大小61*61
	loadimage(&picture[Floor],_T("floor.bmp"),PICTURE_SIZE,PICTURE_SIZE);
	loadimage(&picture[Des],_T("des.bmp"),PICTURE_SIZE,PICTURE_SIZE);
	loadimage(&picture[Man],_T("man.bmp"),PICTURE_SIZE,PICTURE_SIZE);
	loadimage(&picture[Box],_T("box.bmp"),PICTURE_SIZE,PICTURE_SIZE);

	//遍历地图,输出对应图片,游戏道具x轴偏移量100,y轴偏移量150
	for(int i=0; i<LINE; i++){
		for(int j=0; j<ROW; j++){
			putimage(X_OFFSET+j*PICTURE_SIZE,Y_OFFSET+i*PICTURE_SIZE,&picture[map[i][j]]);
		}
	}

	system("pause");
	return 0;
}

OK通过宏定义,现在我们的代码就已经是可维护,易修改的高逼格的代码了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值