关于easyx我想画一个图形 然后我想删除它 怎么变为原来的模样

学习小白 最近在做用easyx和VC6.0 做一个简单的五子棋游戏,但遇到了些问题,在悔棋的时候,我下过了的棋子怎么去除?求各位大神解答。``

好的,以下是一个基于 EasyX 图形库的扫描线填充算法的示例代码: ```c++ #include <graphics.h> #include <vector> #include <algorithm> using namespace std; struct Edge { int yMax; // 边的最大纵坐标 float x; // 边在当前扫描线上的横坐标 float k; // 边的斜率 bool operator<(const Edge& e) const { return x < e.x; } // 用于排序的比较函数 }; void scanlineFill(vector<Edge>& edges) { int yMin = edges[0].yMax; // 找到最小的纵坐标 int yMax = edges[0].yMax; // 找到最大的纵坐标 for (const auto& e : edges) { if (e.yMax < yMin) yMin = e.yMax; if (e.yMax > yMax) yMax = e.yMax; } vector<Edge> activeEdges; for (int y = yMin; y <= yMax; y++) { // 将所有 yMax 等于当前扫描线的边加入活性边表 for (auto it = edges.begin(); it != edges.end();) { if (it->yMax == y) { activeEdges.push_back(*it); it = edges.erase(it); } else { it++; } } // 按照边的横坐标排序 sort(activeEdges.begin(), activeEdges.end()); // 两两成对地填充扫描线上的像素 for (size_t i = 0; i < activeEdges.size(); i += 2) { int x1 = int(activeEdges[i].x + 0.5); int x2 = int(activeEdges[i + 1].x + 0.5); for (int x = x1; x <= x2; x++) { putpixel(x, y, WHITE); } } // 更新所有活性边的横坐标 for (auto& e : activeEdges) { e.x += e.k; } // 将所有 yMax 小于当前扫描线的边从活性边表中删除 for (auto it = activeEdges.begin(); it != activeEdges.end();) { if (it->yMax <= y) { it = activeEdges.erase(it); } else { it++; } } } } int main() { initgraph(640, 480); setbkcolor(BLACK); cleardevice(); vector<Edge> edges; edges.push_back(Edge{ 100, 200, -0.5f }); // 添加一条边,yMax=100, x=200, k=-0.5 scanlineFill(edges); // 执行扫描线填充算法 getch(); closegraph(); return 0; } ``` 在这个示例代码中,我们定义了一个 `Edge` 结构体,用于存储边的信息。然后,我们实现了一个 `scanlineFill` 函数,用于执行扫描线填充算法。该函数接收一个 `vector<Edge>` 类型的参数,表示多边形的边集合。该函数首先找到多边形的最小纵坐标和最大纵坐标,然后从最小纵坐标开始遍历所有扫描线。在每个扫描线上,我们将所有 yMax 等于当前扫描线的边加入活性边表,并按照边的横坐标排序。然后,我们两两成对地填充扫描线上的像素,并更新所有活性边的横坐标。最后,我们将所有 yMax 小于当前扫描线的边从活性边表中删除。 在主函数中,我们定义了一个 `vector<Edge>` 类型的变量 `edges`,添加了一条边,并执行了扫描线填充算法。在填充过程中,我们使用了 `putpixel` 函数来绘制像素。 需要注意的是,这个示例代码中只包含了一个边,实际上你需要将多边形的所有边添加到 `edges` 变量中,并按照顺序连接起来,才能得到完整的多边形。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值