程序简介

这个程序模拟了刮刮乐的刮卡操作,按下鼠标左键并移动可以刮开刮卡层。

刮卡操作是通过掩码图实现的,一张隐藏的待刮开背景图,一张掩码图。

刮卡的时候,是在黑色的掩码图上画线,显示的时候,通过掩码图将背景图显示出来。

程序效果展示和完整源码都在后面~

现在具体说一下显示方式:

先贴完整的三元光栅操作码:EasyX 文档 - 三元光栅操作

首先,背景图就是普通的 IMAGE 对象,不做任何处理。

其次,掩码图中,未刮开区域对应的是黑色,已刮开区域对应的是白色。

显示的步骤:

1. 将背景图中未刮开的区域置为黑色:

操作目标(D):背景图

操作源(S):掩码图

操作:背景图 AND 掩码图

⇒ 操作目标 AND 操作源 ⇒ D a S ⇒ DSa(后缀表达式),可以在三元光栅操作码中找到 DSa 对应的操作码是 008800C6(SRCAND)。

2. 将覆盖层中已刮开的区域置为黑色:

操作目标(D):覆盖层

   操作源(S):掩码图

 操作:覆盖层 AND (NOT 掩码图)

⇒ 操作目标 AND (NOT 操作源) ⇒ D a (n S) ⇒ DSna(后缀表达式),可以在三元光栅操作码中找到 DSna 对应的操作码是 00220326。

3. 将背景图合并到覆盖层中,就是将前两步的 IMAGE 图像进行 OR 操作合并:

操作目标(D):覆盖层

操作源(S):背景图

操作:覆盖层 OR 背景图

⇒ 操作目标 OR 操作源 ⇒ D o S ⇒ DSo(后缀表达式),可以在三元光栅操作码中找到 DSo 对应的操作码是 00EE0086(SRCPAINT)。

———————————————————

以上步骤,就是显示刮卡效果的函数的原理:

// 显示刮卡效果void Show(){IMAGE tmp = imgContent;SetWorkingImage(&tmp);putimage(0, 0, &imgMask, SRCAND); // 将背景图中未刮开的区域置为黑色SetWorkingImage();putimage(offsetx, offsety, &imgMask, 0x00220326); // 将覆盖层中已刮开的区域置为黑色putimage(offsetx, offsety, &tmp, SRCPAINT); // 将背景图合并到覆盖层中}

同时,该程序还使用了用图像填充区域的技术,以及输出字符符号的技术。

程序执行效果

友情提示:更换一下刮奖区的文字,可能是一件有趣的事情。

完整源代码

