带有结束回合按钮的棋盘游戏桌





准备工作:
材料:




电子产品
- 12 个GoldLeaf RGB 发光按钮,来自 Ultimarc link
- 来自 Ultimarc link的 I-PAC Ultimate I/O 控制板
- Ultimarc link的 I-PAC Ultimate I/O 控制板安装套件
- 树莓派 2
- 监控链接
- Wifi 客户端桥接链接
我刚好有一台 Raspberry Pi 2、这款微型显示器和一个 WIFI 客户端桥接器,它们都放在一堆零件里。任何电视/显示器都可以满足需求,如果可以的话,我推荐你买一台内置 WIFI 的新款 Raspberry Pi。WIFI 桥接器只是因为我之前用的是老款 Raspberry Pi。你也可以用老款 Raspberry Pi,然后把桌子插到网络里就可以访问了。
材料
几个月前我的车库里已经有一些2x4的木板,是做演示项目用的,还有桌子和木材着色剂。我建议用你手边现有的任何着色剂,或者买一罐你喜欢的。我用的是凝胶,因为我手边只有它。桌子也可以是其他尺寸,只要它能塞进胶合板下面,并且在边缘留出一些空间来放置按钮/杯架/电子设备就行。
工具:
- 烙铁
- 孔锯(杯架用 3.25 英寸,纽扣用 1.25 英寸)
- 钻头和螺丝刀、各种钻头和螺丝刀
- 剥线钳
- 胶枪
可能还有很多其他的小玩意儿。可惜的是,我选择在完成大部分工作后才创建这个Instructable,所以很可能已经记不清所有用过的东西了。我记得我曾经几乎把所有工具都放在桌子底下的地板上。
设计




因为我还不知道自己到底想做什么,而且木材太贵,不能一下子搞砸,所以我选择用 Sketchup 设计桌子。我以前从未用过任何绘图软件,但在 YouTube 上看了半个小时后,我掌握了足够的知识,可以画出一个方案了。
我对自己的木工技术没有足够的信心,无法从头开始打造一张完整的桌子(同样,木材价格也很高),所以我决定做一个盖子,放在我们已经用来玩棋盘游戏的廉价折叠桌上。
组装完成后,我对软件和电子设备非常满意,但桌子的整体结构有点摇晃。如果你直接跳到这个 Instructable 的最后一步,你会看到我正在计划做一个底座,可以把它连接到这个盖子上,这样可以增加稳定性和收纳空间。
切割胶合板并与折叠桌对齐




我让Lowes的工人根据我画的图纸把胶合板切割成4英尺 x 6英尺8英寸的尺寸。这样桌子就能正好放在胶合板的正中央,而且桌子本身也能放进我规划的空间里。
如果您要使用一张胶合板,我建议您让商店帮您切割,而不是使用技能锯来处理。
然后,我只需将桌子放在床单上,将其与中间对齐,然后随意将 2X4 拧在周围,使桌子尽可能紧贴。
制作桌裙




回到楼上带有盖子的车库,我将 1X3 木板切割成合适的长度,并将边缘斜接。
然后我把边缘粘在一起,用L形支架和角支架把整个部件固定在一起。我等了一天,然后把整个裙边好好打磨了一下,尤其是斜接处。由于它们之间有足够的木胶,它们变得非常坚固,这意味着我可以把斜接处修整一下,使表面更加光滑。
染色、玩游戏、钻孔、再次染色、钻更多孔、再次染色






接下来是犹豫不决的染色。
我涂了一层我随手扔掉的一罐凝胶染色剂,第二天就感染了新冠,在地下室隔离了五天。我感觉没法再继续建造了,但为了保持理智,我还是独自玩了大约40局《火星改造》。即使没有电子设备,能有更大的桌面来玩,我已经非常开心了。
恢复后,我为杯架钻了四组孔,然后涂了第二层,然后我意识到我想要更多的杯架,所以我钻了更多的孔,然后很快就用完了污渍。
我买了第二罐同样的东西并修补了剩余的洞。
杯架需要一把 3.25 英寸的孔锯,但我从别人那里借到的最接近的尺寸是 3.5 英寸。这个方法可行,但是杯架放进去后会变得很松,下一步看看我的解决办法吧。
安装按钮和杯架






