EasyX必会基础

一、EasyX 是什么

EasyX Graphics Library是针对Visual C++的免费绘图库,支持VC6.0 ~VC2019,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将EasyX应用在教学当中。(单击进入官网下载)

以下功能为EasyX_20210730版本,最新版本请下载查看EasyX帮助文档

二、图像

主要用贴图功能,做小游戏,需要注意的是坐标默认的原点在窗口的左上角,X 轴向右为正,Y 轴向下为正,度量单位是点。

#include<easyx.h>//图形库
//或者#include<graphics.h>

int main()
{
	//创建窗口640,480;
	initgraph(640,480);
	
	//图像
	IMAGE img;//定义图像变量
	loadimage(&img,L"填路径",640,480);//加载图片到 img 并将图片的长宽赋值640,480
	//路径可以是相对路径,也可以是绝对路径

	//贴图
	BeginBatchDraw();//这个函数用于开始批量绘图。执行后,任何绘图操作都将暂时不输出到屏幕上,
	putimage(0,0,&img);//将img图片贴在坐标(0,0)位置
	EndBatchDraw();//直到执行 EndBatchDraw 才将之前的绘图输出。

	return 0;
}

三、音乐

#include<mmsystem.h>//音乐
//或者#include<windows.h>
#pragma comment(lib,"winmm.lib")//库文件 多媒体

int main()
[	
	//音乐
	mciSendString(L"open 填路径",0,0,0);//打开
	mciSendString(L"close 填路径",0,0,0);//关闭
	mciSendString(L"play 填路径",0,0,0);//播放
	mciSendString(L"stop 填路径",0,0,0);//停止
	mciSendString(L"pause 填路径",0,0,0);//暂停
	mciSendString(L"resume 填路径",0,0,0);//恢复
	
	//循环播放
	mciSendString(L"open 填路径",0,0,0);//打开
	mciSendString(_T("play 填路径 repeat"), 0, 0, 0);//repeat循环播放

	//仅支持wav格式音乐
	PlaySound(L"填路径", nullptr, SND_FILENAME | SND_ASYNC);
	
	return 0;
}

四、键盘

获取键盘消息,根据按键执行操作需要包含头文件#include<conio.h>

#include<conio.h>//按键

int main()
{	
	while(true){
		if (_kbhit())//检测是否有按键消息 有消息返回非零值
		{
			char ch = _getch();//需要包含conio.h
			switch (ch)//判断用户按了那些按键
			{
				case 'w':
				case 72://↑小键盘键值
					//执行相关操作
					breakcase 'a':
				case 75://←小键盘键值
					//执行相关操作
					breakcase 's':
				case 80://↓小键盘键值
					//执行相关操作
					breakcase 'd':
				case 77://→小键盘键值
					//执行相关操作
					break}
		}
	}
	return 0;
}

五、鼠标

获取鼠标消息,先了解消息结构体声明,这些均在#include <graphics.h>

struct ExMessage
{
	USHORT message;					// 消息标识
	union
	{
		// 鼠标消息的数据
		struct
		{
			bool ctrl		:1;		// Ctrl 键是否按下
			bool shift		:1;		// Shift 键是否按下
			bool lbutton	:1;		// 鼠标左键是否按下
			bool mbutton	:1;		// 鼠标中键是否按下
			bool rbutton	:1;		// 鼠标右键
			short x;				// 鼠标的 x 坐标
			short y;				// 鼠标的 y 坐标
			short wheel;			// 鼠标滚轮滚动值,为 120 的倍数
		};
		//其余略
	};
};


在这里插入图片描述


#include <graphics.h>
//或者#include<easyx.h>

int main()
{
	initgraph(640,480);
	ExMessage m;// 定义消息变量
	while(true){
		m = getmessage(EM_MOUSE);// 获取一条鼠标消息
		if (m.message == WM_LBUTTONDOWN)
		{//如果鼠标左键按下
				closegraph();
		}
	}
	return 0;
}

六、文字

在使用<graphics.h>或<easyx.h>的窗口时,需要用专门的文字输出函数

#include<easyx.h>

