×

触摸井字游戏开源分享

消耗积分:0 | 格式:zip | 大小:0.39 MB | 2022-10-28

倪山骋

分享资料个

描述

不久前,我构建了我的Touch-A-Mole游戏,它是 Whack-A-Mole 游戏的一个版本,它使用 4x4 电容式触摸板,每个触摸板的中间都装有 LED。在构建它时,我想如果我用双色 LED 代替单色 LED,我可以把它变成井字游戏的一个版本。

Touch Tic-Tac-Toe 游戏演示

设计

我选择使用 ATtiny3216 微处理器作为游戏的大脑。它有足够的引脚来控制 LED、按钮和扬声器。它可以以 20MHz 运行,具有 32k 的闪存和 2k 的 RAM。

pYYBAGNYulCAJ4RsAARJXB6vi8Q704.png
示意图
 

双色 LED 是共阴极,阳极成列连接,并通过限流电阻连接到 ATtiny3216 上的引脚。阴极成排连接,由 ATtiny3216 控制的晶体管启用。

4x4 电容式触摸开关面板由两条信号线控制。虽然 PCB 有时会标记这些引脚 SCL 和 SDA,但它不使用 I2C 协议。它们实际上只是时钟引脚和数据引脚,它们使用专有的两线协议。

我设计了一个 PCB 来固定 LED 和表面贴装组件。如果您希望将电路板商业化或您可以自己制作,则已包含 Eagle 文件。我用碳粉的方法来制作我的。

pYYBAGNYulWACInrAAR-BbxDVHA528.jpg
PCB 可容纳 16 个 LED 并安装在 XC4602 触摸按键模块下方
 

建造

首先添加 SMD 组件。我发现在焊接 SMD 元件时使用焊膏比使用卷盘中的焊料更容易。

如果您的电路板是单面的,请添加链接。

poYBAGNYulmAKzY7AAHt2H8EHAM291.jpg
添加 SMD 组件和链接
 

在触摸板上的 3/6 引脚之间连接一个链接,以启用所有 16 个触摸板。

poYBAGNYulyAdodtAACQQOdK01g225.jpg
添加链接以启用所有 16 个触摸板
 

小心地在每个触摸板中间为 LED 钻一个 2.5 毫米的孔。当心 PAD 5。有一条轨道非常靠近打击垫底面的中心。如果你打破它(我在我的构建中做了),你需要刮掉孔两侧的抗蚀剂并焊接一些镀锡铜线以绕过孔。

pYYBAGNYul-AW6gAAAHXcoaYvcQ591.jpg
添加 USB 插座、LED 和扬声器
 

当我建造我的时,我先添加了 LED,然后在焊接所有组件后添加了垫片。我建议您先打印并添加垫片,然后将它们粘到 PCB 上。插入 LED(确保它们的方向正确),但不要焊接它们。将触摸板放在垫片上并向下推每个 LED,使它们位于各自孔的中间,并且在将它们焊接到位之前硬靠在触摸板上。

poYBAGNYumOAa9F2AALUnvQzpE8016.jpg
将垫片粘到 PCB 上,将触摸矩阵线粘到 PCB 上
 

添加连接两块板的四根镀锡铜线(VCC、GND、SCL、SDO)。

3D 打印保险杠并将组件添加到其中。

最后使用 UPDI 程序员上传代码(见下一节)。

pYYBAGNYumaATOqCAAGzc5A39A0139.jpg
将程序集添加到保险杠并上传代码
 

编程

ATtiny3216 是新一代 ATtiny 微处理器的一部分。与 ATtiny85 等早期系列不同,新品种使用 RESET 引脚对 CPU 进行编程。要对其进行编程,您需要一个 UPDI 程序员。我用 Arduino Nano 做了一个。您可以在Create Your Own UPDI Programmer中找到完整的构建说明。它还包含将megaTinyCore板添加到 IDE 的说明。

USB 插座为游戏提供电源 (5V)。ATtiny3216 处理器的 UPDI 引脚连接到 USB 插座上的 D+ 引脚。这允许使用定制电缆对 ATtiny3216 进行编程。USB Mini 插头可在 eBay 上买到,或者您可以剪断旧的 USB Mini 电缆。

pYYBAGNYummAVJnlAABeDUl3iRM501.jpg
用于我的自制 UPDI 编程器的 USB-Mini 连接器电缆
 

玩游戏

通电后,计算机将迈出第一步。所有后续游戏,而单位保留权力将假定玩家首先开始。

poYBAGNYumuALJRWAABFGm6oO34699.png
4x4井字游戏规则
 

该软件

当计算机需要移动时,它会尝试每个可用的方格并评估移动的结果。为此,对于它测试的每个方格,它必须测试用户可以做出的每一个可能的移动并评估这些移动中的每一个。这个过程以递归方式继续,直到棋盘满了,没有赢家,或者玩家赢了,或者电脑赢了。这意味着要评估的测试总数(假设计算机启动)为 16!或大约 21 万亿个排列。显然,使用 20MHz 处理器,这将需要很长时间。同样在 4x4 游戏中,计算机在评估每一步棋时需要测试 19 种获胜组合。

为了使游戏具有可玩性,它看起来只有 3 到 4 步。它有点松散,因为如果它发现它不可能获胜的情况,它基本上会认输并选择任何可用的方格。

在 Game.h 中有以下几行:

//Comment out for 4x4 tic-tac-toe
//#define _3X3
//Comment out to store winning table in RAM (reduces CPU cyles in evaulation function)
//#define WINNING_MOVES_IN_RAM
//Comment out to use C version of evaluateBoard function
//#define EVAL_IN_ASSEMBLER

取消注释 #define _3X3 行会将游戏配置为仅使用左上角的 9 个触摸板。您无法击败 3x3 游戏,因为它可以预见到游戏结束。你能做的最好的就是平局。

取消注释 #define WINNING_MOVES_IN_RAM 会将获胜组合表放入 RAM 而不是闪存中。RAM 比闪存快,但由于只有 2K 可用 RAM,由于递归游戏评估,堆栈确实需要它。

不要取消注释#define EVAL_IN_ASSEMBLER。我试图看看我可以加快评估板功能的速度。任何速度增加都不明显。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !