你可以像一样生活,但永远不会像
一样快乐!!!
又是收获满满的一天
此博客所用到的代码我存在了gitee,可以看下game01: 小游戏仓库
前言
EasyX是什么
?
EasyX坐标和设备
- 坐标默认的原点是在窗口的左上角,X轴向右为正,Y轴向下为正,度量单位是像素点。
窗口函数
头文件:#include<graphics.h>
代码示例:
#include<iostream>
//1.包含图形库头文件,就能使用提供给我的函数
#include<graphics.h>
using namespace std;
int main()
{
//2.创建一个窗口,q确定窗口大小
initgraph(640,480);
getchar();
//2.1关闭窗口
closegraph();
return 0;
}
运行结果:
EasyX颜色
RGB方式
setcolor(RGB(0,0,0));
字母方式
setcolor(BLACK);
六个十六进制
setcolor(0x000000);
RGB颜色对应表
一些常见的颜色
- 0x000000 黑色
- 0xFF0000 蓝色
- 0xFFAAAA 蓝色
- 0xFFFFFF 白色
图形绘制函数
图形绘制函数用于在窗口上绘制各种图形
- 绘图函数从填充样式分类可分为无填充,有边框填充,无边框三种。
以画圆为例:
circle() 无填充
fillcircle() 有边框填充
solidcircle() 无边框填充
- 从形状来分,常用的可以分为八种
设置填充颜色: setfillcolor;
设置线条颜色: setlinecolor;
设置线条样式: setlinestyle;
代码示例:
#include<iostream>
//1.包含图形库头文件,就能使用提供给我的函数
#include<graphics.h>
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;
}
运行结果:
设置背景颜色
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();
运行结果:
文字绘制函数
输出字符串,设置文字颜色
settextcolor(RED);//设置文字颜色
outtextxy(50, 50, "我是QK");
代码示例:
#include<iostream>
//1.包含图形库头文件,就能使用提供给我的函数
#include<graphics.h>
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;
}
这样写运行错误,这里我要强调一下;
正确方式:
settextcolor(RED);//设置文字颜色
//1.在字符串前面加上大写的L
//2.用TEXT()把字符串包起来,_T()
outtextxy(50, 50, L"我是QK");
运行结果:
设置字体样式,大小,字体(上面的代码也加上去)
settextstyle(50, 0, L"楷体");
运行结果:
我们会发现字体是有背景的
//设置背景模式
setbkmode(TRANSPARENT);
运行结果
文字居中
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);
运行结果:
图像处理函数
加载图片
IMAGE img;//定义一个对象
loadimage(&img, L"./相对路径或者绝对路径",500,400);//加载图片,后面两个调整图片大小
putimage(0, 0, &img);//输出图片,0,0,相当于坐标
这里我推荐用相对路径,我讲解下操作.
1.点击此文件
2.将图片加载到你创建的文件下面,我这里是test.cpp
运行结果:
鼠标消息函数
代码示例:(要把前面写的代码的都放进去)
//鼠标消息
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那段是判断鼠标是否点击在那个矩形区域内,如果是则输出下面的文字,如果不是则输出你所指向的坐标
运行结果:
另一种方式:
代码示例:
#include<iostream>
#include<easyx.h>
#include<string>
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;
}
运行结果
键盘消息函数
代码示例:
//鼠标消息
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;
}
运行结果:
//双缓冲绘图,需要放在绘图代码之前和之后
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;
}
两种对比:后一种更好一点,不仅可以上下左右走,还可以斜着走
播放音乐
代码示例:
#include<iostream>
#include<conio.h>//使用getch()
#include<graphics.h>
#include<mmsystem.h>//包含多媒体设备接口头文件
#pragma comment(lib,"winmm.lib")//加载静态库
//播放音乐
void BGM()
{
//打开音乐,播放音乐,repeat重复播放
mciSendString(L"open ./15161.mp3",0,0,0);
mciSendString(L"play ./15161.mp3",0,0,0);
}
修改窗口标题
代码示例:
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("你点击了取消");
}
}
运行结果: