EasyX库使用入门 [学编程做游戏,快速入门]

       你可以像EasyX库使用入门 [学编程做游戏,快速入门]_第1张图片一样生活,但永远不会像EasyX库使用入门 [学编程做游戏,快速入门]_第2张图片一样快乐!!!

                                                 EasyX库使用入门 [学编程做游戏,快速入门]_第3张图片  EasyX库使用入门 [学编程做游戏,快速入门]_第4张图片  EasyX库使用入门 [学编程做游戏,快速入门]_第5张图片  EasyX库使用入门 [学编程做游戏,快速入门]_第6张图片


                    

又是收获满满的一天EasyX库使用入门 [学编程做游戏,快速入门]_第7张图片

前言​

EasyX是什么​? 

EasyX坐标和设备​

窗口函数​ 

EasyX颜色​ 

图形绘制函数​ 

文字绘制函数​ 

图像处理函数​ 

鼠标消息函数​  

键盘消息函数​ 

播放音乐​

修改窗口标题​ 


 此博客所用到的代码我存在了gitee,可以看下game01: 小游戏仓库

  

前言EasyX库使用入门 [学编程做游戏,快速入门]_第8张图片

  • 准备一个任意vs系列的编译器(vs c++ 6.0, vs2011, vs2013, vs2017, vs2019等等)

  • 下载EasyX帮助文档

  • 下载EasyX并根据提示完成配置(很简单的,跟着提示走一次成功,vscode配置比较麻烦本文不做说明)

  • 下载地址:https://easyx.cn/

  • 参考视频:【C/C++/EasyX】学编程,做游戏,小白快速入门图形编程,零基础入门到精通,学习就是这么快乐_哔哩哔哩_bilibili

EasyX是什么EasyX库使用入门 [学编程做游戏,快速入门]_第9张图片

EasyX是针对C++的图形库,可以帮助C/C++初学者快速上手图形的游戏编程。比如:可以基于EasyX图形库很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块,贪吃蛇,黑白棋等小游戏.

许多人学编程都是从C语言入门的,而目前的现状是:

  • 学习只交基础语法,一直都在黑窗口上学习,同学们都学习很乏味。
  • 即使有的学校教图形编程也是,使用一些难度较高的,比如win32,OpenGL门槛依然很高,初学者会受严重打击的.
  • 于是就有了这个EasyX库,等这个学完后,我会后续更新天天酷跑,贪吃蛇,扫雷等小游戏,供大家练习参考,OK,现在开搞

EasyX坐标和设备EasyX库使用入门 [学编程做游戏,快速入门]_第10张图片

  • 坐标默认的原点是在窗口的左上角,X轴向右为正,Y轴向下为正,度量单位是像素点。

EasyX库使用入门 [学编程做游戏,快速入门]_第11张图片

窗口函数EasyX库使用入门 [学编程做游戏,快速入门]_第12张图片 

头文件:#include

​​​​​
  • initgraph(int width,int height,int flag=NULL);用于初始化绘图窗口(创建窗口)

      width  指定窗口的宽度

      height 指定窗口的高度

      flag     窗口的样式,默认为NULL

  • closegraph(); 关闭绘制窗口
  • cleardevice();清空绘图设备 

代码示例:

#include
//1.包含图形库头文件,就能使用提供给我的函数
#include
using namespace std;
int main()
{
	//2.创建一个窗口,q确定窗口大小
	initgraph(640,480);
	getchar();
	//2.1关闭窗口
	closegraph();
	
	return 0;
}

运行结果: 

EasyX库使用入门 [学编程做游戏,快速入门]_第13张图片

EasyX颜色EasyX库使用入门 [学编程做游戏,快速入门]_第14张图片 

RGB方式

setcolor(RGB(0,0,0));

字母方式 

setcolor(BLACK);

六个十六进制

setcolor(0x000000);

RGB颜色对应表 

一些常见的颜色

  • 0x000000 黑色
  • 0xFF0000 蓝色
  • 0xFFAAAA 蓝色
  • 0xFFFFFF 白色

图形绘制函数EasyX库使用入门 [学编程做游戏,快速入门]_第15张图片 

图形绘制函数用于在窗口上绘制各种图形

  • 绘图函数从填充样式分类可分为无填充,有边框填充,无边框三种。

    以画圆为例:

circle()      无填充
fillcircle()  有边框填充
solidcircle() 无边框填充
  • 从形状来分,常用的可以分为八种 

circle画圆                   elipse画椭圆                pie画扇形                      polygon画多边形 

rectangle画矩形         roundrect画圆角矩形   line画线                        putpixel 画点

设置填充颜色: setfillcolor;
设置线条颜色: setlinecolor;
设置线条样式: setlinestyle;

代码示例:

#include
//1.包含图形库头文件,就能使用提供给我的函数
#include
using namespace std;
int main()
{
	2.创建一个窗口,q确定窗口大小
	initgraph(640,480);
	
	//3.画圆
	setfillcolor(YELLOW);//设置填充颜色
	setlinecolor(BLUE);//设置线条颜色
	setlinestyle(PS_SOLID,5);//设置线条样式
	circle(50, 50, 50);
	fillcircle(50, 100, 50);
	solidcircle(50, 250, 50);
	getchar();
	//2.1关闭窗口
	closegraph();
	
	return 0;
}

运行结果:

EasyX库使用入门 [学编程做游戏,快速入门]_第16张图片

设置背景颜色 

setbkcolor(WHITE);//设置背景颜色
cleardevice();//清屏,清除掉原来的背景
//这两步合起来才能设置背景颜色

代码示例:

2.创建一个窗口,q确定窗口大小
	initgraph(640,480);
	//设置背景颜色,one two两步才能设置背景颜色
    setbkcolor(WHITE);//one
    cleardevice();//清屏//two
	//3.画圆
	setfillcolor(YELLOW);//设置填充颜色
	setlinecolor(BLUE);//设置线条颜色
	setlinestyle(PS_SOLID,5);//设置线条样式
	circle(50, 50, 50);
	fillcircle(50, 100, 50);
	solidcircle(50, 250, 50);
	getchar();
	//2.1关闭窗口
	closegraph();

运行结果:

EasyX库使用入门 [学编程做游戏,快速入门]_第17张图片

文字绘制函数EasyX库使用入门 [学编程做游戏,快速入门]_第18张图片 

  • outtextxy(int x,int y,PCTSTR str); 在指定位置输出字符串
  • settextcolor(COLORREF color);设置当前文字颜色
  • settextstyle(int nHeight,int nWidth,LPCTSTR lpszFace) 设置字体样式 
  • textheight(LPCTSTR str);获取字符串实际占用的像素高度
  • textwidth(LPCTSTR str);获取字符串实际占用的像素宽度

输出字符串,设置文字颜色 

    settextcolor(RED);//设置文字颜色
	outtextxy(50, 50, "我是QK");

代码示例:

#include
//1.包含图形库头文件,就能使用提供给我的函数
#include
using namespace std;
int main()
{ 
    initgraph(640,480);
	//设置背景颜色,one two两步才能设置背景颜色
    setbkcolor(WHITE);//one
    cleardevice();//清屏//two
    settextcolor(RED);//设置文字颜色
	outtextxy(50, 50, "我是QK");
	getchar();
	//2.1关闭窗口
	closegraph();
	
	return 0;
}

 这样写运行错误,这里我要强调一下;

   //1.在字符串前面加上大写的L
    //2.用TEXT()把字符串包起来,_T()

正确方式

    settextcolor(RED);//设置文字颜色
	//1.在字符串前面加上大写的L
	//2.用TEXT()把字符串包起来,_T()
	outtextxy(50, 50, L"我是QK");

运行结果

EasyX库使用入门 [学编程做游戏,快速入门]_第19张图片

设置字体样式,大小,字体(上面的代码也加上去)

settextstyle(50, 0, L"楷体");

运行结果:

EasyX库使用入门 [学编程做游戏,快速入门]_第20张图片

我们会发现字体是有背景的

   //设置背景模式
	setbkmode(TRANSPARENT);

运行结果

EasyX库使用入门 [学编程做游戏,快速入门]_第21张图片

文字居中 

    settextcolor(RED);
	setfillcolor(BLUE);
	setlinecolor(BLACK);
	fillrectangle(200, 50, 500, 100);//设置一个矩形
	wchar_t arr[] = L"我是居中显示的maye";
	int width = 300/2-textwidth(arr) / 2;
	int height =50/2- textheight(arr) / 2;
	outtextxy(width+200,height+50 ,arr);