这一步我只是把所有按钮和杯托都塞进了上一步钻好的孔里。不出所料,杯托还是有点松。我试了好几种方法让它们更紧,最后发现在杯托靠近顶部(从底部)的地方安装三个等距的线缆固定座,就能很好地固定它们。
这不是最优雅的解决方案,但它有效并且一切都隐藏在桌子底下。
安装Raspberry Pi和其他组件







我在桌子下面安装了树莓派和 WIFI 桥接器、Ultimarc 控制板以及所有相关的线缆。我选择把所有主要部件都安装在我经常坐的桌子旁边。我想这样可以防止其他玩家不小心用膝盖撞到设备。
树莓派运行的是 Ubuntu 服务器,但任何操作系统都可以。由于这台电脑基本上是无头的,用户只会与我为其编写的软件交互,所以我觉得没必要搭建桌面环境。我可以随时通过 SSH 连接到这台机器,如果情况紧急,还可以随时连接屏幕和键盘。我正好有一个装这台树莓派的盒子,所以很容易就把它装在了胶合板桌子的底部。
我在树莓派上连接了一个小型 TP-Link WIFI 网桥(同样,是从我已有的零件箱里拿来的)。这样,没有 WIFI 功能的树莓派就可以连接到我的 WIFI 网络了。当然,我也可以用网线连接,不过我反正有这个网桥,干嘛不用呢?如果有人想自己制作,我建议你用一台新款的、自带 WIFI 功能的树莓派。这个网桥没有任何安装硬件,不过用一点魔术贴就搞定了。
Ultimarc 控制板只需插入树莓派的 USB 端口即可。控制板将街机按键的按下动作转换为树莓派能够识别的按键操作,并根据树莓派发送的消息来打开/关闭街机按键上的 LED 灯。它还附带一系列便捷的 Windows 实用程序,用于配置和测试控制板。使用我随附的安装脚,将 Ultimarc 控制板安装在树莓派旁边非常轻松。
此外,我还添加了一个大型 110V 开关(同样来自那个神奇的零件桶)、几个 USB 电源块来运行 Pi、控制板和 WIFI 桥,以及一堆电缆扎带支架/扎带,以保持电缆整洁。
使按钮工作







桌子下方的每个按钮总共有 6 根导线,其中 4 根用于 RGB LED 灯,2 根用于实际的按钮连接。考虑到会用到大量的线缆,我选择使用以太网线连接按钮中的 RGB LED 灯。每个玩家的杯架旁边都有两个按钮,所以一根以太网线就可以连接所有的 RGB 信号线。
我买了一些用于墙上插座的以太网分线器,并将两端连接到控制板的导线上。方便的是,控制板在插入电源时会运行一个演示程序,这样测试灯光就变得很容易了。一开始我遇到了一些连接问题,有了它,我很快就找到了问题所在。
对于剩余的按钮连接,我为每个按钮额外布线了两条线,总共72条线,低音。控制板支持X-input或键盘模拟。为了简单起见,我将其设置为键盘模拟,并为每个按钮设置不同的按键,此时整张桌子就像一个巨大的12键键盘。
与 Node 绑定






