C语言+EasyX库GUI编程之数字记忆游戏——音频播放和设置中心
yund56 2025-05-09 10:00 24 浏览
上一期《C语言GUI编程之数字记忆游戏——计时器、暂停和重置游戏》为游戏添加了计时器以及暂停、重置的逻辑,这一期继续让游戏的可玩性增强——为游戏添加背景音乐和提示音,并且提供设置中心的功能以供玩家可以选择音频的开关。
C语言里的音频播放
为了控制音频播放,增加了一个media.cpp媒体模块。
引用winmm.lib库
使用windows系统再带的“winmm.lib”库进行音频的播放控制。引用winmm.lib库有两种方式,第一种直接在模块最上方声明使用:
#pragma comment(lib, "winmm.lib")
第二种,在使用Visual Studio的情况下,打开项目->属性设置->连接器->输入,找到“附加依赖”项,编辑添加“winmm.lib”即可。
播放音频
播放音频就比较简单了,先把音频文件拷贝到项目目录里,这里创建了子目录media用来存放;然后用以下函数执行播放:
mciSendString(_T("open media\\bk_music1.mp3 alias bkmusic"), NULL, 0, NULL);
mciSendString(_T("play bkmusic repeat"), NULL, 0, NULL);
这里不做过多的解释,更多的使用方式可以去网上查阅资料。
短音频二次播放
这里说一下短音频二次播放的问题。
先看使用场景:玩家点击正确的数字格子,给出“游戏正确”的提示音,这个提示音的音频时间很短,大概1秒,第一次点击正确触发提示音没有任何问题,紧接着再次触发提示音后却不能播放了。
此时的解决方法是在播放短音频之前先关闭它,然后再接上常规的播放逻辑,如:
mciSendString(_T("close incorrect"), NULL, 0, NULL);
mciSendString(_T("open media\\tips_incorrect.mp3 alias incorrect"), NULL, 0, NULL);
mciSendString(_T("play incorrect"), NULL, 0, NULL);
设置中心
UI思路
用一张图片作为设置中心的图层,然后在上面绘制设置项。
注意,以设置中心为设备进行绘制的时候,坐标原点在设置中心区域的左上角,并不是窗口的左上角。
绘制完成后再使用SetWorkingImage()函数切换到窗口绘制模式,并用putimage()函数把设置中心的图层输出在窗口上。
动画
整个设置中心作为整体从窗口底部向上移入到窗口的中心位置,关闭时从原路移除,效果如下。
这个动画原理不复杂,点击右下角设置按钮的时候,触发下面的逻辑:
- 绘制设置中心,把文字、按钮都绘制到设置中心上去
- 循环把设置中心在窗口上的位置(Y轴)从大到小递减,一直到窗口中间
注意:循环体中要使用cleardevice()清除上一次的设备,否则会出现重叠。但是执行cleardevice()会使窗口变成黑框(原来的画面都清除了),所以在此之前先利用getimage()函数把整个窗口的“快照图像”保存下来记为window_image,在执行cleardevice()之后使用putimage(0,0,&window_image)即可完美呈现出想要的动画效果。
关闭并移除设置中心的时候,先要获取设置中心的快照图像,然后进行清除设备、画窗口快照、画设置中心快照这三步循环。
另外,还有一个逻辑:游戏正在进行中点击设置按钮时要暂停计时。
数据管理
设置的数据保存在一个二进制文件里。程序里定义一个全局变量保存设置项里的数据,在主函数里读取文件数据并赋给这个全局变量;当在设置中心修改后改变这个全局变量里的值,并且把新数据写入到文件里。
开关按钮动画
EasyX做UI界面的话有点不太合适,这里勉强做了一个开关按钮的动画。
简单说一下思路:开关底层是一个按钮,上层一半是按钮滑块,一半是开关的提示文字“ON/OFF”;点击切换状态的时候把上面的滑块往另一侧移动,循环这个移动的过程借助BeginBatchDraw()、FlushBatchDraw()、EndBatchDraw()即可实现开关动画。
为了使得开发方便,把设置开关按钮单独封装成一个函数,并且留一个滑块偏移量的参数,这样就可以通过逐渐改变偏移量来循环绘制并达到动画的效果。
点击区域的管理
在项目里要记录比较多的点击区域:
- 展示数字的格子
- 右侧的暂停/重置功能按钮
- 右下角的设置ICON
- 设置中心的开关、关闭按钮
其中,格子的坐标特别有规律,记录判断也很方便;而剩下的就不太方便了,项目里的处理方式是整理两个类型(功能按钮、设置相关的按钮)的按钮坐标数组作为全局变量,在绘制的时候把坐标依次记录下,然后再特定逻辑下去判断点击了哪个按钮,并且相应地去执行哪个函数。
感觉这种方式比较直接、简单粗暴,但是维护起来可能不太方便。后期可以专门定义一个结构体数据来存放点击区域,并加上相应的标记,这样可以使得点击事件的处理逻辑尽可能的统一,让代码的扩展性和维护性更强。
OK,这一期的内容分享就到这里了,目前游戏已经算得上“能玩”了,后面再把排行榜模块完善一下,再往后就做个项目总结、重构一下项目代码。
相关推荐
- SM小分队Girls on Top,女神战队少了f(x)?
-
这次由SM娱乐公司在冬季即将开演的smtown里,将公司的所有女团成员集结成了一个小分队project。第一位这是全面ACE的大姐成员权宝儿(BoA),出道二十年,在日本单人销量过千万,韩国国内200...
- 韩国女团 aespa 首场 VR 演唱会或暗示 Quest 3 将于 10 月推出
-
AmazeVR宣布将在十月份举办一场现场VR音乐会,观众将佩戴MetaQuest3进行体验。韩国女团aespa于2020年11月出道,此后在日本推出了三张金唱片,在韩国推出了...
- 韩网热议!女团aespa成员Giselle在长腿爱豆中真的是legend
-
身高163的Giselle,长腿傲人,身材比例绝了...
- 假唱而被骂爆的女团:IVE、NewJeans、aespa上榜
-
在韩国,其实K-pop偶像并不被认为是真正的歌手,因为偶像们必须兼备舞蹈能力、也经常透过对嘴来完成舞台。由于科技的日渐发达,也有许多网友会利用消音软体来验证K-pop偶像到底有没有开麦唱歌,导致假唱这...
- 新女团Aespa登时尚大片 四个少女四种style
-
来源:环球网
- 韩国女团aespa新歌MV曝光 画面梦幻造型超美
-
12月20日,韩国女团aespa翻唱曲《DreamsComeTrue》MV公开,视频中,她们的造型超美!WINTER背后长出一双梦幻般的翅膀。柳智敏笑容甜美。宁艺卓皮肤白皙。GISELLE五官精致...
- 女网友向拳头维权,自称是萨勒芬妮的原型?某韩国女团抄袭KDA
-
女英雄萨勒芬妮(Seraphine)是拳头在2020年推出的第五位新英雄,在还没有正式上线时就备受lsp玩家的关注,因为她实在是太可爱了。和其他新英雄不同的是,萨勒芬妮在没上线时就被拳头当成虚拟偶像来...
- 人气TOP女团是?INS粉丝数见分晓;TWICE成员为何在演唱会落泪?
-
现在的人气TOP女团是?INS粉丝数见分晓!现在爱豆和粉丝之间的交流方法变得多种多样,但是Instagram依然是主要的交流手段。很多粉丝根据粉丝数评价偶像的人气,拥有数百、数千万粉丝的组合作为全球偶...
- 韩国女团MVaespa Drama MV_韩国女团穿超短裙子跳舞
-
WelcometoDrama.Pleasefollow4ruleswhilewatchingtheDrama.·1)Lookbackimmediatelywhenyoufe...
- aespa师妹团今年将出道! SM职员亲口曝「新女团风格、人数」
-
记者刘宛欣/综合报导南韩造星工厂SM娱乐曾打造出东方神起、SUPERJUNIOR、少女时代、SHINee、EXO等传奇团体,近年推出的aespa、RIIZE更是双双成为新生代一线团体,深受大众与粉丝...
- 南韩最活跃的女团aespa,新专辑《Girls》即将发布,盘点昔日经典
-
女团aespa歌曲盘点,新专辑《Girls》即将发布,期待大火。明天也就是2022年的7月8号,aespa新专辑《Girls》即将发行。这是继首张专辑《Savage》之后,时隔19个月的第二张专辑,这...
- 章泽天女团aespa出席戛纳晚宴 宋康昊携新片亮相
-
搜狐娱乐讯(山今/文玄反影/图科明/视频)法国时间5月23日晚,女团aespa、宋康昊、章泽天等明星亮相戛纳晚宴。章泽天身姿优越。章泽天肩颈线优越。章泽天双臂纤细。章泽天仪态端正。女团aespa亮...
- Aespa舞台暴露身高比例,宁艺卓脸大,柳智敏有“TOP”相
-
作为SM公司最新女团aespa,初舞台《BlackMamba》公开,在初舞台里,看得出来SM公司是下了大功夫的,虽然之前SM公司新出的女团都有很长的先导片,但是aespa显然是有“特殊待遇”。运用了...
- AESPA女团成员柳智敏karina大美女
-
真队内速度最快最火达成队内首个且唯一两百万点赞五代男女团中输断层第一(图转自微博)...
- 对来学校演出的女团成员语言性骚扰?韩国这所男高的学生恶心透了
-
哕了……本月4日,景福男子高中相关人士称已经找到了在SNS中上传对aespa成员进行性骚扰文章的学生,并开始着手调查。2日,SM娱乐创始人李秀满的母校——景福高中迎来了建校101周年庆典活动。当天,S...
- 一周热门
- 最近发表
-
- SM小分队Girls on Top,女神战队少了f(x)?
- 韩国女团 aespa 首场 VR 演唱会或暗示 Quest 3 将于 10 月推出
- 韩网热议!女团aespa成员Giselle在长腿爱豆中真的是legend
- 假唱而被骂爆的女团:IVE、NewJeans、aespa上榜
- 新女团Aespa登时尚大片 四个少女四种style
- 韩国女团aespa新歌MV曝光 画面梦幻造型超美
- 女网友向拳头维权,自称是萨勒芬妮的原型?某韩国女团抄袭KDA
- 人气TOP女团是?INS粉丝数见分晓;TWICE成员为何在演唱会落泪?
- 韩国女团MVaespa Drama MV_韩国女团穿超短裙子跳舞
- aespa师妹团今年将出道! SM职员亲口曝「新女团风格、人数」
- 标签列表
-
- filter函数js (37)
- filter函数excel用不了 (73)
- 商城开发 (40)
- 影视网站免费源码最新版 (57)
- 影视资源api接口 (46)
- 网站留言板代码大全 (56)
- java版软件下载 (52)
- java教材电子课本下载 (48)
- 0基础编程从什么开始学 (50)
- java是用来干嘛的 (51)
- it入门应该学什么 (55)
- java线上课程 (55)
- 学java的软件叫什么软件 (38)
- 程序开发软件有哪些 (53)
- 软件培训 (59)
- 机器人编程代码大全 (50)
- 少儿编程教程免费 (45)
- 新代系统编程教学 (61)
- 共创世界编程网站 (38)
- 亲测源码 (36)
- 三角函数积分公式表 (35)
- 函数的表示方法 (34)
- 表格乘法的公式怎么设置 (34)
- sumif函数的例子 (34)
- 图片素材 (36)
