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) {
|
if (valor <= 0) {
|
||||||
throw new IllegalArgumentException("Valor do depósito deve ser positivo.");
|
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++;
|
extratoIdx++;
|
||||||
saldo += valor;
|
saldo += valor;
|
||||||
}
|
}
|
||||||
|
|
@ -64,7 +64,7 @@ public class ContaCorrenteComExtrato {
|
||||||
if (valor >= saldo) {
|
if (valor >= saldo) {
|
||||||
throw new IllegalArgumentException("Saldo insuficiente.");
|
throw new IllegalArgumentException("Saldo insuficiente.");
|
||||||
}
|
}
|
||||||
extrato[extratoIdx] = new Operacao(LocalDate.now(), "RETIRADA", valor);
|
extrato[extratoIdx] = new Operacao(LocalDate.now(), TipoOperacao.RETIRADA, valor);
|
||||||
extratoIdx++;
|
extratoIdx++;
|
||||||
saldo -= valor;
|
saldo -= valor;
|
||||||
}
|
}
|
||||||
|
|
@ -85,7 +85,7 @@ public class ContaCorrenteComExtrato {
|
||||||
if (!contaDestino.isAtiva()) {
|
if (!contaDestino.isAtiva()) {
|
||||||
throw new IllegalStateException("Conta destino inativa");
|
throw new IllegalStateException("Conta destino inativa");
|
||||||
}
|
}
|
||||||
extrato[extratoIdx] = new Operacao(LocalDate.now(), "RETIRADA", valor);
|
extrato[extratoIdx] = new Operacao(LocalDate.now(), TipoOperacao.RETIRADA, valor);
|
||||||
extratoIdx++;
|
extratoIdx++;
|
||||||
// Faz a transferencia
|
// Faz a transferencia
|
||||||
saldo -= valor;
|
saldo -= valor;
|
||||||
|
|
@ -124,7 +124,8 @@ public class ContaCorrenteComExtrato {
|
||||||
Operacao op = extrato[i];
|
Operacao op = extrato[i];
|
||||||
if (op != null && op.getData().getYear() == ano && op.getData().getMonthValue() == mes) {
|
if (op != null && op.getData().getYear() == ano && op.getData().getMonthValue() == mes) {
|
||||||
String dataFormatada = op.getData().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
|
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";
|
+ "\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,15 @@ import java.time.LocalDate;
|
||||||
|
|
||||||
public class Operacao {
|
public class Operacao {
|
||||||
private LocalDate data;
|
private LocalDate data;
|
||||||
private String tipo;
|
private TipoOperacao tipo;
|
||||||
private double valor;
|
private double valor;
|
||||||
|
|
||||||
public Operacao(LocalDate data, String tipo, double valor) {
|
public Operacao(LocalDate data, TipoOperacao tipo, double valor) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this.tipo = tipo;
|
this.tipo = tipo;
|
||||||
|
if (valor < 0) {
|
||||||
|
throw new IllegalArgumentException("Valor de operação não pode ser negativo");
|
||||||
|
}
|
||||||
this.valor = valor;
|
this.valor = valor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -17,7 +20,7 @@ public class Operacao {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTipo() {
|
public TipoOperacao getTipo() {
|
||||||
return tipo;
|
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