汤果 发表于 2021-1-16 08:20:09

简易老虎.机

## 【项目来源】

世界上第一台商业老虎.机诞生于 1895 年,它是一种用零钱赌.博的机器,在酒吧、游戏厅,甚至一些零售店里都能见到它的身影。然而赌.博诸多害处我们并不提倡,但通过智慧的头脑和灵巧的双手 DIY 一台老虎.机倒是一个不错的主意。寒假在即,过年也离我们不远了。快做一台和小伙伴一起玩儿吧,让你们的聚会活动更有趣~



## 【效果演示】

https://v.qq.com/x/page/s3221jd1qik.html

## 【项目分析】

经典老虎.机有三个滚动轮,每个轮上会滚动出现一系列数字或图案。当滚轮停止时,三个数字或图案一致则获胜。

DIY 的时候需要考虑图案的呈现方式。机械装置做起来比较麻烦,我们可以用屏幕来显示不同的数字或图案。考虑到展示效果及趣味性,屏幕越大越好。而徽章板刚好满足这一条件,屏幕大,显示效果好。另外徽章板本身就是一个主控器,通过编写代码就能实现一些简单的功能。

![](https://makelogimg.dfrobot.com.c ... imageView2/2/w/1600)
老虎.机的核心功能就是显示不同的图案。为了方便起见,我们选择显示数字。我们做一个显示三位数字的简易老虎.机。整体的流程如下:

1.通过按键触发老虎.机,开始滚动显示数字。

2.在屏幕左中右分别显示一个 0 到 9 之间的随机数。

3.若干时间后停止滚动,显示最终呈现的数字。

4.比较停留下来的三个数字是否一致,判断输赢。

## 材料清单

| 数量 | 器材 | 地址 |
| -------- | -------- | -------- |
| 1x   | 徽章板   | [链接](https://item.taobao.com/item.htm ... cfm&id=599778117853)   |
|1x|数字触摸开关|[链接](https://www.dfrobot.com.cn/goods-91.html)|
### 步骤1 器材连接
通过分析,我们需要用到一个按键开关。不过我不喜欢按键的机械声,就选择了数字触摸开关。将徽章板插到扩展板上,然后将数字触摸开关接到扩展板的 D0 接口即可。

![](https://makelogimg.dfrobot.com.c ... imageView2/2/w/1600)
### 步骤2 编写代码
打开 http://haohaodada.com/hz 或者好搭 Block 软件编写代码如下:

![](https://makelogimg.dfrobot.com.c ... imageView2/2/w/1600)
因为最后要进行输赢判定,所以程序中创建了三个整型变量存放每个数字。考虑到游戏难度较大,可以修改数字的范围降低难度。如这里就把随机数范围改为。

### 步骤3 调试运行
将编写好的代码上传到徽章板,取下数据线,打开徽章板电源。按键测试老虎.机功能是否正常。




依据实际效果修改停顿的时间间隔,优化用户体验。

## 代码

```
#include "Haoda.h"
#include "Arduino.h"
#include "Wire.h"
#include "Servo.h"

int my_1;
int my_2;
int my_3;
uint16_t displaycache;

void setup()
{
my_1 = 0;
my_2 = 0;
my_3 = 0;
BadgeDisplay_Init();
BadgeDisplay_Clear_Screen();
BadgeDisplay_Clear_Screen();
pinMode(6,INPUT);
}

void loop()
{
BadgeDisplay_hzs("按键开始",0);
if(digitalRead(6)){
    BadgeDisplay_Clear_Screen();
    for(int i=0;i<int(random(5, 20+1));i++){
      my_1 = random(1, 3+1);
      my_2 = random(1, 3+1);
      my_3 = random(1, 3+1);
      BadgeDisplay_printText(displaycache,String(my_1),10);
      BadgeDisplay_printText(displaycache,String(my_2),20);
      BadgeDisplay_printText(displaycache,String(my_3),30);
      BadgeDisplay_Display_buf(displaycache,40,0.2);
      delay(200);

    }
    delay(2000);
    BadgeDisplay_Clear_Screen();
    if((my_1 == my_2) && (my_2 == my_3)){
      BadgeDisplay_hzs("你赢了!");
    }
    else{
      BadgeDisplay_hzs("你输了!");
    }
    delay(2000);
    BadgeDisplay_Clear_Screen();
}
}
```

帅猫 发表于 2021-1-16 09:39:33

拍的时候把相机帧率调低点

汤果 发表于 2021-1-16 16:26:59

帅猫 发表于 2021-1-16 09:39
拍的时候把相机帧率调低点

哦,原来如此。
页: [1]
查看完整版本: 简易老虎.机