From dde5d48c4080c7c34b27fa9d76fddfab0037a3a6 Mon Sep 17 00:00:00 2001 From: Gabriel Franco Date: Mon, 31 Aug 2026 10:02:20 -0300 Subject: [PATCH] jogo21 project --- .../gabeefranco/ContaCorrenteComExtrato.java | 9 +- .../main/java/com/gabeefranco/Operacao.java | 9 +- .../java/com/gabeefranco/TipoOperacao.java | 5 ++ jogo21/.tool-versions | 1 + jogo21/Jogo21.png | Bin 0 -> 39467 bytes jogo21/README.md | 33 ++++++++ jogo21/estrutura.puml | 59 +++++++++++++ jogo21/pom.xml | 58 +++++++++++++ jogo21/run.sh | 1 + .../main/java/com/gabeefranco/jogo21/App.java | 11 +++ .../java/com/gabeefranco/jogo21/Baralho.java | 20 +++++ .../java/com/gabeefranco/jogo21/Carta.java | 20 +++++ .../java/com/gabeefranco/jogo21/Jogador.java | 54 ++++++++++++ .../java/com/gabeefranco/jogo21/Mesa.java | 80 ++++++++++++++++++ .../java/com/gabeefranco/jogo21/Naipe.java | 5 ++ .../java/com/gabeefranco/jogo21/Valor.java | 16 ++++ .../test/java/com/gabeefranco/AppTest.java | 13 +++ 17 files changed, 387 insertions(+), 7 deletions(-) create mode 100644 contacorrente/src/main/java/com/gabeefranco/TipoOperacao.java create mode 100644 jogo21/.tool-versions create mode 100644 jogo21/Jogo21.png create mode 100644 jogo21/README.md create mode 100644 jogo21/estrutura.puml create mode 100644 jogo21/pom.xml create mode 100755 jogo21/run.sh create mode 100755 jogo21/src/main/java/com/gabeefranco/jogo21/App.java create mode 100755 jogo21/src/main/java/com/gabeefranco/jogo21/Baralho.java create mode 100755 jogo21/src/main/java/com/gabeefranco/jogo21/Carta.java create mode 100755 jogo21/src/main/java/com/gabeefranco/jogo21/Jogador.java create mode 100755 jogo21/src/main/java/com/gabeefranco/jogo21/Mesa.java create mode 100644 jogo21/src/main/java/com/gabeefranco/jogo21/Naipe.java create mode 100644 jogo21/src/main/java/com/gabeefranco/jogo21/Valor.java create mode 100644 jogo21/src/test/java/com/gabeefranco/AppTest.java diff --git a/contacorrente/src/main/java/com/gabeefranco/ContaCorrenteComExtrato.java b/contacorrente/src/main/java/com/gabeefranco/ContaCorrenteComExtrato.java index 8058657..7552503 100644 --- a/contacorrente/src/main/java/com/gabeefranco/ContaCorrenteComExtrato.java +++ b/contacorrente/src/main/java/com/gabeefranco/ContaCorrenteComExtrato.java @@ -49,7 +49,7 @@ public class ContaCorrenteComExtrato { if (valor <= 0) { throw new IllegalArgumentException("Valor do depósito deve ser positivo."); } - extrato[extratoIdx] = new Operacao(LocalDate.now(), "DEPOSITO", valor); + extrato[extratoIdx] = new Operacao(LocalDate.now(), TipoOperacao.DEPOSITO, valor); extratoIdx++; saldo += valor; } @@ -64,7 +64,7 @@ public class ContaCorrenteComExtrato { if (valor >= saldo) { throw new IllegalArgumentException("Saldo insuficiente."); } - extrato[extratoIdx] = new Operacao(LocalDate.now(), "RETIRADA", valor); + extrato[extratoIdx] = new Operacao(LocalDate.now(), TipoOperacao.RETIRADA, valor); extratoIdx++; saldo -= valor; } @@ -85,7 +85,7 @@ public class ContaCorrenteComExtrato { if (!contaDestino.isAtiva()) { throw new IllegalStateException("Conta destino inativa"); } - extrato[extratoIdx] = new Operacao(LocalDate.now(), "RETIRADA", valor); + extrato[extratoIdx] = new Operacao(LocalDate.now(), TipoOperacao.RETIRADA, valor); extratoIdx++; // Faz a transferencia saldo -= valor; @@ -124,7 +124,8 @@ public class ContaCorrenteComExtrato { Operacao op = extrato[i]; if (op != null && op.getData().getYear() == ano && op.getData().getMonthValue() == mes) { String dataFormatada = op.getData().format(DateTimeFormatter.ofPattern("dd/MM/yyyy")); - resultado += "OPERAÇÃO EM " + dataFormatada + ": TIPO=" + op.getTipo() + ", VALOR=" + op.getValor() + resultado += "OPERAÇÃO EM " + dataFormatada + ": TIPO=" + op.getTipo().toString() + ", VALOR=" + + op.getValor() + "\n"; } diff --git a/contacorrente/src/main/java/com/gabeefranco/Operacao.java b/contacorrente/src/main/java/com/gabeefranco/Operacao.java index 8901e53..ccdad2a 100644 --- a/contacorrente/src/main/java/com/gabeefranco/Operacao.java +++ b/contacorrente/src/main/java/com/gabeefranco/Operacao.java @@ -4,12 +4,15 @@ import java.time.LocalDate; public class Operacao { private LocalDate data; - private String tipo; + private TipoOperacao tipo; private double valor; - public Operacao(LocalDate data, String tipo, double valor) { + public Operacao(LocalDate data, TipoOperacao tipo, double valor) { this.data = data; this.tipo = tipo; + if (valor < 0) { + throw new IllegalArgumentException("Valor de operação não pode ser negativo"); + } this.valor = valor; } @@ -17,7 +20,7 @@ public class Operacao { return data; } - public String getTipo() { + public TipoOperacao getTipo() { return tipo; } diff --git a/contacorrente/src/main/java/com/gabeefranco/TipoOperacao.java b/contacorrente/src/main/java/com/gabeefranco/TipoOperacao.java new file mode 100644 index 0000000..a25cd5b --- /dev/null +++ b/contacorrente/src/main/java/com/gabeefranco/TipoOperacao.java @@ -0,0 +1,5 @@ +package com.gabeefranco; + +public enum TipoOperacao { + DEPOSITO, RETIRADA +} diff --git a/jogo21/.tool-versions b/jogo21/.tool-versions new file mode 100644 index 0000000..054715b --- /dev/null +++ b/jogo21/.tool-versions @@ -0,0 +1 @@ +java openjdk-25 diff --git a/jogo21/Jogo21.png b/jogo21/Jogo21.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5296eeffa60d487c301d4dfa622e00737d4dc6 GIT binary patch literal 39467 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 literal 0 HcmV?d00001 diff --git a/jogo21/README.md b/jogo21/README.md new file mode 100644 index 0000000..c3defbb --- /dev/null +++ b/jogo21/README.md @@ -0,0 +1,33 @@ +# jogo21 + +Projeto Maven criado automaticamente com Java 25 e JUnit 5. + +## Requisitos + +- Java 25 +- Maven + +## Como compilar + +```bash +mvn compile +``` + +## Como executar + +```bash +chmod +x run.sh +./run.sh +``` + +## Como executar os testes + +```bash +mvn test +``` + +## Como gerar o pacote + +```bash +mvn package +``` diff --git a/jogo21/estrutura.puml b/jogo21/estrutura.puml new file mode 100644 index 0000000..309b7e8 --- /dev/null +++ b/jogo21/estrutura.puml @@ -0,0 +1,59 @@ +@startuml Jogo21 + +enum Naipe { + OUROS + PAUS + COPAS + ESPADAS +} + +class Carta { + -naipe:Naipe + -numero:int + -valor:int +} + +class Baralho { + -cartas:List + +embaralhar()void + +distribuir(destino: Mao)Carta +} + +class Mao { + -cartas:List + +adicionar(entra: Carta)void + +calcularValor()int + +estaEstourada()boolean +} + +class Jogador { + -nome:String + -mao:Mao + +jogar()void +} + +class Dealer { + -mao:Mao + +jogar()void +} + +class Jogo { + -jogadores:List + -dealer:Dealer + -baralho:Baralho + +iniciar()void + +finalizar()void +} + +Carta --> Naipe +Baralho "1" *-- "*" Carta +Mao "1" *-- "*" Carta +Baralho ..> Mao +Jogo "1" *-- "*" Jogador +Jogo "1" *-- "1" Dealer +Jogo "1" *-- "1" Baralho +Jogador "1" *-- "1" Mao +Dealer "1" *-- "1" Mao + + +@enduml diff --git a/jogo21/pom.xml b/jogo21/pom.xml new file mode 100644 index 0000000..6466d93 --- /dev/null +++ b/jogo21/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + com.gabeefranco + jogo21 + 1.0-SNAPSHOT + + + 25 + UTF-8 + + + + + + org.junit.jupiter + junit-jupiter + 5.10.0 + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 25 + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + false + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + + + + diff --git a/jogo21/run.sh b/jogo21/run.sh new file mode 100755 index 0000000..b9220b7 --- /dev/null +++ b/jogo21/run.sh @@ -0,0 +1 @@ +mvn exec:java -Dexec.mainClass="com.gabeefranco.jogo21.App" diff --git a/jogo21/src/main/java/com/gabeefranco/jogo21/App.java b/jogo21/src/main/java/com/gabeefranco/jogo21/App.java new file mode 100755 index 0000000..15c3dac --- /dev/null +++ b/jogo21/src/main/java/com/gabeefranco/jogo21/App.java @@ -0,0 +1,11 @@ +package com.gabeefranco.jogo21; + +public class App { + private static Mesa mesa = new Mesa(); + + public static void main(String[] args) { + while (true) { + mesa.iniciarRodada(); + } + } +} diff --git a/jogo21/src/main/java/com/gabeefranco/jogo21/Baralho.java b/jogo21/src/main/java/com/gabeefranco/jogo21/Baralho.java new file mode 100755 index 0000000..69cb873 --- /dev/null +++ b/jogo21/src/main/java/com/gabeefranco/jogo21/Baralho.java @@ -0,0 +1,20 @@ +package com.gabeefranco.jogo21; + +import java.util.*; + +public class Baralho { + private final List cartas = new ArrayList<>(); + + public Baralho() { + for (Naipe n : Naipe.values()) { + for (Valor v : Valor.values()) { + cartas.add(new Carta(n, v)); + } + } + Collections.shuffle(cartas); + } + + public Carta puxarCarta() { + return cartas.remove(0); + } +} diff --git a/jogo21/src/main/java/com/gabeefranco/jogo21/Carta.java b/jogo21/src/main/java/com/gabeefranco/jogo21/Carta.java new file mode 100755 index 0000000..b7cd71e --- /dev/null +++ b/jogo21/src/main/java/com/gabeefranco/jogo21/Carta.java @@ -0,0 +1,20 @@ +package com.gabeefranco.jogo21; + +public class Carta { + private final Naipe naipe; + private final Valor valor; + + public Carta(Naipe naipe, Valor valor) { + this.naipe = naipe; + this.valor = valor; + } + + public int getPontos() { + return valor.getPontos(); + } + + public String toString() { + return valor + " de " + naipe; + } + +} diff --git a/jogo21/src/main/java/com/gabeefranco/jogo21/Jogador.java b/jogo21/src/main/java/com/gabeefranco/jogo21/Jogador.java new file mode 100755 index 0000000..ca95bac --- /dev/null +++ b/jogo21/src/main/java/com/gabeefranco/jogo21/Jogador.java @@ -0,0 +1,54 @@ +package com.gabeefranco.jogo21; + +import java.util.*; + +public class Jogador { + private final String nome; + private final List mao = new ArrayList<>(); + private int dinheiro; + + public Jogador(String nome, int dinheiroInicial) { + this.nome = nome; + this.dinheiro = dinheiroInicial; + } + + public void receberCarta(Carta c) { + mao.add(c); + } + + public void limparMao() { + mao.clear(); + } + + public int calcularPontuacao() { + int total = 0; + int ases = 0; + for (Carta c : mao) { + total += c.getPontos(); + if (c.getPontos() == 11) + ases++; + } + while (total > 21 && ases > 0) { + total -= 10; + ases--; + } + return total; + } + + public int getDinheiro() { + return dinheiro; + } + + public void ganharDinheiro(int valor) { + dinheiro += valor; + } + + public void perderDinheiro(int valor) { + dinheiro -= valor; + } + + @Override + public String toString() { + return nome + " -> " + mao + " (Pontuação: " + calcularPontuacao() + ", Dinheiro: $" + dinheiro + ")"; + } +} diff --git a/jogo21/src/main/java/com/gabeefranco/jogo21/Mesa.java b/jogo21/src/main/java/com/gabeefranco/jogo21/Mesa.java new file mode 100755 index 0000000..7f8c6f3 --- /dev/null +++ b/jogo21/src/main/java/com/gabeefranco/jogo21/Mesa.java @@ -0,0 +1,80 @@ +package com.gabeefranco.jogo21; + +import java.util.Scanner; + +public class Mesa { + private final Baralho baralho; + private final Jogador jogador; + private final Jogador dealer; + private final Scanner sc; + + public Mesa() { + this.baralho = new Baralho(); + this.jogador = new Jogador("Jogador", 100); + this.dealer = new Jogador("Dealer", 0); + this.sc = new Scanner(System.in); + } + + public void iniciarRodada() { + + System.out.println("Você tem $" + jogador.getDinheiro()); + System.out.print("Digite o valor da aposta: "); + int aposta = sc.nextInt(); + sc.nextLine(); + + if (aposta > jogador.getDinheiro()) { + System.out.println("Você não tem dinheiro suficiente!"); + return; + } + + jogador.limparMao(); + dealer.limparMao(); + + // Distribuição inicial + jogador.receberCarta(baralho.puxarCarta()); + jogador.receberCarta(baralho.puxarCarta()); + dealer.receberCarta(baralho.puxarCarta()); + dealer.receberCarta(baralho.puxarCarta()); + + System.out.println(jogador); + System.out.println("Carta visível do dealer: " + dealer.toString().split(",")[0] + "]"); + + // Turno do jogador + while (true) { + System.out.print("Deseja 'h' para hit ou 's' para stand? "); + String acao = sc.nextLine(); + if (acao.equalsIgnoreCase("h")) { + jogador.receberCarta(baralho.puxarCarta()); + System.out.println(jogador); + if (jogador.calcularPontuacao() > 21) { + System.out.println("Você estourou! Dealer vence."); + jogador.perderDinheiro(aposta); + return; + } + } else { + break; + } + } + + // Turno do dealer + while (dealer.calcularPontuacao() < 17) { + dealer.receberCarta(baralho.puxarCarta()); + } + + System.out.println(dealer); + + // Resultado + int pontosJogador = jogador.calcularPontuacao(); + int pontosDealer = dealer.calcularPontuacao(); + + if (pontosDealer > 21 || pontosJogador > pontosDealer) { + System.out.println("Você venceu!"); + jogador.ganharDinheiro(aposta); + } else if (pontosJogador == pontosDealer) { + System.out.println("Empate! A aposta é devolvida."); + } else { + System.out.println("Dealer venceu!"); + jogador.perderDinheiro(aposta); + } + } +} diff --git a/jogo21/src/main/java/com/gabeefranco/jogo21/Naipe.java b/jogo21/src/main/java/com/gabeefranco/jogo21/Naipe.java new file mode 100644 index 0000000..40ccc0f --- /dev/null +++ b/jogo21/src/main/java/com/gabeefranco/jogo21/Naipe.java @@ -0,0 +1,5 @@ +package com.gabeefranco.jogo21; + +public enum Naipe { + OUROS, PAUS, COPAS, ESPADAS +} diff --git a/jogo21/src/main/java/com/gabeefranco/jogo21/Valor.java b/jogo21/src/main/java/com/gabeefranco/jogo21/Valor.java new file mode 100644 index 0000000..c510518 --- /dev/null +++ b/jogo21/src/main/java/com/gabeefranco/jogo21/Valor.java @@ -0,0 +1,16 @@ +package com.gabeefranco.jogo21; + +public enum Valor { + DOIS(2), TRES(3), QUATRO(4), CINCO(5), SEIS(6), SETE(7), OITO(8), NOVE(9), DEZ(10), + VALETE(10), DAMA(10), REI(10), AS(11); + + private final int pontos; + + private Valor(int pontos) { + this.pontos = pontos; + } + + public int getPontos() { + return pontos; + } +} diff --git a/jogo21/src/test/java/com/gabeefranco/AppTest.java b/jogo21/src/test/java/com/gabeefranco/AppTest.java new file mode 100644 index 0000000..21ff66f --- /dev/null +++ b/jogo21/src/test/java/com/gabeefranco/AppTest.java @@ -0,0 +1,13 @@ +package com.gabeefranco; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +class AppTest { + + @Test + void testApp() { + assertTrue(true, "Teste básico de funcionamento."); + } +}