65/100 Dias de Golang - Jogo usando bubbletea e lipgloss
Table of Contents
#
Jogo usando bubbletea e lipgloss
No post de hoje vamos fazer um jogo usando o bubbletea e o lipgloss. A ideia é só fazer um “baralho” e o jogador tira uma carta e o computador tira outra, quem tiver a carta mais alta vence. Em caso de empate no valor, o critério de desempate é a sequência de naipes.
Iniciamos o projeto:
go mod init jogo-cartas-tui
Instalação das libs:
go get github.com/charmbracelet/bubbletea
go get github.com/charmbracelet/lipgloss
Teremos dois arquivos no projeto: main.go
: Contém a lógica principal do Bubbletea e a execução do jogo. E cards.go
: Contém a lógica de criação do baralho, sorteio de cartas e regras do jogo.
#
Implementação do cards.go
cards.go
Primeiro vamos declarar 3 estruturas, a sequência de naipes
, valores
e uma struct que representa cada carta.
var naipes = []string{"♠", "♥", "♦", "♣"}
var valores = []string{"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}
type Carta struct {
Naipe string
Valor string
Forca float32
}
Depois criamos uma função para criar o baralho. Um for dentro de um for,a única coisa que temos que prestar atenção é que aqui definimos a força de cada carta, para resolver isso defini a Forca como um float32 e cada naipe adiciona 0.1 na força da carta.
func criarBaralho() []Carta {
baralho := []Carta{}
for j, valor := range valores {
for i, naipe := range naipes {
baralho = append(baralho, Carta{
Naipe: naipe,
Valor: valor,
Forca: float32(j) + float32(i)/10,
})
}
}
return baralho
}
E depois criamos uma função para “embaralhar” as cartas:
func embaralhar(baralho []Carta) {
rand.Shuffle(len(baralho), func(i, j int) {
baralho[i], baralho[j] = baralho[j], baralho[i]
})
}
O arquivo cards.go
completo fica assim:
package main
import (
"math/rand"
)
var naipes = []string{"♦", "♠", "♥", "♣"}
var valores = []string{"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}
type Carta struct {
Naipe string
Valor string
Forca float32
}
func criarBaralho() []Carta {
baralho := []Carta{}
for j, valor := range valores {
for i, naipe := range naipes {
baralho = append(baralho, Carta{
Naipe: naipe,
Valor: valor,
Forca: float32(j) + float32(i)/10,
})
}
}
return baralho
}
func embaralhar(baralho []Carta) {
rand.Shuffle(len(baralho), func(i, j int) {
baralho[i], baralho[j] = baralho[j], baralho[i]
})
}
Amanhã fazemos o main.go e terminamos o mini jogo.