返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现刮刮乐效果是示例代码
  • 909
分享到

C语言实现刮刮乐效果是示例代码

C语言实现刮刮乐C语言刮刮乐 2023-01-11 09:01:30 909人浏览 八月长安
摘要

目录程序简介程序执行效果完整源代码程序简介 这个程序模拟了刮刮乐的刮卡操作,按下鼠标左键并移动可以刮开刮卡层。 刮卡操作是通过掩码图实现的,一张隐藏的待刮开背景图,一张掩码图。 刮卡

程序简介

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

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

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

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

首先,背景图就是普通的 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);            // 将背景图合并到覆盖层中
}

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

程序执行效果

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

完整源代码

 
//
// 程序名称:C语言刮刮乐(掩码图的范例)
// 编译环境: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语言刮刮乐内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言实现刮刮乐效果是示例代码

本文链接: https://lsjlt.com/news/177341.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言实现刮刮乐效果是示例代码
    目录程序简介程序执行效果完整源代码程序简介 这个程序模拟了刮刮乐的刮卡操作,按下鼠标左键并移动可以刮开刮卡层。 刮卡操作是通过掩码图实现的,一张隐藏的待刮开背景图,一张掩码图。 刮卡...
    99+
    2023-01-11
    C语言实现刮刮乐 C语言刮刮乐
  • Android刮刮卡效果实现代码
    本文实例为大家分享了Android刮刮卡效果,供大家参考,具体内容如下 android实现底层一张图片,上层一个遮罩层,触摸滑动按手指滑动路径实现去除遮罩效果,类似于抽奖的刮...
    99+
    2022-06-06
    Android
  • Android实现刮刮乐示例分析
    微信公众号有很多都做刮刮乐的活动,本文就实现了刮刮乐的效果,具体代码如下: 首先要做一个类似橡皮擦的东西吧,然后才能把纸上的笔迹擦除   public c...
    99+
    2022-06-06
    示例 Android
  • JS如何实现网页刮刮乐效果
    小编给大家分享一下JS如何实现网页刮刮乐效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果如下盖伦.jpg刮刮乐.gifHT...
    99+
    2024-04-02
  • 基于Android自定义控件实现刮刮乐效果
     只是简单的实现了效果,界面没怎么做优化,不过那都是次要的啦!!相信大家都迫不及待的想看效果图了吧, 其中主要的彩票视图类和橡皮擦类都是通过代码的方式构建视图,布局...
    99+
    2022-06-06
    Android
  • Android通过自定义view实现刮刮乐效果详解
    目录前言实现原理关键步骤创建bitmap绘制文字画路径完整代码前言 已经有两个月没有更新博客了,其实这篇文章我早在两个月前就写好了,一直保存在草稿箱里没有发布出来。原因是有一些原理性...
    99+
    2024-04-02
  • Android App中实现简单的刮刮卡抽奖效果的实例详解
    主要思想: 将一个view设计成多层:背景层,含中奖信息等; 遮盖层,用于刮奖,使用关联一个Bitmap的Canvas 在该Bitmap上,使用它的canvas.drawPat...
    99+
    2022-06-06
    刮刮卡 app Android
  • C语言实现音乐播放器的示例代码
    目录介绍实现代码介绍 该程序是一个小的DEMO,实现了以下几个功能,可以借鉴学习。 功能1:鼠标选择互动功能。通过鼠标的移动和按下,按钮的颜色也会发生改变。 功能2:音乐的播放与暂停...
    99+
    2023-02-26
    C语言实现音乐播放器 C语言音乐播放器 C语言音乐播放
  • C语言实现代码雨效果
    本文实例为大家分享了C语言实现代码雨效果的具体代码,供大家参考,具体内容如下 一、项目描述和最终的效果展示 项目:   让字符从上到下依次的下落,呈现出代码雨。 最终效果图...
    99+
    2024-04-02
  • android实现音乐跳动效果的示例代码
    效果图 实现 整体的流程图如下 上面主要步骤分为3个 1、计算宽度能放下多少列的音频块。 2、计算每一列中音频块的个数 3、绘制音频块 1、计算宽度能放下多少列的音频块。 ...
    99+
    2024-04-02
  • C语言实现栈的示例代码
    目录一、了解栈的结构特点二、具体实现补充 栈的用处一、了解栈的结构特点 栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出。 压栈:栈的插入操作叫做进栈/压...
    99+
    2024-04-02
  • C#实现跑马灯效果的示例代码
    目录文章描述开发环境开发工具实现代码实现效果文章描述 跑马灯效果,功能效果大家应该都知道,就是当我们的文字过长,整个页面放不下的时候(一般用于公告等),可以让它自动实现来回滚动,以让...
    99+
    2022-11-13
    C#实现跑马灯效果 C# 跑马灯
  • C语言模拟实现memmove的示例代码
    目录前言例子memmove的模拟实现具体实现步骤总结前言 上一篇我们介绍了memcpy和strcpy的区别,以及memcpy模拟实现,但这两个库函数都有一个缺点,那就是不能自己复制自...
    99+
    2022-12-29
    C语言实现memmove C语言 memmove
  • C语言实现大顶堆的示例代码
    目录堆的实现1.堆结构2.堆的种类3.大顶堆代码实现堆的实现 1.堆结构 逻辑结构上类似于 一棵 “树” 2.堆的种类 大顶堆结构: 一种特殊的树:其每个...
    99+
    2024-04-02
  • C语言实现通讯录的示例代码
    目录一、Contact.h文件二、Contact.c文件三、test.c文件一、Contact.h文件 包含函数的声明 #pragma once #define _CRT_SECUR...
    99+
    2022-11-13
    C语言实现通讯录 C语言 通讯录
  • C语言实现动态链表的示例代码
    目录结构体定义已经函数声明函数实现创建一个链表判断链表是否为空获得链表中节点的个数在某个特定的位置插入一个元素获得指定下标的节点的元素删除一个节点链表逆序链表的清空链表的销毁链表的遍...
    99+
    2024-04-02
  • C语言实现数独程序的示例代码
    目录程序截图简单说明代码实现程序截图 简单说明 随机生成数独的算法见力扣上对应题目的题解,我用的是递归回溯法 力扣原题 先随机放入 11 个数就能生成一个数独然后求数独的解最后...
    99+
    2023-03-03
    C语言实现数独游戏 C语言数独程序 C语言数独
  • C语言模拟实现密码输入的示例代码
    目录引言思路分析代码实现代码分析引言 登录账号时我们要输入密码,密码输入错误时会提示密码错误。有时密码的输入次数会被限制,例如银行卡,当我们3次密码都输入错误时卡会被冻结。下面用C语...
    99+
    2024-04-02
  • C语言实现消消乐游戏的代码分享
    C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。 本章我们将编写十字消除游戏,用户点击空白方块,沿其上下左右方向寻找第一个彩色方块,如果有两个或两个以...
    99+
    2023-02-15
    C语言实现消消乐游戏 C语言消消乐游戏 C语言消消乐 C语言 游戏
  • Python实现屏幕代码雨效果的示例代码
    直接上代码 import pygame import random def main(): # 初始化pygame pygame.init() #...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作