完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1 个讨论
|
|
2-案例演示-语音版打地鼠
1-游戏玩法: 1-上个机关启动之后,所有的指示灯闪烁3次,开始播放循环播放北京音效,该游戏启动。 2-此时,随机播放一首音效(1-5首其中一个),并且对应的灯箱亮起, 如果,如果在3秒内按下对应的地鼠按键,灯箱熄灭,连续击中N(可以设置)次之后,所有地鼠快速闪烁5次,播放成功音效,电磁锁打开。 3-如果在规定时间内,没有击中对应的地鼠,或者击错地鼠,游戏失败,播放错误音效,需要从头开始。 2-视频演示: 3-程序源码: #include "user_file.h" /********************************************************************************** +---------------------------------------------------------+ 用户函数部分(user_file.h里面有详细使用介绍) +---------------------------------------------------------+ - 目前进展: - 日期 :2018-09-08 - 作者 :意想意创. - 硬件环境:意想意创-A0001-2.6代黑色盒子-音乐模块。 - 软件版本号:V1.0 - 技术论坛:XXXXXXX - 备注 :本示例在 TKStudio 开发环境下,用2.6代-音乐模块调试OK。 - Copyright(C):青岛意想意创技术发展有限公司。 - All rights reserved **********************************************************************************/ MODU_Game_Tim Game_Tim={//游戏计时变量 0,0,0 }; uchar Game_Right_Num=0; //游戏成功的次数标记 uchar Game_isGo=0; //游戏流程标记 /*============================== 功能:这是一个串口接受函数,接受到的数据都在buf中配合S(uchar *buf,uchar len)使用 参数:发送的数据和数据长度; 返回:无; ===============================*/ void UART_ReceiveBuffer(uchar *buf,uchar len) { /*下面这个历程,接受到什么数据,在转发出去的功能*/ UART1_SendBuffer(buf,len); } /*============================== 功能://这是一个1毫秒的中断函数; 参数:无; 返回:无; ===============================*/ void PF_Tim0_1msIT(void) { Game_ADD_Tim(); return ; } /*************************************** 功能:游戏启动函数; 参数:无; 返回:成功1,失败0; ***************************************/ uchar Game_Star(void)//游戏启动函数 { uchar i=0; for(i=0;i<3;i++){ //游戏启动之后,所有灯箱闪烁三次 OutSet(0xFF,ENABLE); delay_ms(500); OutSet(0xFF,DISABLE); delay_ms(500); } return 1; } /*************************************** 功能:游戏随机播放音效函数; 参数:无; 返回:返回随机的音乐编号; ***************************************/ uchar Game_Rand_Music(void)//音乐随机播放音效函数 { uchar Value=0; while(1){ Value=rand()%6; //随机数值应该比实际需要的数值大1 if(Value!=NO){ Music_Play(Value); //播放对应的音效 return Value; } } } /*************************************** 功能:游戏按键值比对函数; 参数:无; 返回:成功返回1,失败返回2; ***************************************/ uchar Game_Key_ComPare(uchar Value) //游戏按键比对函数; { uchar i=0; static uchar Key_Index[5]={0,0,0,0,0}; for(i=1;i<=5;i++){ //扫描5个地鼠按键 if((Read_Input(i)==1) && (Key_Index[i-1]==NO)){ //如果有按键按下 Key_Index[i-1]=YES; if(i==Value){ return 1; } else{ return 2; } } else if((Read_Input(i)==0) && (Key_Index[i-1]==YES)){ Key_Index[i-1]=NO; } } return 0; } /*************************************** 功能:地鼠在线定时器函数; 参数:无; 返回:无; ***************************************/ uchar Game_ADD_Tim(void)//游戏计时函数; { if(Game_Tim.Star==YES){ if(++Game_Tim.Sec>=1000){ Game_Tim.Sec=NO; if(++Game_Tim.Cnt>=GAME_TIME){ Game_Tim.Star=second;Game_Tim.Cnt=Game_Tim.Sec=NO; //GAME_TIME秒计时函数 } } } return 1; } /*************************************** 功能:游戏流程执行函数; 参数:无; 返回:成功返回1,失败返回2; ***************************************/ uchar Game_result(void)//游戏效果执行函数 { static uchar Index=0; static uchar Music_Num=0; uchar Sta=0; if(Index==NO){ Music_Num=Game_Rand_Music(); //随机播放一首音效 OutSet(Music_Num,ENABLE); //打开对用的灯箱 Game_Tim.Star=YES;Game_Tim.Sec=Game_Tim.Cnt=NO; //打开按键定时器函数 Index=YES; } else if(Index==YES){ Sta=Game_Key_ComPare(Music_Num); //按键值和随机的音效值进行比较 if(Sta==YES){ //表示此次按键按对 Game_Tim.Star=Game_Tim.Cnt=Game_Tim.Sec=NO; Index=NO; return 1; } else if(Sta==second){ //表示是此次按键按错 Index=NO; Game_Tim.Star=Game_Tim.Cnt=Game_Tim.Sec=NO; return 2; } } if(Game_Tim.Star==second){ Game_Tim.Star=Game_Tim.Cnt=Game_Tim.Sec=NO; Index=NO;return 2; } return 0; } /*************************************** 功能:游戏正确效果执行函数; 参数:无; 返回:成功1次返回1,全部成功返回2,; ***************************************/ uchar Game_Right(void)//游戏正确结果执行函数 { uchar i=0; Game_Right_Num++; /*======游戏过关效果=======*/ if(Game_Right_Num>=GAME_TURE_NUM){ //游戏过关之后 Music_Play(6); //游戏过关之后,播放成功音效,并且让所有的地鼠闪烁5次 LockSet(POWEROPEN); //打开电磁锁 for(i=0;i<5;i++){ OutSet(0xFF,ENABLE); delay_ms(300); OutSet(0xFF,DISABLE); delay_ms(300); } return 2; } /*=======击中一次地鼠效果=======*/ OutSet(0xFF,DISABLE); //关闭正确的灯箱 return 1; } /*************************************** 功能:游戏错误执行函数; 参数:无; 返回:执行完毕返回1,失败返回0; ***************************************/ uchar Game_Wrong(void)//游戏错误效果执行函数 { static uchar Index=0; Game_Right_Num=NO; //清空地鼠的连击次数 OutSet(0xFF,DISABLE); //所有灯箱的灯熄灭 if(Index==NO){ Music_Play(7); //播放错误的地鼠音效 Index=YES; } else if((Index==YES) && (Music_Read_FeedBack()==1)){ //等待错误的效果执行完毕 Index=NO; return 1; } return 0; } /*************************************** 功能:这是一个执行一次的任务; 参数:无; 返回:无; ***************************************/ void Master_Setup() { Game_Star(); //游戏启动函数 } /************************************** 功能:这是一个循环函数; 参数:无; 返回:无; PS:1-上个机关启动之后,所有的指示灯闪烁3次,开始播放循环播放北京音效,该游戏启动。 2-此时,随机播放一首音效(1-5首其中一个),并且对应的灯箱亮起, 如果,如果在3秒内按下对应的地鼠按键,灯箱熄灭,连续击中N(可以设置)次之后,所有地鼠快速闪烁5次,播放成功音效,电磁锁打开。 3-如果在规定时间内,没有击中对应的地鼠,或者击错地鼠,游戏失败,播放错误音效,需要从头开始。 **************************************/ void Master_Loop() { uchar Sta=0; switch (Game_isGo) { case 0: Game_isGo=Game_result(); //游戏结果函数 break; case 1: Sta=Game_Right(); if(Sta==YES){ Game_isGo=NO; } else if(Sta==second){ Game_isGo=3; } break; case 2: if(Game_Wrong())Game_isGo=NO; break; default: break; } } |
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11765 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 08:54 , Processed in 0.648091 second(s), Total 43, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号