现在所有导线都连接到控制板并记录按键动作,控制按键亮起时间的程序应该很简单。我们的想法是先点亮其中一个按钮,然后当按下该按钮时,点亮左边的按钮,以此类推。可惜,这并不容易。
那么,回合顺序会根据游戏状态变化的游戏呢?或者,如果玩家完成所有能做的动作后就可以过关,那该怎么办?我开始为每个游戏硬编码一套独特的规则,但玩过几次之后,我发现大多数游戏似乎都是由相同的阶段组成的。可能还有更多类似的游戏,但根据我拥有的游戏,这些阶段涵盖了我遇到的所有情况:
- 维护:为下一轮做准备,给玩家钱,重置游戏组件等等。“管理员玩家”按下按钮,告知桌号何时完成。大多数游戏都有某种维护,即使只是在游戏刚开始时。
- 无限回合:第一位玩家的按钮亮起,轮到他了。轮到他了之后,按下自己的按钮。轮到他了之后,下一位玩家的按钮亮起,轮到他了。无限循环。此阶段适用于卡坦岛、大富翁、卡牌游戏等简单游戏。
- 有限回合:此阶段与无限回合相同,但每位玩家都拥有第二个按钮,可以按下该按钮来“过关”。过关玩家将被淘汰出局,并被跳过。所有玩家过关后,此阶段结束。此阶段常用于《火星改造》、《复仇女神》等游戏。
- 一击:所有玩家的按钮亮起,然后玩家按任意顺序轮流行动。每次轮到一位玩家行动时,他们的按钮都会熄灭。所有玩家都行动完毕(并按下按钮)后,该阶段结束。此阶段适用于回合顺序可变的游戏。此阶段在《Brass Birmingham》、《Who Goes There》、《Power Grid》等游戏中使用。
- 回合顺序单回合:此阶段本质上是一个有限回合,但没有过牌按钮。先手玩家先进行一回合,然后是下一位玩家,直到所有玩家都进行完一回合后,阶段结束。目前为止,我唯一使用过此机制的游戏是《阿卡姆恐怖》。
此外,有时使用的阶段会根据玩家数量或已进行的回合数而变化。所以,这需要额外编写一些逻辑代码。最终,我编写了一个解析器,它可以读取每个游戏的配置文件,然后处理游戏的阶段顺序。
这是“通用”游戏的配置,可用于纸牌或卡坦岛等简单游戏:
这是伯明翰铜管乐器的配置,它要复杂得多。
- 游戏开始时会显示一次说明
- 然后,第一轮会显示具体的回合说明(其他所有回合开始时都会显示不同的说明)
- 然后根据玩家数量,在游戏进行到一半时显示特殊指示(运河时代的结束)
- 然后根据玩家数量,游戏将在一定数量的玩家之后结束
- 还有一些特殊阶段,例如移动首位玩家令牌、结束游戏以及其他一些边缘情况。所有代码可在此处找到:https://gitlab.com/jason.watson/board-game-table
添加屏幕








你可能在上一节中注意到,游戏配置文件中有很多图片。大约在我意识到必须为每个游戏编写不同的配置的同时,我也意识到我也可以为每个游戏显示具体的说明。
为了实现这个功能,我连接了一个屏幕,用 Photoshop 制作了一堆图片,并想出了如何将它们加载到树莓派的帧缓冲区中,以便在需要时显示出来。这样我就可以显示启动画面、加入游戏的说明以及游戏各个阶段的说明。
这还有一个额外的好处,那就是提醒新玩家(或健忘的玩家)游戏规则,并且是以上下文敏感的方式实现的。
游戏时间







这样,桌子就可以准备好了!
总的来说,它在游戏群体中很受欢迎。它能记录玩家的回合,还能在我们沉迷于长达数小时的桌游时提醒我们规则。哦,对了,氯丁橡胶垫和杯架简直是锦上添花 :)
进一步扩大范围




但这张桌子还有更多功能!在撰写本文时,这些最后的部分还在进行中,所以我把它们留到最后再说。
首先,我最近添加了一个更大的屏幕,并编写了一个 React 前端来显示游戏状态。这比一些简单的图像能够提供更多信息。大屏幕会显示轮到谁了(与按钮操作一致)、已进行回合数以及本轮的说明。
大屏幕还可以播放视频,而且,只要稍微调整一下时间,这些视频就可以同步到我的智能灯和插座上。观看 YouTube 视频,了解演示。
最后要说的是关于桌子本身。用了几个月后,这张折叠桌摇晃得有点厉害。我设计了一个底座,可以存放游戏,而且稳定性更高,但实际动工还没开始。











