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的贪吃蛇游戏吧,保姆级教程,手把手教你写游戏!

  • 10
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
/****************************************************** * EasyX Library for C++ (Ver:20151015(beta)) * http://www.easyx.cn * * graphics.h * 基于 EasyX.h,实现在 VC 下实现简单绘图。 * 同时,为了兼容 Turbo C/C++ 和 Borland C/C++ 等一系 * 列开发环境中的 BGI 绘图库函数,做了相应扩展。 ******************************************************/ #pragma once #include <easyx.h> // 兼容 initgraph 绘图模式的宏定义(无实际意义) #define DETECT 0 #define VGA 0 #define VGALO 0 #define VGAMED 0 #define VGAHI 0 #define CGA 0 #define CGAC0 0 #define CGAC1 0 #define CGAC2 0 #define CGAC3 0 #define CGAHI 0 #define EGA 0 #define EGALO 0 #define EGAHI 0 // BGI 格式的初始化图形设备,默认 640 x 480 HWND initgraph(int* gdriver, int* gmode, char* path); void bar(int left, int top, int right, int bottom); // 画无边框填充矩形 void bar3d(int left, int top, int right, int bottom, int depth, bool topflag); // 画有边框三维填充矩形 void drawpoly(int numpoints, const int *polypoints); // 画多边形 void fillpoly(int numpoints, const int *polypoints); // 画填充的多边形 int getmaxx(); // 获取最大的宽度值 int getmaxy(); // 获取最大的高度值 COLORREF getcolor(); // 获取当前绘图前景色 void setcolor(COLORREF color); // 设置当前绘图前景色 void setwritemode(int mode); // 设置前景的二元光栅操作模式 /////////////////////////////////////////////////////////////////////////////////// // 以下函数仅为兼容早期 EasyX 的接口,不建议使用。请使用相关新函数替换。 // #if _MSC_VER > 1200 #define _EASYX_DEPRECATE(_NewFunc) __declspec(deprecated("This function is deprecated. Instead, use this new function: " #_NewFunc ". See http://www.easyx.cn/help?" #_NewFunc " for details.")) #define _EASYX_DEPRECATE_OVERLOAD(_Func) __declspec(deprecated("This overload is deprecated. See http://www.easyx.cn/help?" #_Func " for details.")) #else #define _EASYX_DEPRECATE(_NewFunc) #define _EASYX_DEPRECATE_OVERLOAD(_Func) #endif // 设置当前字体样式(该函数已不再使用,请使用 settextstyle 代替) // nHeight: 字符的平均高度; // nWidth: 字符的平均宽度(0 表示自适应); // lpszFace: 字体名称; // nEscapement: 字符串的书写角度(单位 0.1 度); // nOrientation: 每个字符的书写角度(单位 0.1 度); // nWeight: 字符的笔画粗细(0 表示默认粗细); // bItalic: 是否斜体; // bUnderline: 是否下划线; // bStrikeOut: 是否删除线; // fbCharSet: 指定字符集; // fbOutPrecision: 指定文字的输出精度; // fbClipPrecision: 指定文字的剪辑精度; // fbQuality: 指定文字的输出质量; // fbPitchAndFamily: 指定以常规方式描述字体的字体系列。 _EASYX_DEPRECATE(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace); _EASYX_DEPRECATE(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut); _EASYX_DEPRECATE(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut, BYTE fbCharSet, BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily); _EASYX_DEPRECATE(settextstyle) void setfont(const LOGFONT *font); // 设置当前字体样式 _EASYX_DEPRECATE(gettextstyle) void getfont(LOGFONT *font); // 获取当前字体样式 // 以下填充样式不再使用,新的填充样式请参见帮助文件 #define NULL_FILL BS_NULL #define EMPTY_FILL BS_NULL #define SOLID_FILL BS_SOLID // 普通一组 #define BDIAGONAL_FILL BS_HATCHED, HS_BDIAGONAL // /// 填充 (对应 BGI 的 LTSLASH_FILL) #define CROSS_FILL BS_HATCHED, HS_CROSS // +++ 填充 #define DIAGCROSS_FILL BS_HATCHED, HS_DIAGCROSS // xxx 填充 (heavy cross hatch fill) (对应 BGI 的 XHTACH_FILL) #define DOT_FILL (BYTE*)"\x80\x00\x08\x00\x80\x00\x08\x00" // xxx 填充 (对应 BGI 的 WIDE_DOT_FILL) #define FDIAGONAL_FILL BS_HATCHED, HS_FDIAGONAL // \\\ 填充 #define HORIZONTAL_FILL BS_HATCHED, HS_HORIZONTAL // === 填充 #define VERTICAL_FILL BS_HATCHED, HS_VERTICAL // ||| 填充 // 密集一组 #define BDIAGONAL2_FILL (BYTE*)"\x44\x88\x11\x22\x44\x88\x11\x22" #define CROSS2_FILL (BYTE*)"\xff\x11\x11\x11\xff\x11\x11\x11" // (对应 BGI 的 fill HATCH_FILL) #define DIAGCROSS2_FILL (BYTE*)"\x55\x88\x55\x22\x55\x88\x55\x22" #define DOT2_FILL (BYTE*)"\x88\x00\x22\x00\x88\x00\x22\x00" // (对应 BGI 的 CLOSE_DOT_FILL) #define FDIAGONAL2_FILL (BYTE*)"\x22\x11\x88\x44\x22\x11\x88\x44" #define HORIZONTAL2_FILL (BYTE*)"\x00\x00\xff\x00\x00\x00\xff\x00" #define VERTICAL2_FILL (BYTE*)"\x11\x11\x11\x11\x11\x11\x11\x11" // 粗线一组 #define BDIAGONAL3_FILL (BYTE*)"\xe0\xc1\x83\x07\x0e\x1c\x38\x70" // (对应 BGI 的 SLASH_FILL) #define CROSS3_FILL (BYTE*)"\x30\x30\x30\x30\x30\x30\xff\xff" #define DIAGCROSS3_FILL (BYTE*)"\xc7\x83\xc7\xee\x7c\x38\x7c\xee" #define DOT3_FILL (BYTE*)"\xc0\xc0\x0c\x0c\xc0\xc0\x0c\x0c" #define FDIAGONAL3_FILL (BYTE*)"\x07\x83\xc1\xe0\x70\x38\x1c\x0e" #define HORIZONTAL3_FILL (BYTE*)"\xff\xff\x00\x00\xff\xff\x00\x00" // (对应 BGI 的 LINE_FILL) #define VERTICAL3_FILL (BYTE*)"\x33\x33\x33\x33\x33\x33\x33\x33" // 其它 #define INTERLEAVE_FILL (BYTE*)"\xcc\x33\xcc\x33\xcc\x33\xcc\x33" // (对应 BGI 的 INTERLEAVE_FILL)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值