// 程序名称:刮刮乐(掩码图的范例)// 编译环境:Visual C++ 6.0 ~ 2019,EasyX_20220116#include <graphics.h>const int offsetx = 170; // 刮奖区的偏移 x 坐标const int offsety = 260; // 刮奖区的偏移 y 坐标IMAGE imgContent(300, 100); // 刮开后的内容IMAGE imgMask(300, 100); // 已刮部分的掩码层// 绘制刮刮卡void DrawCard(){// 白色背景setbkcolor(0xf0f0f0);cleardevice();// 设置刮刮卡填充单元IMAGE unit(32, 32);SetWorkingImage(&unit); // 设置绘图设备为 unit 对象setbkcolor(0x1a3bf0); // 设置背景色cleardevice();settextstyle(20, 0, _T("Webdings"), 0, 0, 400, false, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH); // 设置图标字体settextcolor(0x152fe5);outtextxy(0, 16, 0x59); // 输出两个心outtextxy(16, 0, 0x59);settextcolor(0x284ff5);outtextxy(0, 0, 0x73); // 输出两个问号outtextxy(16, 16, 0x73);SetWorkingImage();// 用 IMAGE 对象填充矩形区域setfillstyle(BS_DIBPATTERN, NULL, &unit); // 设置填充模式solidrectangle(150, 30, 490, 450); // 画填充矩形TCHAR s[] = _T("刮刮乐");settextstyle(80, 0, _T("黑体"), 0, 0, 400, false, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH);setbkmode(TRANSPARENT);settextcolor(0x034089);outtextxy(offsetx + (300 - textwidth(s)) / 2 + 5, 105, s);settextcolor(0x10c2fe);outtextxy(offsetx + (300 - textwidth(s)) / 2, 100, s);// 设置覆盖层填充单元IMAGE unit2(80, 50);SetWorkingImage(&unit2); // 设置绘图设备为 unit 对象setbkcolor(LIGHTGRAY);cleardevice();settextstyle(20, 0, _T("黑体"), 150, 150, 400, false, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH);settextcolor(0x606060);outtextxy(10, 20, _T("刮奖区"));SetWorkingImage();// 用 IMAGE 对象填充矩形区域setfillstyle(BS_DIBPATTERN, NULL, &unit2); // 设置填充模式solidrectangle(offsetx, offsety, offsetx + 300, offsety + 100); // 画填充矩形}// 初始化刮奖区内容void InitContent(){// 绘制刮奖区内容SetWorkingImage(&imgContent);setbkcolor(0x05d5ff);cleardevice();settextcolor(0x0024b8);TCHAR s1[] = _T("EasyX");TCHAR s2[] = _T("点亮你的创造力");settextstyle(40, 0, _T("黑体"), 0, 0, 900, false, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH);outtextxy((300 - textwidth(s1)) / 2, 10, s1);outtextxy((300 - textwidth(s2)) / 2, 50, s2);// 绘制刮卡的掩码图SetWorkingImage(&imgMask);setbkcolor(BLACK);cleardevice();setlinestyle(PS_SOLID, 10); // 设置刮卡操作的粗细SetWorkingImage();}// 实现刮卡操作void Scrape(int x1, int y1, int x2, int y2){SetWorkingImage(&imgMask);line(x1, y1, x2, y2);}// 显示刮卡效果void Show(){IMAGE tmp = imgContent;SetWorkingImage(&tmp);putimage(0, 0, &imgMask, SRCAND); // 将背景图中未刮开的区域置为黑色SetWorkingImage();putimage(offsetx, offsety, &imgMask, 0x00220326); // 将覆盖层中已刮开的区域置为黑色putimage(offsetx, offsety, &tmp, SRCPAINT); // 将背景图合并到覆盖层中}// 主函数int main(){initgraph(640, 480); // 初始化图形窗口DrawCard(); // 绘制刮刮乐卡片InitContent(); // 初始化刮奖区内容// 获取鼠标消息,实现刮卡操作ExMessage msg;int x, y, oldx, oldy;bool scrape = false;while(true){msg = getmessage(EM_MOUSE);switch(msg.message){case WM_LBUTTONDOWN:scrape = true;x = oldx = msg.x - offsetx;y = oldy = msg.y - offsety;Scrape(oldx, oldy, x, y);break;case WM_LBUTTONUP:scrape = false;break;case WM_MOUSEMOVE:if (scrape){oldx = x;oldy = y;x = msg.x - offsetx;y = msg.y - offsety;Scrape(oldx, oldy, x, y);}break;}// 显示当前结果Show();}return 0;}

——————————————

因为C/C++很难,所以C/C++人才严重稀缺,这也是为什么C/C++软件工程师的薪资水平持续递增的原因。

不管你是转行也好,初学也罢,进阶也可,如果你想学编程~

【值得关注】我的 编程学习交流俱乐部【点击进入】

