Pular para o conteúdo principal

victorstein.dev

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:

Grid do jogo atualizado com borda e personagens