JankenGUN (ver 0.1 beta) by Yuri213212 at team "JankenGUN" Published at Techseeker Hackathon 2024 使用协议:对于所有文件遵循CC BY-NC-SA 4.0。 https://creativecommons.org/licenses/by-nc-sa/4.0/ 此工程为本人在Techseeker Hackathon 2024参赛作品的担当部分,最终作品以队伍“JankenGUN”的名义提出,在大赛中获得了ProtoPedia奖。 工程分为两部分:LPC1114FN28单片机固件和在windows运行的客户端程序。 最终成果为一台有两个红外接收模块的专用游戏机(靶),通过有指向性的遥控器(队友担当的玩具枪)控制游玩,由上位机(执行客户端程序的电脑)与服务器(队友担当)通信控制游戏开始结束以及上传游戏结果,由服务器连接外部服务(kintone)统计分数并排名。 队友也用其他设备做了3个靶,但是未加入失败惩罚等功能导致规则相对简单,因此展示时本人负责的两个靶分数加倍。 由于展示时游戏规则是竞争50秒内的胜利次数(分数加倍的胜利视为胜利两次),平局与失败不扣分,于是产生以下最强攻略法: 先瞄准本人负责的靶胜利两次,在等待第一个靶的胜利效果完成期间向队友负责的3个靶随机打石头剪子布,第一个靶恢复出拳时立即停止随机发射正常打本人负责的两个靶,如此循环。 这样保证每个两分都能拿到手,该部分在手速无限快的情况下的理论最高分是100分;其余的随机打看运气,运气好也能得不少分。 本人在第二天展示开始前以此攻略法打出了68分的成绩,虽然失误有点多,但也超过第一天所有玩家的成绩。 以此法游玩需要时刻移动胳膊、手指和上身,50秒游玩下来很消耗体力,或许可以通过连续游玩此游戏做运动减肥。 主要硬件(芯片): ·单片机LPC1114FN28/102 ·基于FT234X的USB转UART通信模块 ·使用I2C通信,基于SSD1306的OLED屏幕 ·4半H桥电机驱动芯片SN754410 ·基于PAM8403的功放模块 外设: ·两个OLED屏幕用来显示内部状态 ·两个红外接收模块用来接收玩家的控制信号 ·两个LED灯板用于实现闪光效果 ·两个喇叭用于播放音效 ·一个双联电位器用于控制音量 ·三个按钮,其中两个用于手动控制开始与结束,另一个是(硬件)重启按钮 其他模块: ·作为游戏控制器的基于NEC格式遥控器的玩具枪(非本人负责) ·用于测试的NEC格式遥控器(理论上套个不透明且内部不反光的长筒也能当玩具枪用) ·用于执行网络通信的上位机(执行客户端程序的电脑) ·用于统计游戏分数结果以及利用外部api的服务器(非本人负责) 执行效果: 客户端连接单片机时会发送设置数据控制游戏的节奏(显示时间,黑屏时间与输了的罚时)。 客户端从服务器获得游戏的开始与结束状态,然后将对应的开始结束命令发送给单片机。 游戏进行时默认会在两个屏幕上随机显示“石头”“剪子”“布”的猜拳状态,持续出招一段时间后会黑屏一段时间然后随机变招再显示,两个屏幕的状态独立互不影响。 玩家需要瞄准屏幕对应的红外接收模块并打出猜拳状态,打中时判断猜拳结果,根据结果有不同音效,赢了得分且有闪光效果,平局和输有不同惩罚。 ·如果赢了本轮立即结束,屏幕将变成圆圈持续黑屏时间,然后不黑屏立即出下一个招 ·如果平局屏幕将变成三角,该行为仅仅拒绝本轮的变招重打,并不改变内在出招节奏,等到本轮结束时正常黑屏然后变招 ·如果输了屏幕将变成叉,行为与平局类似但是叉的显示时间要加入额外的罚时 ·其他情况(屏幕并非猜拳状态而是黑屏或判定结果)视为未打中,不影响默认行为 每当猜拳结果确定时会改变内部状态计数器,客户端会读取计数器并根据其变化将对应的结果发送给服务器,服务器会连接外部服务统计分数并排名。 系统支持双倍得分,需要在客户端连接服务器前选择是否分数加倍,上传赢状态时会改变数据以达到分数加倍或不加倍的效果。 彩蛋: ·客户端拥有服务器和单片机部分的模拟功能,就算没有服务器和单片机也可以体验游戏的过程,只是缺少排名功能与音效(客户端的目的是实时收发数据,不该被模拟时才工作的音效影响其执行效率) ·单片机部分的执行不依赖上位机,不接电脑也可以直接接电源,按绿色按钮开始按红色按钮结束,这样只能以默认节奏游玩,且失去分数统计功能 ·在展示过程中用了手动开始功能给玩家练习 ·按住绿色按钮时重启单片机会进入测试模式用来调试硬件,测试模式中按红色按钮改变状态,按绿色按钮复位,其中显示猜拳时正常接收红外信号并判定 ·如果没有特制玩具枪也可以用遥控器,两个红外模块将同时接收信号,游戏性质中的瞄准准确性将变为策略性,即如何出招能更高效地得分 链接: ·作品宣传页:https://protopedia.net/prototype/5304 ·最终发表的演讲稿:https://docs.google.com/presentation/d/16ZVuTQFTg0eQA4KwGTpmx9URZNwMNwRzFgQZZT6nO9k/edit#slide=id.g2e96e1b2631_0_0 ·队友的工程:https://github.com/ufoo68/jankenGUN 参考文献: ·Programming Windows Fifth Edition:https://www.cl72.org/100winProg/Charles%20Petzold%20-%20Programming%20Windows%20-%205th%20Ed.pdf