
No trabalho, estou criando
habilidades úteis para Alice e, nas horas vagas, tentei usar um assistente de voz para brincar com os amigos em meu ambiente doméstico. Já descrevi meu
desenvolvimento de um jogo de texto para um ou dois jogadores, mas desta vez compartilho minha experiência na criação de um videogame para uma empresa inteira.
Regras do jogo
Eu não queria portar um jogo existente para Alice, queria criar um jogo original que use a capacidade de Alice para reconhecer a fala.
Muitas imagens aparecem em círculos e quadrados de cores diferentes na tela. A tarefa do jogador é detectar um par de objetos no mesmo plano de fundo e formar uma frase da forma: adjetivo + substantivo. Além disso, o adjetivo deve ser formado a partir de um objeto em um círculo e um substantivo de um objeto em um quadrado. Daí o nome do jogo - "Round Square".
O jogador que chamou a frase ganha pontos. O vencedor é aquele que marcou 10 pontos ou mais pontos durante a rodada (2 minutos). A jogabilidade é mostrada em um pequeno vídeo.
Decidimos as regras - vá para a técnica.
Controladores
Para exibir o campo de jogo, eu uso uma TV grande, na qual abro o site do jogo. Se a TV não tiver uma conexão com a Internet, você poderá exibir a imagem do computador ou reproduzir no monitor.
A parte visual do jogo está escrita em JavaScript. Todos os objetos: o campo de jogo e o HUD - são criados pelos métodos da API 2D do Canvas para desenhar retângulos, texto e imagens. Uma vez a cada 50 ms, a tela é atualizada. Todo o código está concentrado em um único arquivo HTML, incluindo imagens codificadas no formato Base64.
Agora você precisa implementar uma interface que aceite as frases dos jogadores. Felizmente, a tarefa de reconhecimento de fala é resolvida pelos assistentes de voz. O Yandex fornece esse serviço gratuitamente para usuários e desenvolvedores dos aplicativos de voz (habilidades) de Alice.
Adicione a habilidade de tocar um assistente de voz. Agora, cada jogador pode ativar o aplicativo de voz em seu próprio telefone ou em um alto-falante inteligente e enviar réplicas ao site por meio de um microfone.
Backend
Resta associar a réplica do usuário a uma parte específica do jogo. Para fazer isso, precisamos de um servidor: um número é gerado para cada lote, uma página HTML o registra no servidor e o exibe para o usuário. O usuário chama esse número para o assistente de voz e este registra um novo jogador no jogo correspondente por meio do gancho da web do servidor. As réplicas subsequentes do usuário são transferidas para o seu jogo através do WebSocket.
O código do cliente para criar um soquete da web e reconectar quando desconectado é semelhante a este:
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);
Quando conectado ao servidor, o cliente envia o número do jogo. Abaixo está o código do servidor que estabelece uma conexão e inicia o controle do jogo com o número aceito:
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); } }); });
Nesse caso, o mesmo servidor pode renderizar páginas para o navegador e responder aos ganchos da web de Alice:
var server = express().use(bodyParser.json()).use('*', (req, res) => { if (req.body && req.body.request) {
Conclusão
O resultado foi um videogame original para a empresa. Foi
publicado em Alice em 28 de novembro de 2018 e se tornou o primeiro videogame que conheço para este assistente de voz.
A propósito, mesmo antes do advento de Alice e do Google Assistant, as pessoas sentiam um gosto pelo
controle de
voz nos jogos . Graças à onipresença de dispositivos com microfones e alto-falantes, graças ao desenvolvimento da tecnologia da fala, os assistentes de voz estão se tornando disponíveis controladores de jogo que proporcionam uma nova experiência ao usuário.