Pular para o conteúdo principal

victorstein.dev

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

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.