运行结果:

EasyX库使用入门 [学编程做游戏,快速入门]_第22张图片

图像处理函数EasyX库使用入门 [学编程做游戏,快速入门]_第23张图片 

  • 在使用图像之前,需要定义一个变量,然后把图片加载进变量中才能进行使用
  1.  平时定义变量都是使用的基础数据类型,比如:int temp;
  2. 在使用图像的时候需要使用easyx提供给我们的类型:IMAGE,如:IMAGE.img; 
  • loadimage(IMAGE* pDstImg,LPCTSTR pimgFile,int nWidth=0,int nHeight=0,bool bResize=false);从文件中读取图像
  1. pDstImg            //保存图像的IMAGE对象指针&img
  2. plmgFile            //图片文件名
  3. nWidth=0          //图片的拉伸宽度
  4. nHeight=0         //图片的拉伸高度
  5. bResize=false   //是否调整IMAGE的大小以适应图片 
  • putimage(int dstX,int dstY,IMAGE* pSrcimg,DWORD dwRop=SRCCOPY);在当前设备上绘制指定图像 
  1. dstX               //绘制位置的X坐标
  2. dstY               //绘制位置的Y坐标
  3. pSrcImg         //要绘制的IMAGE对象指针&
  4. dwRop=SRCCOPY //三元光栅操作码 

 加载图片

   IMAGE img;//定义一个对象
	loadimage(&img, L"./相对路径或者绝对路径",500,400);//加载图片,后面两个调整图片大小
	putimage(0, 0, &img);//输出图片,0,0,相当于坐标

 注:相对路径: ./表示当前文件夹下,../当前文件夹的上一级目录

      绝对路径:E:\vs\youxi01

 这里我推荐用相对路径,我讲解下操作.

1.点击此文件

EasyX库使用入门 [学编程做游戏,快速入门]_第24张图片

 2.将图片加载到你创建的文件下面,我这里是test.cpp

EasyX库使用入门 [学编程做游戏,快速入门]_第25张图片

运行结果:

EasyX库使用入门 [学编程做游戏,快速入门]_第26张图片 

鼠标消息函数EasyX库使用入门 [学编程做游戏,快速入门]_第27张图片  

  •  鼠标消息需要使用MOUSEMSG类型,比如:MOUSEMSG.msg;
  •  然后用MoustHit()判断是否有鼠标消息(左键,右键,中间,移动)
  • 如果有鼠标消息就可以进行接收鼠标消息了msg=GetMouseMsg();
  • 鼠标消息主要成员:
  1. uMsg;//当前鼠标消息
  2. x;      //当前鼠标x坐标
  3. y;      //当前鼠标y坐标 
  •  uMsg可用来判断当前鼠标消息是什么消息
  1. WM_LBUTTONDOWN 鼠标左键消息
  2. WM_RBUTTONDOWN 鼠标右键消息 

代码示例:(要把前面写的代码的都放进去)

//鼠标消息
	while (1)//不断地处理事务,需要循环
	{
		
		if (MouseHit())
		{
			//cleardevice();
			MOUSEMSG msg = GetMouseMsg();//接收鼠标消息
			if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 100)
			{
				printf("我是QK,大家多多关照");
			}
			//消息分发
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
				outtextxy(400, 400, L"鼠标左键按下");
				printf("坐标(%d,%d)\n", msg.x, msg.y);
				break;
			case WM_RBUTTONDOWN:
				outtextxy(400, 400, L"鼠标右键按下");
				printf("坐标(%d,%d)\n", msg.x, msg.y);
				break;
			}
		}
		
	}

 注:这里>200,<500那段是判断鼠标是否点击在那个矩形区域内,如果是则输出下面的文字,如果不是则输出你所指向的坐标

运行结果:

EasyX库使用入门 [学编程做游戏,快速入门]_第28张图片

另一种方式:

代码示例:

