设计一个多人互动游戏
谢作如 陆雅楠
利用编程软件和开源硬件制作的人机互动游戏案例已经越来越多,但是多人互动的游戏却很少见,因为这需要网络的支持。掌控板是一款使用物联网芯片开发的开源硬件,具备了连接网络的功能,如何运用类似掌控板之类能够联网的开源硬件,设计可以多人互动的游戏,成为我们研究的新方向。
赛龙舟是我国的一个重要习俗,是一项典型的集体竞赛活动。将这项活动搬入室内,甚至是搬入课堂,以一种全新的形式呈现出来,肯定挺好玩。掌控板自带了加速度传感器,可以感知“划桨”的动作,再结合物联网技术,将大家的动作统一呈现在一个屏幕上,为“赛龙舟”的游戏设计提供了技术上的保障。● 多人互动游戏的技术分析
物联网(Internet of Things,简称IoT)是借助互联网、传统电信网等信息承载体,让所有能行使独立功能的普通物体实现互联互通的网络。MQTT是常见的物联网通信协议,采用主题(TopicID)来实时发送和接收(订阅)消息,使用起来非常简单(如图1)。
掌控板支持MQTT协议。本游戏案例为人手一块掌控板,设置掌控板连接Wi-Fi,然后利用掌控板的加速度传感器感知晃动幅度,即划桨的动作,接着上传到MQTT服务器。Mind+软件也连接MQTT服务器,订阅物联网信息,再用不同的龙舟角色呈现不同掌控板的前进速度,就完成了这一互动游戏。系统运行流程如图2所示。● 开发工具准备
1.Mind+
Mind+是开源硬件企业DFRobot推出的IDE工具。其支持两种编程模式,一是实时交互模式,二是离线下载模式。实时交互模式类似普通的Scratch程序,离线下载模式则是指给Arduino、掌控板写程序。Mind+可以直接访问MQTT服务器,和其他接入MQTT服务器的智能硬件进行交互。基于Mind+的MQTT简单调试如图3所示。
2.掌控板
一个游戏用户需要一块掌控板。根据赛龙舟的活动特点,制作一个船桨,将掌控板安装到船桨上采集真实的“划桨”数据。注意,掌控板要加电源。图4中的掌控板加了带电源的扩展板。
3.SIoT服务器
SIoT是一个跨平台的标准MQTT服务器,不需要经过复杂的配置,一键启动即可使用。SIoT也是一款开源软件,是“虚谷物联”项目的核心软件,根据操作系统下载相应的版本即可。● 代码编写
1.物联网环境准备
双击运行与系统匹配的SIoT运行文件,屏幕会弹出一个黑色的CMD窗口(如图5),确保在配置中此窗口不关闭。
运行Mind+软件,并在拓展中选择“网络服务”并添加“MQTT”,如图6所示。
2.掌控板代码
掌控板的代码使用Mind+的“下载模式”编写,参考代码如下页图7所示。首先,掌控板设备与服务器建立连接,在服务器上能够实时反馈数据。其次,设置变量g1与g2,分别代表玩家一次划桨的前后加速度(可通过读取一次划桨前后桨上掌控板不同位置的加速度获取),从而计算桨的晃动幅度,然后上传到MQTT服务器。
“MQTT初始化参数”设置:服务器地址设置为SIoT服务器的IP地址,TopicID(主题)设置为“项目ID/名称”(如下页图8)。不同的掌控板设置不同的TopicID,如“longzhou/0”“longzhou/1”“longzhou
/2”分别代表三块掌控板。
3.Mind+代码
Mind+的代码在“实时模式”下编写,需要设置一个河水的背景,然后添加龙舟角色,根据掌控板的数量添加多个角色,龙舟角色的参考代码如下页图9所示。同样在“MQTT初始化參数”中设置“longzhou/0”“longzhou/1”“longzhou/2”这三个TopicID。
通过不同玩家控制的掌控板传来的顺序,一一对应到各自的角色(龙舟)上,不同晃动幅度龙舟的前进速度不同。● 游戏测试
每名玩家手持装有掌控板的船桨一柄,每名玩家代表一条龙舟。当掌控板出现数值就表示连接MQTT服务器成功,就可以开始游戏了。Mind+软件会准确计算出每名玩家的划桨幅度并将其呈现在龙舟的前进速度中,最终玩家们根据龙舟触边先后决出胜负。其测试效果如图10、图11所示。● 结语和展望
通过实践,笔者认为这款游戏还可以继续改进,如:①可以通过添加音效使得游戏更加真实,玩家体验感更好;②在背景画面上可以添加动图效果,制作出龙舟比赛时水流的特效;③可以思考设计团队模式游戏,三人一组划一条龙舟进行竞赛。
结合SIoT和掌控板,可以设计更多有意思的多人互动游戏,也可以设计一些真实的应用,如网络投票。在一些集体活动中玩这样的互动游戏,不仅有趣,还能够培养学生的集体意识。希望本案例能抛砖引玉,有更多的教师带领学生做类似的研究。