58/100 Dias de Golang - Jogo em UDP - Parte 4
Table of Contents
#
Jogo em UDP - Parte 4
Hoje vamos implementar a função que processa os comandos recebidos no servidor e atualiza o grid com a posição dos jogadores. Essa função que processa os comandos do grid vai ser uma goroutine que fica escutando o canal commands
. Ela vai receber a struct Command
, que possui o ID do jogador e qual o comando.
type Command struct {
PlayerID string
Action string
}
Vamos implementar nela também alguma verificações da posição do jogador no grid, ele não pode ficar em posições negativas nem na borda do grid. Para cima e para baixo verificamos se a posição é maior que 0 e menor que o número de linhas e para a esquerda e para a direita. E verificamos também se a posição é uma borda.
go func() {
for cmd := range commands {
player := players[cmd.PlayerID]
switch cmd.Action {
case "w": // Para cima
if player.Y > 0 && grid[player.Y-1][player.X] != '*' {
player.Y--
}
case "s": // Para baixo
if player.Y < arenaRows-1 && grid[player.Y+1][player.X] != '*' {
player.Y++
}
case "a": // Para a esquerda
if player.X > 0 && grid[player.Y][player.X-1] != '*' {
player.X--
}
case "d": // Para a direita
if player.X < arenaCols-1 && grid[player.Y][player.X+1] != '*' {
player.X++
}
}
}
}()
Agora o que temos que fazer é atualizar o grid com os jogadores. Faremos uma adição na função renderArena
para colocar o Char
de cada jogador na posição X e Y.
for _, p := range players {
grid[p.Y][p.X] = p.Char
}
Agora podemos rodar o server. Rodar os clients e movimentar o “personagem” com WASD e Enter. Temos a seguinte saída: