jogo21 project
This commit is contained in:
parent
3a67dd5e6a
commit
dde5d48c40
17 changed files with 387 additions and 7 deletions
|
|
@ -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";
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
package com.gabeefranco;
|
||||
|
||||
public enum TipoOperacao {
|
||||
DEPOSITO, RETIRADA
|
||||
}
|
||||
1
jogo21/.tool-versions
Normal file
1
jogo21/.tool-versions
Normal file
|
|
@ -0,0 +1 @@
|
|||
java openjdk-25
|
||||
BIN
jogo21/Jogo21.png
Normal file
BIN
jogo21/Jogo21.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
33
jogo21/README.md
Normal file
33
jogo21/README.md
Normal file
|
|
@ -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
|
||||
```
|
||||
59
jogo21/estrutura.puml
Normal file
59
jogo21/estrutura.puml
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
@startuml Jogo21
|
||||
|
||||
enum Naipe {
|
||||
OUROS
|
||||
PAUS
|
||||
COPAS
|
||||
ESPADAS
|
||||
}
|
||||
|
||||
class Carta {
|
||||
-naipe:Naipe
|
||||
-numero:int
|
||||
-valor:int
|
||||
}
|
||||
|
||||
class Baralho {
|
||||
-cartas:List<Carta>
|
||||
+embaralhar()void
|
||||
+distribuir(destino: Mao)Carta
|
||||
}
|
||||
|
||||
class Mao {
|
||||
-cartas:List<Carta>
|
||||
+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<Jogador>
|
||||
-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
|
||||
58
jogo21/pom.xml
Normal file
58
jogo21/pom.xml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.gabeefranco</groupId>
|
||||
<artifactId>jogo21</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.release>25</maven.compiler.release>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- JUnit Jupiter para testes unitários -->
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<version>5.10.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Compilação com Java 25 -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.11.0</version>
|
||||
<configuration>
|
||||
<release>25</release>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Execução dos testes JUnit -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>3.1.2</version>
|
||||
<configuration>
|
||||
<useModulePath>false</useModulePath>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Execução da classe principal -->
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
1
jogo21/run.sh
Executable file
1
jogo21/run.sh
Executable file
|
|
@ -0,0 +1 @@
|
|||
mvn exec:java -Dexec.mainClass="com.gabeefranco.jogo21.App"
|
||||
11
jogo21/src/main/java/com/gabeefranco/jogo21/App.java
Executable file
11
jogo21/src/main/java/com/gabeefranco/jogo21/App.java
Executable file
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
20
jogo21/src/main/java/com/gabeefranco/jogo21/Baralho.java
Executable file
20
jogo21/src/main/java/com/gabeefranco/jogo21/Baralho.java
Executable file
|
|
@ -0,0 +1,20 @@
|
|||
package com.gabeefranco.jogo21;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class Baralho {
|
||||
private final List<Carta> 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);
|
||||
}
|
||||
}
|
||||
20
jogo21/src/main/java/com/gabeefranco/jogo21/Carta.java
Executable file
20
jogo21/src/main/java/com/gabeefranco/jogo21/Carta.java
Executable file
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
54
jogo21/src/main/java/com/gabeefranco/jogo21/Jogador.java
Executable file
54
jogo21/src/main/java/com/gabeefranco/jogo21/Jogador.java
Executable file
|
|
@ -0,0 +1,54 @@
|
|||
package com.gabeefranco.jogo21;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class Jogador {
|
||||
private final String nome;
|
||||
private final List<Carta> 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 + ")";
|
||||
}
|
||||
}
|
||||
80
jogo21/src/main/java/com/gabeefranco/jogo21/Mesa.java
Executable file
80
jogo21/src/main/java/com/gabeefranco/jogo21/Mesa.java
Executable file
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
5
jogo21/src/main/java/com/gabeefranco/jogo21/Naipe.java
Normal file
5
jogo21/src/main/java/com/gabeefranco/jogo21/Naipe.java
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
package com.gabeefranco.jogo21;
|
||||
|
||||
public enum Naipe {
|
||||
OUROS, PAUS, COPAS, ESPADAS
|
||||
}
|
||||
16
jogo21/src/main/java/com/gabeefranco/jogo21/Valor.java
Normal file
16
jogo21/src/main/java/com/gabeefranco/jogo21/Valor.java
Normal file
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
13
jogo21/src/test/java/com/gabeefranco/AppTest.java
Normal file
13
jogo21/src/test/java/com/gabeefranco/AppTest.java
Normal file
|
|
@ -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.");
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue