所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
简易老虎/机
汤果 汤果 2021-01-15 19:01:38
0
0
简单

【项目来源】

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

projectImage

【效果演示】

【项目分析】

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

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

projectImage

老虎/机的核心功能就是显示不同的图案。为了方便起见,我们选择显示数字。我们做一个显示三位数字的简易老虎/机。整体的流程如下:

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

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

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

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

材料清单 材料清单
1x
徽章板
1x
数字触摸开关
步骤1 步骤1
器材连接

通过分析,我们需要用到一个按键开关。不过我不喜欢按键的机械声,就选择了数字触摸开关。将徽章板插到扩展板上,然后将数字触摸开关接到扩展板的 D0 接口即可。

projectImage
步骤2 步骤2
编写代码

打开 http://haohaodada.com/hz 或者好搭 Block 软件编写代码如下:

projectImage

因为最后要进行输赢判定,所以程序中创建了三个整型变量存放每个数字。考虑到游戏难度较大,可以修改数字的范围降低难度。如这里就把随机数范围[0,9]改为[1,3]。

步骤3 步骤3
调试运行

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

projectImage
projectImage

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

代码 代码
	                    					#include "Haoda.h"
#include "Arduino.h"
#include "Wire.h"
#include "Servo.h"

int my_1;
int my_2;
int my_3;
uint16_t displaycache[500];

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();
  }
}
	                    				
Makelog作者原创文章,未经授权禁止转载。
0
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]