C/C++实现刮刮乐-刮奖区,刮出一套房相关推荐

  1. Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...

  2. 刮分10万奖金池,FinClip 小程序插件开发大赛有的搞

    一.大赛介绍 小程序无疑是近几年发展最快速的技术之一!短短数年间,从无人问津到各大互联网巨头纷纷入局,成为继手机支付后,中国的移动互联网领先世界的第二个代表技术!中国的技术标准.开发者生态,已然得到大 ...

  3. Unity 实战项目 ☀️| 只用一个脚本做一个 刮刮乐 案例,一不小心刮出来一个女朋友!【学习娱乐一下】

  4. 微信刮刮卡php,微信小程序刮刮卡的实现

    如何实现刮刮卡的效果呢? 思路是: 1.先将中奖的图片或者文字位置和大小确定 2.开始画canvas,将位置和大小跟之前中奖的文案的位置保持一致. 3.在canvas上覆盖一层灰色的蒙层,作出刮刮卡未 ...

  5. 使用webview实现刮刮卡效果,模拟器有刮卡效果,真机无效果

    主要代码: @JavascriptInterfacepublic void clickOnAndroid() {System.out.println("onclick");if ( ...

  6. 马化腾发起的科学探索奖首次颁出,50名中国大陆青年学者获奖,每人获300万资助...

    雷刚 发自 凹非寺  量子位 报道 | 公众号 QbitAI 关注基础科研马化腾,去年主导发起的"科学探索奖",现在颁出第一届. 50位青年科学家经过层层筛选,成为首届获奖者. 研 ...

  7. 重磅:2020年度国家科技奖初评结果出炉!

    今天,国家科学技术奖励工作办公室正式公布了2020年度国家科学技术奖的初评结果. >>>> 本年度初评通过46项国家自然科学奖项目.47项国家技术发明奖通用项目.133项国家科 ...

  8. 重磅!2020年国家科技奖受理项目出炉,含钟南山院士团队项目!

    3月24日,国家科学技术奖励工作办公室公示了2020年度国家科学技术奖的受理项目名单. 据悉,今年国家奖励办共收到国家自然科学奖项目333项,国家技术发明奖项目333项(通用项目266项,专用项目67 ...

  9. 谷歌18年博士生奖研金出炉,八位入选华人学生均毕业于国内高校

    2018 年的 Google PhD Fellowship(北美.欧洲.中东地区)日前评选名单出炉,共有 39 名博士生入选,其中 8 位华人. >>>> Google 博士研 ...

  10. 再获2亿元A+轮融资,乐生智能能否“扫出”舒适区?

    "懒人经济"吹起的一阵风,为扫地机器人行业的兴起带来了东风. 在这个"躺平"的时代,在辛苦一天下班挤着公交地铁回家后,谁还愿意把一天里最美好的小时光耗费在扫地拖 ...

最新文章

  1. 两个组件连线_如何正确的使用日志组件 Log4j、SLF4J、Logback
  2. php mvc cms企业站,Phpcms V9程序目录结构及MVC简析
  3. word 2013 标题设置多级列表
  4. Java 轻量级锁原理详解(Lightweight Locking)
  5. 2019 牛客多校第9场 B Quadratic equation(二次剩余)
  6. 10张精美可视化大屏模板分享,加极简制作攻略!抓紧收藏
  7. 《构建高性能Web站点》观后感
  8. GIGABYTE技嘉主板内存手动超频教程
  9. OpenWRT设置SmartDNS+ADGuardHome
  10. 网络域名之一级域名与二级域名
  11. 注册github邮箱验证收不到邮件问题
  12. 什么是技术债,为什么要还技术债?
  13. 嚼一嚼 class 文件结构
  14. linux光盘读取不良,程序员偷偷深爱的9个不良编程习惯
  15. 关于hxxp //www hj234 com的问题
  16. 最新的工资薪金所得适用税率表(工资薪金所得适用)
  17. 戴尔电脑遇到问题,运行SupportAssist.更新后大部分问题可以解决。
  18. php.450 pr,pr界面介绍有哪些
  19. 第三方支付平台BeeCloud
  20. 全球顶尖大学已将加密货币加入其课程

热门文章

  1. 跨境公路货运调研分析-市场规模、市场份额、市场定位、产品类型以及发展规划
  2. 【思维模型】拥抱复杂性(第 1 部分)
  3. 麻吉宝创世内测开启,阿里区块链邀请码AP751K
  4. Python百度文库爬虫之doc文件
  5. python[爬虫]爬取百万条新浪新闻 新浪滚动新闻中心(多进程)
  6. 中国LVDT RVDT传感器市场现状研究分析与发展前景预测报告(2022)
  7. RPL基础知识点与组网过程
  8. 关于瑞星杀毒软件无法完全卸载、自动重装的无奈,与相应的解决办法
  9. 类似qvod的流媒体点播服务器架设建议
  10. 王者荣耀服务器维护什么时间结束,3月26日全服不停机更新公告