#include
#include
#include
using namespace std;
void button(int x, int y, int w, int h)
{
	setbkmode(TRANSPARENT);
	setfillcolor(BROWN);
	fillroundrect(x, y, x + w, y + h, 10, 10);
	settextstyle(30, 0, L"黑体");
	wchar_t  text[] = L"按钮";
	int tx = x + (w - textwidth(text)) / 2;
	int ty = y + (h - textheight(text)) / 2;
	outtextxy(tx, ty, text);
}
int main()
{
	initgraph(640, 480, EW_SHOWCONSOLE);
	button(50,50,150,50);
	while (1)//不断地处理事务,需要循环
	{

		if (MouseHit())
		{
			//cleardevice();
			MOUSEMSG msg = GetMouseMsg();//接收鼠标消息
			//消息分发
				switch (msg.uMsg)
				{
				case WM_LBUTTONDOWN:
					if (msg.x >= 50 && msg.x <= 50 + 150 && msg.y >= 50 && msg.y <= 50 + 50)
					{
						printf("我是按钮,我被点击了\n");
					}
					break;
				default:
					break;
				}
		}
	}
	getchar();
	return 0;
}

 运行结果

EasyX库使用入门 [学编程做游戏,快速入门]_第29张图片

键盘消息函数EasyX库使用入门 [学编程做游戏,快速入门]_第30张图片 

EasyX库使用入门 [学编程做游戏,快速入门]_第31张图片

代码示例:

//鼠标消息
	int x = 0, y = 0;
	while (1)//不断地处理事务,需要循环
	{
		cleardevice();
		setfillcolor(BROWN);
		fillcircle(x, y, 20);
		
		char key = _getch();
		printf("%d,%c\n", key, key);
		switch (key)
		{
		case 72://上键
		case 'w':
		case 'W':
			y-=5;
			printf("上键\n");
			break;
		case 80://下键
		case 's':
		case 'S':
			y+=5;
			printf("下键\n");
			break;
		case 75:
		case'a'://左键
		case'A':
			x-=5;
			printf("左键\n");
			break;
		case 77://右键
		case 'd':
		case 'D':
			x+=5;
			printf("右键\n");
			break;

		}

运行结果:

EasyX库使用入门 [学编程做游戏,快速入门]_第32张图片

EasyX库使用入门 [学编程做游戏,快速入门]_第33张图片 

//双缓冲绘图,需要放在绘图代码之前和之后
	BeginBatchDraw();
......
     EndBatchDraw();

另一种键盘操作方式:

        if (GetAsyncKeyState(VK_UP))//上键
		{
			y -= 5;
		}
		if (GetAsyncKeyState(VK_DOWN))//下键
		{
			y += 5;
		}
		if (GetAsyncKeyState(VK_LEFT))//左键
		{
			x -= 5;
		}
		if (GetAsyncKeyState(VK_RIGHT))//右键
		{
			x += 5;
		}

两种对比:后一种更好一点,不仅可以上下左右走,还可以斜着走 

播放音乐EasyX库使用入门 [学编程做游戏,快速入门]_第34张图片

EasyX库使用入门 [学编程做游戏,快速入门]_第35张图片

 代码示例:

#include
#include//使用getch() 
#include
#include//包含多媒体设备接口头文件
#pragma comment(lib,"winmm.lib")//加载静态库
//播放音乐
void BGM()
{
	//打开音乐,播放音乐,repeat重复播放
	mciSendString(L"open ./15161.mp3",0,0,0);
	mciSendString(L"play ./15161.mp3",0,0,0);
}

修改窗口标题EasyX库使用入门 [学编程做游戏,快速入门]_第36张图片 

EasyX库使用入门 [学编程做游戏,快速入门]_第37张图片

 代码示例:

void change()
{
	//获取窗口句柄
	HWND hnd = GetHWnd();
	//设置窗口标题
	SetWindowText(hnd, L"c语言plus,欢迎关注");
	//弹出窗口,提示用户操作
	int isok=MessageBox(hnd, L"恭喜你成功过关", L"提示", MB_OKCANCEL);
	if (isok == IDOK)
	{
		printf("你点击了OK");
	}
	else if (IDCANCEL == isok)
	{
		printf("你点击了取消");
	}
}

 运行结果:

EasyX库使用入门 [学编程做游戏,快速入门]_第38张图片

EasyX库使用入门 [学编程做游戏,快速入门]_第39张图片

你可能感兴趣的:(#,项目实战,c++,c语言)