-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBot.java
More file actions
98 lines (85 loc) · 3.23 KB
/
Bot.java
File metadata and controls
98 lines (85 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.example.yugioh;
import java.util.Random;
public class Bot extends Jugador{
private Jugador oponente;
public Bot(Jugador oponente, Deck deck) {
super("IA", deck);
this.oponente = oponente;
}
// Método principal de la IA para decidir su acción
public void tomarDecision() {
if (puedeAtacar()) {
realizarAtaque();
} else if (puedeColocarCarta()) {
colocarCarta();
} else {
pasarTurno();
}
}
// Verifica si hay cartas disponibles para atacar
private boolean puedeAtacar() {
return this.getTablero().contarCartasMonstruo() > 0;
}
// Lógica para realizar un ataque
private void realizarAtaque() {
CartaMonstruo[] monstruos = this.getTablero().getCartasMonstruo();
CartaMonstruo atacante = seleccionarCartaAleatoria(monstruos);
CartaMonstruo defensor = seleccionarDefensor();
if (defensor != null) {
int resultado = atacante.getAtk() - defensor.getDefensa();
if (resultado > 0) {
oponente.getTablero().enviarAlCementerio(defensor);
System.out.println(atacante.getNomcarta() + " destruye a " + defensor.getNomcarta());
} else {
System.out.println(atacante.getNomcarta() + " no pudo destruir a " + defensor.getNomcarta());
}
} else {
realizarAtaqueDirecto(atacante);
}
}
// Selección aleatoria de un monstruo para atacar
private CartaMonstruo seleccionarCartaAleatoria(CartaMonstruo[] monstruos) {
Random random = new Random();
for (CartaMonstruo monstruo : monstruos) {
if (monstruo != null) {
return monstruo;
}
}
return null;
}
// Selección automática del defensor
private CartaMonstruo seleccionarDefensor() {
CartaMonstruo[] defensores = oponente.getTablero().getCartasMonstruo();
for (CartaMonstruo defensor : defensores) {
if (defensor != null) {
return defensor;
}
}
return null;
}
private void realizarAtaqueDirecto(CartaMonstruo atacante) {
int daño = atacante.getAtk();
oponente.setPuntosDeVida(oponente.getPuntosDeVida() - daño);
System.out.println("Ataque directo realizado por " + atacante.getNomcarta() + ". Daño: " + daño);
}
// Verifica si puede colocar cartas
private boolean puedeColocarCarta() {
return !this.getMano().isEmpty();
}
// Coloca una carta en el tablero
private void colocarCarta() {
Carta carta = this.getMano().get(0);
if (carta instanceof CartaMonstruo) {
if (this.getTablero().colocarCartaMonstruo((CartaMonstruo) carta)) {
this.getMano().remove(carta);
System.out.println("Carta de monstruo colocada: " + carta.getNomcarta());
}
} else {
System.out.println("No se puede colocar esta carta.");
}
}
// Pasa el turno
private void pasarTurno() {
System.out.println("La IA decide pasar su turno.");
}
}