爱丽丝的第一个视频游戏,或作为游戏控制器的语音助手



在工作中,我正在为爱丽丝创建有用的技能 ,并在业余时间尝试使用语音助手与我的家庭环境中的朋友一起玩。 我已经描述了我为一个或两个玩家开发文本游戏的过程,但是这次我分享了为整个公司创建视频游戏的经验。

游戏规则


我不想将现有游戏移植到爱丽丝,而是想出一款使用爱丽丝识别语音功能的原创游戏。

许多图像以不同颜色的圆形和正方形显示在屏幕上。 玩家的任务是在相同的背景下检测到一对物体,并使用以下形式的短语:形容词+名词。 此外,形容词必须由圆的对象组成,名词由方形的对象组成。 因此,游戏名称为“圆形广场”。

调用该短语的玩家获得积分。 获胜者是本轮(2分钟)内获得10分或最高分的人。 短视频中显示了游戏玩法。


我们已经决定了规则-转到技巧上。

控制器


为了显示比赛场地,我使用了大电视,并在电视上打开了游戏的网站。 如果电视没有Internet连接,则可以在计算机上显示图像或在监视器上播放。

游戏的视觉部分是用JavaScript编写的。 所有对象:运动场和HUD-由Canvas 2D API方法创建,用于绘制矩形,文本和图像。 每隔50毫秒更新一次屏幕。 所有代码都集中在一个HTML文件中,包括以Base64格式编码的图片。

现在,您需要实现一个接受玩家短语的接口。 幸运的是,语音识别的任务是由语音助手解决的。 Yandex为Alice的语音应用程序(技能)的用户和开发人员免费提供了这样的服务。

添加播放语音助手的技能。 现在,每个播放器都可以在自己的电话或智能扬声器中激活语音应用程序,并通过麦克风将副本发送到站点。


后端


仍然需要将用户的副本与特定的游戏聚会相关联。 为此,我们需要一台服务器:为每个批次生成一个数字,HTML页面将其注册到服务器上并显示给用户。 用户将此号码呼叫语音助手,语音助手通过服务器的网络挂钩在相应的游戏中注册新玩家。 随后的用户副本通过WebSocket传输到他的游戏中。

用于创建Web套接字并在断开连接时重新连接的客户端代码如下所示:
function start(websocketServerLocation){ ws = new WebSocket(websocketServerLocation); ws.onopen = function(){ gameN = game.id; }; ws.onclose = function(){ gameN = "--"; start(HOST); }; wsSend({"gameId": game.id}); } start(HOST); 

连接到服务器后,客户端将游戏号发送给他。 下面是服务器代码,用于建立连接并使用可接受的编号启动对游戏的控制:

 const wss = new SocketServer({ server }); wss.on('connection', (ws) => { ws.on('close', () => { remConn(ws.gameId); }); ws.on('message', msg => { const data = JSON.parse(msg); if (data.gameId) { ws.gameId = data.gameId.toString(); addGame(ws); } }); }); 

同时,同一台服务器可以将页面呈现到浏览器并响应Alice的网络挂钩:

 var server = express().use(bodyParser.json()).use('*', (req, res) => { if (req.body && req.body.request) { //   toAnswer  - res.json({ version: req.body.version, session: req.body.session, response: toAnswer, }); } else { // -   res.sendFile(INDEX); } }).listen(PORT); 

结论


结果是该公司的原始视频游戏。 它于2018年11月28日在爱丽丝(Alice)发布 ,并成为我所知道的第一个语音助手视频游戏。

顺便说一下,甚至在Alice和Google Assistant出现之前,人们就对游戏中语音控制产生了狂热。 由于带有麦克风和扬声器的设备无处不在,由于语音技术的发展,语音助手正在成为可提供新用户体验的游戏控制器。

Source: https://habr.com/ru/post/zh-CN435012/


All Articles