int main()
{	
	initgraph(640,480);
	setbkmode(0);//设置文字背景透明,有背景贴图可用
	settextcolor(RED);//设置字体颜色  红色
	settextstyle(64, 0, _T("宋体"));//64是字体大小 0是自适应 双引号里可以填字体名字
	//参数1:指定高度(逻辑单位)
	//参数2:字符的平均宽度(逻辑单位)如果为 0,则比例自适应
	//参数3:字体名称
	outtextxy(0, 0, _T("Hello World!"));//输出文本的坐标(0,0) 后面是文本内容
	system("pause");//暂停看效果
	return 0;
}

七、颜色

可用RGB颜色:

RGB(0~255,0~255,0~255);

也可用预定义颜色常量,如下:

 常量 	    值 	    颜色   
BLACK     0          黑 
WHITE     0xFFFFFF   白 
BLUE      0xAA0000   蓝  
GREEN     0x00AA00   绿
CYAN      0xAAAA00   青 
YELLOW    0x55FFFF   黄 
RED       0x0000AA   红 
MAGENTA   0xAA00AA   紫 
BROWN	  0x0055AA   棕 
DARKGRAY     0x555555  深灰 
LIGHTGRAY    0xAAAAAA  浅灰 
LIGHTBLUE    0xFF5555  亮蓝
LIGHTGREEN   0x55FF55  亮绿 
LIGHTCYAN    0xFFFF55  亮青 
LIGHTRED     0x5555FF  亮红 
LIGHTMAGENTA 0xFF55FF  亮紫 

八、实战

推箱子实战

学完基础,点进来学习基于EasyX的推箱子游戏吧,保姆级教程,手把手教你写游戏!

拼图实战

学完基础,点进来学习基于EasyX的拼图游戏吧,保姆级教程,手把手教你写游戏!

扫雷实战
学完基础,点进来学习基于EasyX的扫雷游戏吧,保姆级教程,手把手教你写游戏!

五子棋实战
学完基础,点进来学习基于EasyX的五子棋游戏吧,保姆级教程,手把手教你写游戏!

贪吃蛇实战
学完基础,点进来学习基于EasyX的贪吃蛇游戏吧,保姆级教程,手把手教你写游戏!

### 使用 C++EasyX 图形库开发小游戏 #### 创建窗口并初始化图形环境 为了使用 EasyX 库创建一个小游戏,首先需要设置好图形环境。这通常涉及到创建一个新的图形窗口。 ```cpp #include <graphics.h> int main() { initgraph(640, 480); // 初始化图形模式并打开一个绘图窗口 } ``` 此代码片段展示了如何通过 `initgraph` 函数来启动 EasyX 并指定窗口大小为 640x480 像素[^1]。 #### 添加简单的动画效果 为了让游戏更加生动有趣,在游戏中加入一些基础的动画是非常重要的。下面是一个简单移动矩形的例子: ```cpp void drawMovingRectangle() { int x = 0; while (true) { cleardevice(); // 清除屏幕上的所有内容 setfillcolor(RGB(255, 0, 0)); // 设置填充颜色为红色 fillrectangle(x, 100, x + 50, 150); // 绘制一个宽度为50像素高度也为50像素的正方形 x += 2; // 更新位置变量 if (x >= getwindowwidth()) break; Sleep(30); // 控制帧率 } } ``` 这段程序会画出一个从左向右缓慢移动直到超出视窗边界的红框[^3]。 #### 实现用户交互功能 对于任何类型的游戏来说,允许玩家与之互动都是必不可少的一部分。这里展示了一个监听键盘按键的方法: ```cpp bool isKeyPressed(int key) { return GetAsyncKeyState(key) & 0x8000 ? true : false; } // 在主循环里调用该方法检测特定键是否被按下... if (isKeyPressed(VK_LEFT)) { // 处理左边方向箭头按下的情况 } else if (isKeyPressed(VK_RIGHT)) { // 处理右边方向箭头按下的情况 } ``` 上述例子中定义了一个辅助函数用来判断某个给定虚拟键码对应的物理键当前状态,并将其应用于控制游戏角色的动作[^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值