本帖最后由 zhanzr21 于 2022-12-11 13:39 编辑
#申请原创#
首先声明一下子, 赌博有害, 本人有亲身的惨痛教训, 选择做这个测试只是为了学习交流.
拿到开发板子后, 在官方例子的帮助下, 陆续搞清楚了板子上大多数外设的用法. 现在再写外设也没有多大必要. 于是利用LCD, 按键, LED, 蜂鸣器这些做了一个游戏厅水果机的小例子. 聊博一笑.这种应用, 本质上就是一个状态机. 我把他分为初始化,下氵主界面,告警界面,抽奖界面. 复杂度其实也不高,如果是产品的话,最主要是界面好看, 还有能让游戏厅老板可以控制中奖比率, 且不易为有心人作弊为最佳.因为是测试作品, 这几点上开发板子上都没法做到, 只是一个原型, 旨在技术交流之用.先看看状态机切换.
按键, LCD,蜂鸣器, LED这些外设都是参考官方例子,没啥好说的.LED一共有4个, 从上到下, 分别为2倍,5倍, 15倍, 0倍的选项. 当然只有前面三个可以下氵主.初始的余额为一个吉利数字: 188.
第一个按键是菜单键,在不同选项切换
第二个是下氵主键, 如果余额大于10,那么下氵主10,否则1. 满足虚拟贝者彳走心理.
第三个是开始键, 如果下氵主额不为0,就开始抽奖,否则告警.下完氵主后,会生成一个随机数字, 这个随机数决定了是否中奖. 这里要特别强调, 板子上的芯片无真随机数发生器, 所以产生的中奖结果是可以预测的. 事实上早期真实的水果机上, 大多数我估计也是没有真随机数发生器的. 但是只要序列周期够长, 没有多少人去攻击那个而已.中奖比率由自己随意设定:
本来是想把第四个按键设定为扌是王见的, 即Withdraw, 把赢得游戏币拿走, 但是这个按键与LCD的引脚冲突, 每次按键都会影响LCD显示, 影响整体使用体验,所以取消了.
单个项目上下氵主最高50, 余额最高额度999. 这些跟LCD显示长度有关, 但跟实际产品的限制差不多的.
因为只是一个简易演示Demo,没有增加音乐,闪烁等效果,但是这个板子资源很足, 比如在Flash中存放音乐,利用I2S或者蜂鸣器播放音乐, 是完全可行的.
代码结构上也没有应用RTOS,中断驱动之类, 只用了简易的定时器和状态机来驱动整个应用运行, 感兴趣的同学可以根据代码做出自己的改动.
主函数状态切换非常简单:
while (1) {
switch (g_state) {
case STATE_INIT:
g_state = STATE_BET;
break;
case STATE_BET:
state_bet_proc();
break;
case STATE_RUNNING:
state_running_proc();
break;
case STATE_WARNING:
state_warning_proc();
break;
具体代码请参见后面打包下载, 演示视频也在下面. 因为没有精雕细琢, 代码质量不是很高, 恳请高手们批评时留情.
|