Skip to content

Commit 65cedcf

Browse files
authored
Merge pull request #7241 from Josegs95/main
#32 y #33 - Java
2 parents f3c666c + 7368371 commit 65cedcf

File tree

2 files changed

+315
-0
lines changed

2 files changed

+315
-0
lines changed
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
import java.util.Random;
2+
import java.util.Scanner;
3+
4+
public class Josegs95 {
5+
public static void main(String[] args) {
6+
new Josegs95().battleSim();
7+
}
8+
9+
private Superhero deadpool;
10+
private Superhero wolverine;
11+
final Scanner sc = new Scanner(System.in);
12+
private Random rnd = new Random();
13+
14+
public void battleSim(){
15+
// System.out.println("---Opciones---");
16+
// System.out.println("1. Empezar la batalla");
17+
// System.out.println("2. Salir del programa");
18+
19+
try(sc){
20+
// app: while(true){
21+
// System.out.print("Introduzca la opción que desee: ");
22+
// String option = sc.nextLine().strip();
23+
// switch (option){
24+
// case "1":
25+
// initSuperheros();
26+
// battle();
27+
// break;
28+
// case "2":
29+
// System.out.println("Saliendo de la aplicación...");
30+
// break;
31+
// default:
32+
// System.out.println("Opción inválida.");
33+
// }
34+
// }
35+
36+
initSuperheros();
37+
battle();
38+
}
39+
}
40+
41+
private void initSuperheros(){
42+
deadpool = new Superhero("Deadpool", askSuperheroHp("Deadpool"),
43+
10, 100, 25);
44+
wolverine = new Superhero("Wolverine", askSuperheroHp("Wolverine"),
45+
10, 120, 20);
46+
}
47+
48+
private void battle(){
49+
Random rnd = new Random();
50+
Superhero first;
51+
Superhero last;
52+
int turn = 1;
53+
while(true){
54+
System.out.println();
55+
System.out.println("Turno: " + turn++);
56+
System.out.println(deadpool);
57+
System.out.println(wolverine);
58+
59+
if (rnd.nextBoolean()){
60+
first = deadpool;
61+
last = wolverine;
62+
} else{
63+
first = wolverine;
64+
last = deadpool;
65+
}
66+
67+
if (attack(first, last) || attack(last, first))
68+
break;
69+
70+
try{
71+
Thread.sleep(1000);
72+
} catch (InterruptedException e) {
73+
throw new RuntimeException(e);
74+
}
75+
}
76+
}
77+
78+
private boolean attack(Superhero attacker, Superhero defender){
79+
if (attacker.isStunned()){
80+
System.out.println(attacker.getName() + " está regenerandose y no puede atacar");
81+
attacker.setStunned(false);
82+
return false;
83+
}
84+
85+
Integer damage = rnd.nextInt(attacker.getATK_MIN(), attacker.getATK_MAX() + 1);
86+
87+
if (rnd.nextInt(100) <= defender.getEvasion()){
88+
System.out.println(defender.getName() + " esquivó el ataque de " + attacker.getName());
89+
return false;
90+
}
91+
92+
System.out.println(attacker.getName() + " hizo " + damage + " puntos de " +
93+
"daño a " + defender.getName());
94+
defender.takeDamage(damage);
95+
96+
if (!defender.isAlive()){
97+
System.out.println("\n" + attacker);
98+
System.out.println(defender);
99+
System.out.println("¡" + attacker.getName() + " es el ganador!");
100+
return true;
101+
}
102+
103+
if (damage == attacker.getATK_MAX()){
104+
defender.setStunned(true);
105+
}
106+
107+
return false;
108+
}
109+
110+
private Integer askSuperheroHp(String name){
111+
boolean validOption = false;
112+
Integer value = -1;
113+
while (!validOption){
114+
System.out.print("Introduzca la vida inicial de " + name + ": ");
115+
String input = sc.nextLine();
116+
try{
117+
value = Integer.parseInt(input);
118+
validOption = true;
119+
} catch (NumberFormatException e){
120+
System.out.println("Error. Introduzca un número entero por favor");
121+
}
122+
}
123+
return value;
124+
}
125+
126+
public class Superhero{
127+
final private Integer HP_MAX;
128+
final private Integer ATK_MIN;
129+
final private Integer ATK_MAX;
130+
final private Integer EVASION;
131+
132+
private String name;
133+
private Integer hp;
134+
private boolean stunned;
135+
136+
public Superhero(String name, Integer hp, Integer atkMin, Integer atkMax, Integer evasion){
137+
HP_MAX = hp;
138+
ATK_MIN = atkMin;
139+
ATK_MAX = atkMax;
140+
EVASION = evasion;
141+
142+
this.name = name;
143+
this.hp = HP_MAX;
144+
stunned = false;
145+
}
146+
147+
public void takeDamage(Integer damage){
148+
if (damage > hp)
149+
hp = 0;
150+
else
151+
hp -= damage;
152+
}
153+
154+
public String getName() {
155+
return name;
156+
}
157+
158+
public Integer getHp() {
159+
return hp;
160+
}
161+
162+
public Integer getEvasion() {
163+
return EVASION;
164+
}
165+
166+
public Integer getATK_MIN() {
167+
return ATK_MIN;
168+
}
169+
170+
public Integer getATK_MAX() {
171+
return ATK_MAX;
172+
}
173+
174+
public boolean isStunned() {
175+
return stunned;
176+
}
177+
178+
public void setStunned(boolean stunned) {
179+
this.stunned = stunned;
180+
}
181+
182+
public boolean isAlive(){
183+
return hp > 0;
184+
}
185+
186+
@Override
187+
public String toString() {
188+
return name + "(" + hp + "/" + HP_MAX + ")";
189+
}
190+
}
191+
}
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
import java.util.Scanner;
2+
3+
public class Josegs95 {
4+
public static void main(String[] args) {
5+
new Josegs95().rescueMickey();
6+
}
7+
8+
private String[][] maze;
9+
private int mickeyYCoord = 4;
10+
private int mickeyXCoord = 0;
11+
12+
final private Scanner sc = new Scanner(System.in);
13+
14+
public void rescueMickey(){
15+
maze = initMaze();
16+
17+
try(sc){
18+
boolean exit = false;
19+
while(!exit){
20+
printMaze();
21+
String direction = askDirection();
22+
switch (direction){
23+
case "arriba":
24+
exit = moveMickey(-1, 0);
25+
break;
26+
case "abajo":
27+
exit = moveMickey(1, 0);
28+
break;
29+
case "derecha":
30+
exit = moveMickey(0, 1);
31+
break;
32+
case "izquierda":
33+
exit = moveMickey(0, -1);
34+
break;
35+
}
36+
System.out.println();
37+
}
38+
printMaze();
39+
}
40+
}
41+
42+
private String[][] initMaze(){
43+
String[][] maze = {
44+
{" ", " ", " ", " ", " ", " "},
45+
{" ", "X", " ", " ", "X", " "},
46+
{" ", " ", "X", " ", "X", " "},
47+
{"X", " ", "X", " ", "X", " "},
48+
{"M", " ", "X", "X", "X", " "},
49+
{"X", "X", "S", " ", " ", " "}
50+
};
51+
52+
return maze;
53+
}
54+
55+
private String askDirection(){
56+
while (true){
57+
System.out.print("¿A dónde se quiere desplazar (arriba/abajo/izquierda/derecha)?: ");
58+
String input = sc.nextLine().strip().toLowerCase();
59+
switch (input){
60+
case "arriba":
61+
case "abajo":
62+
case "derecha":
63+
case "izquierda":
64+
return input;
65+
default:
66+
System.out.println("Opción no válida");
67+
}
68+
}
69+
}
70+
71+
public boolean moveMickey(int iChange, int jChange){
72+
if (iChange != 0){
73+
if (iChange > 0){
74+
if (mickeyYCoord == maze.length - 1){
75+
System.out.println("No se puede bajar más");
76+
return false;
77+
}
78+
}else{
79+
if (mickeyYCoord == 0){
80+
System.out.println("No se puede subir más");
81+
return false;
82+
}
83+
}
84+
} else{
85+
if (jChange > 0){
86+
if (mickeyXCoord == maze[0].length - 1){
87+
System.out.println("No se puede ir más a la derecha");
88+
return false;
89+
}
90+
}else{
91+
if (mickeyXCoord == 0){
92+
System.out.println("No se puede ir más a la izquierda");
93+
return false;
94+
}
95+
}
96+
}
97+
98+
if(maze[mickeyYCoord + iChange][mickeyXCoord + jChange].equals("X")){
99+
System.out.println("Camino bloqueado, no se puede pasar.");
100+
return false;
101+
}
102+
if (maze[mickeyYCoord + iChange][mickeyXCoord + jChange].equals("S")) {
103+
maze[mickeyYCoord][mickeyXCoord] = " ";
104+
maze[mickeyYCoord + iChange][mickeyXCoord + jChange] = "M";
105+
System.out.println("¡Felicidades, has llegado a la salida!");
106+
return true;
107+
}
108+
109+
maze[mickeyYCoord][mickeyXCoord] = " ";
110+
maze[mickeyYCoord + iChange][mickeyXCoord + jChange] = "M";
111+
mickeyYCoord += iChange;
112+
mickeyXCoord += jChange;
113+
114+
return false;
115+
}
116+
117+
private void printMaze(){
118+
for (int i = 0; i < maze.length; i++){
119+
for (int j = 0; j < maze[0].length; j++)
120+
System.out.print("[" + maze[i][j] + "]");
121+
System.out.println();
122+
}
123+
}
124+
}

0 commit comments

Comments
 (0)