C++EGE中实现在五个矩形内,通过鼠标左键打勾,鼠标右键取消打勾
时间: 2024-04-29 19:25:54 浏览: 100
基于EGE的象棋,包含象棋落子和图片的资源
5星 · 资源好评率100%
在EGE中实现如下:
```c++
#include <graphics.h>
int main()
{
initgraph(640, 480); // 创建绘图窗口
int x[] = {100, 200, 300, 400, 500}; // 矩形中心点x坐标
int y[] = {100, 200, 300, 400, 500}; // 矩形中心点y坐标
int r = 30; // 矩形半径
bool checked[] = {false, false, false, false, false}; // 记录矩形是否被打勾
while (true) // 循环绘制
{
cleardevice(); // 清空屏幕
for (int i = 0; i < 5; i++) // 绘制矩形
{
if (checked[i]) // 如果矩形被打勾,则绘制勾号
{
setlinecolor(GREEN); // 设置勾号颜色
line(x[i] - r, y[i], x[i], y[i] + r); // 绘制勾号
line(x[i], y[i] + r, x[i] + r, y[i] - r);
}
setlinecolor(BLACK); // 设置矩形边框颜色
rectangle(x[i] - r, y[i] - r, x[i] + r, y[i] + r); // 绘制矩形
}
if (MouseHit()) // 如果有鼠标消息
{
MOUSEMSG msg = GetMouseMsg(); // 获取鼠标消息
if (msg.uMsg == WM_LBUTTONDOWN) // 如果是鼠标左键按下
{
for (int i = 0; i < 5; i++) // 遍历矩形
{
if (msg.x >= x[i] - r && msg.x <= x[i] + r && msg.y >= y[i] - r && msg.y <= y[i] + r) // 如果鼠标在矩形内部
{
checked[i] = true; // 将矩形设为打勾状态
break; // 跳出循环
}
}
}
else if (msg.uMsg == WM_RBUTTONDOWN) // 如果是鼠标右键按下
{
for (int i = 0; i < 5; i++) // 遍历矩形
{
if (msg.x >= x[i] - r && msg.x <= x[i] + r && msg.y >= y[i] - r && msg.y <= y[i] + r) // 如果鼠标在矩形内部
{
checked[i] = false; // 将矩形设为非打勾状态
break; // 跳出循环
}
}
}
}
}
closegraph(); // 关闭绘图窗口
return 0;
}
```
代码解释:
1. `x` 和 `y` 数组分别存储五个矩形的中心点坐标,`r` 存储矩形半径,`checked` 数组记录五个矩形是否被打勾。
2. `while` 循环用于不断地绘制矩形和勾号,并处理鼠标事件。
3. `cleardevice()` 函数用于清空屏幕。
4. `for` 循环用于遍历五个矩形,绘制矩形和勾号。如果矩形被打勾,则绘制勾号。
5. `setlinecolor()` 函数用于设置画笔颜色。
6. `line()` 函数用于绘制勾号。
7. `rectangle()` 函数用于绘制矩形。
8. `MouseHit()` 函数用于判断是否有鼠标消息。
9. `GetMouseMsg()` 函数用于获取鼠标消息。
10. `msg.uMsg` 表示鼠标消息类型,`WM_LBUTTONDOWN` 表示鼠标左键按下,`WM_RBUTTONDOWN` 表示鼠标右键按下。
11. 如果鼠标在矩形内部,就将对应的矩形设为打勾状态或非打勾状态。
12. `break` 语句用于跳出循环,避免重复修改矩形状态。
13. `closegraph()` 函数用于关闭绘图窗口。
阅读全文