学习笔记:图形化与C++多线程
引言
计算导论与程序设计课的期末作业是分别设计OJ版本与图形化版本的扫雷游戏。截止到目前已经完成OJ版项目的开发,对于图形化版本也已经基本实现了基础的游戏功能。因此想要浅谈一下最近学习到的新技能。
由于课程设计作业的查重要求,我不会具体描写部分代码功能的具体实现。记录开发过程与程序源代码的Github仓库将会在所有作业完成截止后设置为开放。 当然,我相信不会有人来看我的垃圾代码的
图形化界面
由于本人能力有限,因此在开发时选择了较为简单的EasyX进行开发。官方文档可以在这里查看
我们可以看到,对于最基本的程序框架来说:
1 |
|
由于其对于窗口的操作是单图层覆盖的模式,因此需要留意写入造成的影响与写入前后的擦除
对于背景的操作
使用setbkcolor(0xE7EFDE)
设置背景颜色为0xE7EFDE(16进制颜色)
使用setbkmode(TRANSPARENT)
设置图案填充和文字输出时的背景模式为透明(默认为用当前背景色填充,在其它图像上输出时会有覆盖)
使用cleardevice()
清楚屏幕所有绘制
使用clearrectangle(left,top,right,bottom)
以上下左右位置清除长方形区域的绘制
输出图像
1 | setlinecolor(0x332300); //设置线条颜色 |
输出文字
1 | TCHAR start[] = _T("开始游戏"); |
以整形数字输出
1 | void printnum(int x, int y, int printnum)//在x,y位置输出数字'printnum' |
读取鼠标操作
1 | ExMessage m; // 定义消息变量 |
ExMessage
这个结构体用于保存鼠标消息
示例(声明
ExMessage m;
):鼠标左键按下
m.lbutton == true
鼠标的 x 坐标m.x
或者使用
message
获取消息标识
m.message == WM_LBUTTONDOWN
左键按下消息
m.message == WM_LBUTTONUP
左键弹起消息
C++实现多线程
以C++多线程实现计时器操作为例:
函数本体:
1 |
|
其中,timecontinue
是bool
类型的全局变量,用于在外部控制此线程结束的标识
在主函数当中,使用std::thread timecutdown(printusetime)
开启该进程,使用timecutdown.join()
函数等待子线程结束后,主线程才会继续执行并退出