walka żołnierzy
import java.util.Scanner;
import java.util.Random;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
class Soldier {
private String klasa;
private int pz;
int attackMin;
int attackMax;
private int defense;
private int range;
int criticChange;
int blockChange;
boolean alive;
Random random = new Random();
//konstruktor obiektów klasy Soldier
public Soldier(String klasa, int pz, int attackMin, int attackMax, int defense, int range, int criticChange, int blockChange, boolean alive) {
this.klasa = klasa;
this.pz = pz;
this.attackMin = attackMin;
this.attackMax = attackMax;
this.defense = defense;
this.range = range;
this.criticChange = criticChange;
this.blockChange = blockChange;
this.alive = alive;
}
// seter pozwalający zmienić Pz w trakcie walk
public void setPz(int pz) {
this.pz = pz;
}
//seter pozwalający zmienic żyjącego żołnierza w martwego gdy ginie
void setAlive(boolean alive) {
this.alive = alive;
}
//pełen zestaw seterów umożliwiający zmianę każdego parametru obiektu
void setAtrybut(String klasa, int pz, int attackMin, int attackMax, int defense, int range, int criticChange, int blockChange, boolean alive) {
this.klasa = klasa;
this.pz = pz;
this.attackMin = attackMin;
this.attackMax = attackMax;
this.defense = defense;
this.range = range;
this.criticChange = criticChange;
this.blockChange = blockChange;
this.alive = alive;
}
// gettery zwracające informacje odnośnie parametrów obiektów klasy soldier
public String getKlasa() {
return klasa;
}
public int getPz() {
return pz;
}
public int getAttackMin() {
return attackMin;
}
public int getAttackMax() {
return attackMax;
}
public int getDefense() {
return defense;
}
public int getRange() {
return range;
}
public int getCriticChange() {
return criticChange;
}
public int getBlockChange() {
return blockChange;
}
public boolean getAlive() {
return alive;
}
//metoda która ustala jak silny atak żołnierz przeprowadzi po kolei jest to tak że mamy pewne prawdopodobieństwo że przeciwnik zablokuje cios i jeśli to zrobi wyświetli się informacja o tym i metoda się kończy, jeśli przeciwnik nie zablokuje ciosu wtedy tworzymy listę wszystkich możliwych wartości ataku mieszczących się pomiędzy wartościami minimalnego i maksymalnego ataku (włącznie z nimi) następnie używamy metody shuffle do losowego ustawienia kolejności tych wartości i wybieramy pierwszy z nich, mamy też prawdopodobieństwo krytycznego ataku i jeśli tak się zdarzy to potrajamy wartość ataku żołnierza, następnie od wartości ataku który nam wyszedl odejmujemy wartość obrony przeciwnika i o tyle odejmujemy jego PZ. wyświetlamy informacje o tym kto kogo zaatakował i ile obrażeń mu zadał i jeśli wartość PZ przeciwnika spada do 0 lub poniżej wtedy pojawia się informacja że żołnierz zabił przeciwnika i ustalane są jego parametry na imiezbity wszystkie wartości na 0 i alive na false czyli że nie żyje
public void attack(Soldier enemy) {
int ifblock = random.nextInt(101);
int changeBlockSoldier = enemy.getBlockChange();
if (ifblock < changeBlockSoldier) {
System.out.println(enemy.getKlasa() + " zablokował cios " + klasa + "a");
System.out.println(enemy.getKlasa() + "owi pozostało " + enemy.getPz() + " PZ");
} else {
ArrayList <Integer> attackSoldier = new ArrayList<>();
for (int i = attackMin; i <= attackMax; i++) {
attackSoldier.add(i);
}
Collections.shuffle(attackSoldier);
int ifcritic = random.nextInt(101);
int currentAttack;
int criticChangeSoldier = criticChange;
if (ifcritic <= criticChangeSoldier) {
System.out.println("CIOS KRYTYCZNY!");
currentAttack = attackSoldier.get(0) * 3 - enemy.getDefense();
} else {
currentAttack = attackSoldier.get(0) - enemy.getDefense();
}
System.out.println("atak wynosi " + attackSoldier.get(0));
System.out.println(klasa + " atakuje " + enemy.getKlasa() + "a i zadaje mu " + currentAttack + " obrażeń");
if ((enemy.getPz() - currentAttack > enemy.getPz())) {
enemy.setPz(enemy.getPz());
} else {
enemy.setPz(enemy.getPz() - currentAttack);
}
System.out.println(enemy.getKlasa() + "owi pozostało " + enemy.getPz() + " PZ");
}
if (enemy.getPz() < 1) {
System.out.println(klasa + " zabił " + enemy.getKlasa() + "a");
enemy.setAtrybut(enemy.getKlasa() + ": zabity", 0, 0, 0, 0, 0, 0, 0, false);
}
}// koniec metody attack
@Override
public String toString() {
if (pz > 0) {
return (klasa + "H" + pz + "A" + attackMin + "-" + attackMax + "D" + defense + "R" + range);
} else {
return (klasa + " 0 , 0 , 0");
}
}
public static Soldier createSoldier(int numer) {
switch (numer) {
case 1:
return new Piechur();
case 2:
return new Pikinier();
case 3:
return new Calvary();
case 4:
return new Czarownik();
case 5:
return new Lucznik();
case 6:
return new Lowca();
default:
return null;
}
} // koniec metody Createsoldier
} // koniec klasy Soldier
//pierwsza klasa żołnierza to piechur który zawsze będzie miał te same parametry na początku każdej walki
class Piechur extends Soldier {
public Piechur() {
super("Piechur", 600, 40, 60, 5, 1, 5, 10, true);
}
} // koniec klasy Piechur
// druga klasa żołnierza konik
class Calvary extends Soldier {
public Calvary() {
super("Konik", 800, 50, 80, 8, 1, 6, 8, true);
}
@Override
public void attack(Soldier enemy) {
if (enemy instanceof Pikinier) {
int originalAttackMin = this.attackMin;
int originalAttackMax = this.attackMax;
int originalCriticChange = this.criticChange;
this.criticChange /= 2;
this.attackMin /= 2;
this.attackMax /= 2;
super.attack(enemy);
this.criticChange = originalCriticChange;
this.attackMin = originalAttackMin;
this.attackMax = originalAttackMax;
} else {
super.attack(enemy);
}
}
} // koniec klasy Calvary
//trzecia klasa żołnierza pikinier który jest słabszy nieco od piechura ale śmiertelnie groźny dla konika
class Pikinier extends Soldier {
public Pikinier() {
// "klasa", PZ, Attack D R szansa na crytyka i blok
super("Pikinier", 500, 30, 60, 4, 1, 5, 7, true);
}
// nadpisujemy wartość ataku pikiniera przeciw kawalerii tak by zadawał jej ciosy z podwójnym atakiem
@Override
public void attack(Soldier enemy) {
if (enemy instanceof Calvary) {
int originalAttackMin = this.attackMin;
int originalAttackMax = this.attackMax;
int originalCriticChange = this.criticChange;
this.criticChange *= 2;
this.attackMin *= 2;
this.attackMax *= 2;
super.attack(enemy);
this.attackMin = originalAttackMin;
this.attackMax = originalAttackMax;
this.criticChange = originalCriticChange;
} else {
super.attack(enemy);
}
}
} // koniec klasy Pikinier
class Lucznik extends Soldier {
public Lucznik() {
super("Łucznik", 400, 40, 60, 2, 3, 6, 5, true);
}
} // koniec klasy Lucznik
class Czarownik extends Soldier {
public Czarownik() {
super("Czarownik", 400, 30, 60, 15, 3, 8, 10, true);
}
public void dodajAtrybut(Soldier sojusznik) {
sojusznik.setAtrybut(sojusznik.getKlasa(), sojusznik.getPz() + 10, sojusznik.getAttackMin() + 5, sojusznik.getAttackMax() + 5, sojusznik.getDefense() + 2, sojusznik.getRange(),
sojusznik.getCriticChange() + 1, sojusznik.getBlockChange() + 1, sojusznik.getAlive());
System.out.println("Czarownik dodał " + sojusznik.getKlasa() + "owi atrybuty i teraz jest silniejszy. Oto jego nowe atrybuty: H: " + sojusznik.getPz() + " attackMin-attackMax: " +
sojusznik.getAttackMin() + "-" + sojusznik.getAttackMax() + " obrona: " + sojusznik.getDefense() + " zasięg: " + sojusznik.getRange() + " szansa na krytyka: " + sojusznik.getCriticChange() +
" szansa na blok: " + sojusznik.getBlockChange());
}
} // koniec klasy czarownik
class Lowca extends Soldier {
public Lowca() {
super("Łowca", 350, 60, 90, 2, 3, 10, 2, true);
}
} // koniec klasy Łowca
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
// stworzone obiekty wszystkich klas
Pikinier pikinier = new Pikinier();
Piechur piechur = new Piechur();
Calvary konik = new Calvary();
Czarownik czarownik = new Czarownik();
Lucznik lucznik = new Lucznik();
Lowca lowca = new Lowca();
ArrayList <Soldier> zolnierze = new ArrayList <Soldier> (Arrays.asList(piechur, pikinier, konik, czarownik, lucznik, lowca));
// wyświetlamy informacje o atrybutach każdego typu zolnierzy
System.out.println("Oto wszystkie klasy żołnierzy wraz z ich atrybutami: klasa(H pz, A min atak-max atak, D obrona, R zasieg, SA szansa na krytyka, SB szansa na blok");
for (Soldier zolnierz : zolnierze) {
System.out.println(zolnierz + ", SA" + zolnierz.getCriticChange() + ", SB" + zolnierz.getBlockChange() + ")");
}
System.out.println();
System.out.println("Ważne informacje odnośnie Konika i Pikiniera: pikinier atakuje konika z podwójnym atakiem i ma 2 razy większe szanse na atak krytyczny niż gdy atakuje inny cel, natomiast konik atakuje z 2 razy mniejsza siła i ma 2 razy mniejsza szansę na krytyczne obrażenia gdy atakuje pikiniera niż kogoś innego");
System.out.println();
System.out.println("Ważne informacje odnośnie Czarownika: może on zaatakować przeciwnika lub wzmocnić sojusznika dodając mu +10 PZ, +5 do ataku, +5 do obrony, +1 do szansy na atak krytyczny i blok ");
System.out.println();
//listy przechowujące obiekty żołnierzy gracza pierwszej i drugiej lini
ArrayList <Soldier> playerSoldierLine1 = new ArrayList <>();
ArrayList <Soldier> playerSoldierLine2 = new ArrayList<>();
//listy przechowujące obiekty żołnierzy bota pierwszej i drugiej lini
ArrayList <Soldier> botSoldierLine1 = new ArrayList<>();
ArrayList <Soldier> botSoldierLine2 = new ArrayList<>();
System.out.println();
System.out.println("Oto pole walki, u góry będą żołnierze bota, a na dole są twoi żołnierze, 3 typy żołnierzy może atakować tylko pierwszą linię wroga a pozostałe 3 mogą atakować dowolny cel");
System.out.println("To linia bota");
//wyświetlamy schemat planszy gdzie jest pokazane jak żołnierze będą ułożeni i mamy info gdzie jest linia bota a gdzie nasza linia
System.out.println();
System.out.println(" 4[ numer cztery ] 5[ numer pięć ]");
System.out.println("1[ numer jeden ] 2[ numer dwa ] 3[ numer trzy ]");
System.out.println();
System.out.println("to Twoja linia");
System.out.println();
System.out.println("1[ numer jeden ] 2[ numer dwa ] 3[ numer trzy ]");
System.out.println(" 4[ numer cztery ] 5[ numer pięć ]");
//podajemy klasę żołnierza pierwszego i umieszczamy na polu walki
System.out.println("");
System.out.println("Podaj teraz klasę żołnierza którego chcesz umieścić na pierwszym miejscu. masz do wyboru 1.piechur, 2.pikinier, 3.konik, 4.czarownik, 5.lucznik, 6.lowca. Wpisz odpowiednią liczbę");
int soldier1 = scanner.nextInt();
while (soldier1 == 0 || soldier1 > 6 || soldier1 < 1) {
System.out.println("Podałeś zła wartość, spróbuj ponownie");
soldier1 = scanner.nextInt();
}
Soldier playerSoldier1 = Soldier.createSoldier(soldier1);
playerSoldierLine1.add(playerSoldier1);
System.out.println();
System.out.println("1[" + playerSoldier1 + "] 2[ numer dwa ] 3[ numer trzy ]");
System.out.println(" 4[ numer cztery ] 5[ numer pięć ]");
// teraz żołnierz numer 2
System.out.println("");
System.out.println("Podaj teraz klasę żołnierza którego chcesz umieścić na drugim miejscu. masz do wyboru 1.piechur, 2.pikinier, 3.konik, 4.czarownik, 5.lucznik, 6.lowca. Wpisz odpowiednią liczbę");
int soldier2 = scanner.nextInt();
while (soldier2 == 0 || soldier2 > 6 || soldier2 < 1) {
System.out.println("Podałeś zła wartość, spróbuj ponownie");
soldier2 = scanner.nextInt();
}
Soldier playerSoldier2 = Soldier.createSoldier(soldier2);
playerSoldierLine1.add(playerSoldier2);
System.out.println();
System.out.println("1[" + playerSoldier1 + "] 2[" + playerSoldier2 + "] 3[ numer trzy ]");
System.out.println(" 4[ numer cztery ] 5[ numer pięć ]");
// teraz żołnierz 3
System.out.println("");
System.out.println("Podaj teraz klasę żołnierza którego chcesz umieścić na trzecim miejscu. masz do wyboru 1.piechur, 2.pikinier, 3.konik, 4.czarownik, 5.lucznik, 6.lowca. Wpisz odpowiednią liczbę");
int soldier3 = scanner.nextInt();
while (soldier3 == 0 || soldier3 > 6 || soldier3 < 1) {
System.out.println("Podałeś zła wartość, spróbuj ponownie");
soldier3 = scanner.nextInt();
}
Soldier playerSoldier3 = Soldier.createSoldier(soldier3);
playerSoldierLine1.add(playerSoldier3);
System.out.println();
System.out.println("1[" + playerSoldier1 + "] 2[" + playerSoldier2 + "] 3[" + playerSoldier3 + "]");
System.out.println(" 4[ numer cztery ] 5[ numer pięć ]");
// teraz żołnierz 4
System.out.println("");
System.out.println("Podaj teraz klasę żołnierza którego chcesz umieścić na czwartym miejscu. masz do wyboru 1.piechur, 2.pikinier, 3.konik, 4.czarownik, 5.lucznik, 6.lowca. Wpisz odpowiednią liczbę, tylko pamiętaj że pierwsze 3 klasy nie będą mogły odrazu atakowac");
int soldier4 = scanner.nextInt();
while (soldier4 == 0 || soldier4 > 6 || soldier4 < 1) {
System.out.println("Podałeś zła wartość, spróbuj ponownie");
soldier4 = scanner.nextInt();
}
Soldier playerSoldier4 = Soldier.createSoldier(soldier4);
playerSoldierLine2.add(playerSoldier4);
System.out.println();
System.out.println("1[" + playerSoldier1 + "] 2[" + playerSoldier2 + "] 3[" + playerSoldier3 + "]");
System.out.println(" 4[" + playerSoldier4 + "] 5[ numer pięć ]");
//teraz żołnierz 5
System.out.println("");
System.out.println("Podaj teraz klasę żołnierza którego chcesz umieścić na piątym miejscu. masz do wyboru 1.piechur, 2.pikinier, 3.konik, 4.czarownik, 5.lucznik, 6.lowca. Wpisz odpowiednią liczbę, tylko pamiętaj że pierwsze 3 klasy nie będą mogły odrazu atakowac");
int soldier5 = scanner.nextInt();
while (soldier5 == 0 || soldier5 > 6 || soldier5 < 1) {
System.out.println("Podałeś zła wartość, spróbuj ponownie");
soldier5 = scanner.nextInt();
}
Soldier playerSoldier5 = Soldier.createSoldier(soldier5);
playerSoldierLine2.add(playerSoldier5);
System.out.println();
System.out.println("1[" + playerSoldier1 + "] 2[" + playerSoldier2 + "] 3[" + playerSoldier3 + "]");
System.out.println(" 4[" + playerSoldier4 + "] 5[" + playerSoldier5 + "]");
// teraz losowo stworzymy żołnierzy dla bota
ArrayList <Integer> lineBot1 = new ArrayList<Integer>(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3));
Collections.shuffle(lineBot1);
Soldier botSoldier1 = Soldier.createSoldier(lineBot1.get(0));
Soldier botSoldier2 = Soldier.createSoldier(lineBot1.get(1));
Soldier botSoldier3 = Soldier.createSoldier(lineBot1.get(2));
botSoldierLine1.add(botSoldier1);
botSoldierLine1.add(botSoldier2);
botSoldierLine1.add(botSoldier3);
ArrayList <Integer> lineBot2 = new ArrayList <Integer>(Arrays.asList(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6));
Collections.shuffle(lineBot2);
Soldier botSoldier4 = Soldier.createSoldier(lineBot2.get(0));
Soldier botSoldier5 = Soldier.createSoldier(lineBot2.get(1));
botSoldierLine2.add(botSoldier4);
botSoldierLine2.add(botSoldier5);
//tworzymy listę wszystkich żołnierzy w grze do pętli for each
ArrayList <Soldier> allSoldiers = new ArrayList<Soldier>(Arrays.asList(playerSoldierLine1.get(0), botSoldierLine1.get(0), playerSoldierLine1.get(1), botSoldierLine1.get(1), playerSoldierLine1.get(2),
botSoldierLine1.get(2), playerSoldierLine2.get(0), botSoldierLine2.get(0), playerSoldierLine2.get(1), botSoldierLine2.get(1)));
//tworzymy listy wszystkich żołnierzy bota i gracza by łatwiej operować atakami
ArrayList <Soldier> allSPlayer = new ArrayList<Soldier>(Arrays.asList(playerSoldierLine1.get(0), playerSoldierLine1.get(1), playerSoldierLine1.get(2), playerSoldierLine2.get(0),
playerSoldierLine2.get(1)));
ArrayList <Soldier> allSBot = new ArrayList<Soldier>(Arrays.asList(botSoldierLine1.get(0), botSoldierLine1.get(1), botSoldierLine1.get(2), botSoldierLine2.get(0), botSoldierLine2.get(1)));
int round = 1;
int pZEnemy = botSoldierLine1.get(0).getPz() + botSoldierLine1.get(1).getPz() + botSoldierLine1.get(2).getPz() + botSoldierLine2.get(0).getPz() + botSoldierLine2.get(1).getPz();
int pZPlayer = playerSoldierLine1.get(0).getPz() + playerSoldierLine1.get(1).getPz() + playerSoldierLine1.get(2).getPz() + playerSoldierLine2.get(0).getPz() + playerSoldierLine2.get(1).getPz();
//główna pętla while walki
while (pZEnemy > 0 && pZPlayer > 0) {
int numerSPlayer = 1;
int numerSBot = 1;
System.out.println("runda " + round);
//System.out.println();
for (Soldier soldier : allSoldiers) {
if (allSPlayer.contains(soldier)) {
System.out.println();
System.out.println("teraz kolej gracza (" + numerSPlayer + ")");
numerSPlayer++;
} else {
System.out.println("teraz kolej bota (" + numerSBot + ")");
numerSBot++;
}
if (allSPlayer.contains(soldier)) {
if (soldier.getAlive() == false) {
System.out.println(numerSPlayer + " " + soldier.getKlasa() + " nie żyje i nie może wykonywać akcji");
} else {
System.out.println();
System.out.println("Oto pole walki:");
System.out.println();
System.out.println(" 4[" + botSoldier4 + "] 5[" + botSoldier5 + "]");
System.out.println();
System.out.println("1[" + botSoldier1 + "] 2[" + botSoldier2 + "] 3[" + botSoldier3 + "]");
System.out.println();
System.out.println();
System.out.println("1[" + playerSoldier1 + "] 2[" + playerSoldier2 + "] 3[" + playerSoldier3 + "]");
System.out.println();
System.out.println(" 4[" + playerSoldier4 + "] 5[" + playerSoldier5 + "]");
System.out.println();
if (soldier instanceof Czarownik) {
System.out.println("Czarownik może zaatakować (0) lub wzmocnić sojusznika (1) dodając mu +10H, + 5A, + 5D, + 1 do SA i SB");
int czar = scanner.nextInt();
while (czar != 0 && czar != 1) {
System.out.println("Wprowadziłeś błędną liczę, wybierz 0 by zaatakować lub 1 by wzmocnić sojusznika");
czar = scanner.nextInt();
}
if (czar == 0) {
System.out.println("Wprowadź numer jednostki przeciwnika który chcesz i mozesz zaatakować");
int target = scanner.nextInt();
while (target < 1 || target > 5 || allSBot.get(target - 1).getPz() < 1) {
System.out.println("Wprowadziłeś błędną liczbę lub numer celu który już nie żyje, spróbuj ponownie wpisać poprawny numer celu");
target = scanner.nextInt();
}
soldier.attack(allSBot.get(target - 1));
} else { // czar == 1
System.out.println("Wprowadź numer swojej żyjącej jednostki którą chcesz wzmocnic");
int target = scanner.nextInt();
while (target < 1 || target > 5 || allSPlayer.get(target - 1).getPz() < 1) {
System.out.println("Wprowadziłeś błędną liczbę lub numer celu który już nie żyje, spróbuj ponownie wpisać poprawny numer celu");
target = scanner.nextInt();
}
if (soldier instanceof Czarownik) {
Czarownik czarodziej = (Czarownik) soldier;
czarodziej.dodajAtrybut(allSPlayer.get(target - 1));
}
}
} // koniec if sprawdzającego czy żołnierz jest czarownikiem
else if (soldier instanceof Lucznik || soldier instanceof Lowca) {
System.out.println(soldier.getKlasa() + " może zaatakować dowolny cel, wpisz numer przeciwnika, który możesz i chcesz zaatakować");
int target = scanner.nextInt();
while (target < 1 || target > 5 || allSBot.get(target - 1).getPz() < 1) {
System.out.println("Wprowadziłeś błędną liczbę lub numer celu który już nie żyje, spróbuj ponownie wpisać poprawny numer celu");
target = scanner.nextInt();
}
soldier.attack(allSBot.get(target - 1));
} // koniec sprawdzania czy żołnierz jest Łucznikiem lub Łowcą
else { //żołnierz musi należeć do klas piechur, pikinier lub konik
if (botSoldierLine1.get(0).getPz() + botSoldierLine1.get(1).getPz() + botSoldierLine1.get(2).getPz() > 0) {
System.out.println(soldier.getKlasa() + " może zaatakować tylko pierwszą linię wroga. Podaj numer przeciwnika (1, 2 lub 3) którego możesz i chcesz zaatakować");
int target = scanner.nextInt();
while (target < 0 || target > 3 || allSBot.get(target - 1).getPz() < 1) {
System.out.println("podałeś zła wartość lub numer przeciwnika który już nie żyje, spróbuj ponownie podać prawidłową wartość");
target = scanner.nextInt();
} //upewniamy się że użytkownik wprowadził prawidłowy cel (koniec)
soldier.attack(allSBot.get(target - 1));
} // koniec metody ataku dla walczących wręcz w sytuacji gdy pierwsza linia przeciwnika żyje
else { //pierwszej linii już nie ma
System.out.println(soldier.getKlasa() + " może zaatakować drugą linię, bo pierwsza już nie żyje. Wprowadź numer wroga którego chcesz i możesz zaatakować");
int target = scanner.nextInt();
while (target != 4 && target != 5 || allSBot.get(target - 1).getPz() < 1) {
System.out.println("podałeś zła wartość lub numer przeciwnika który już nie żyje, spróbuj ponownie podać prawidłową wartość");
target = scanner.nextInt();
}
soldier.attack(allSBot.get(target - 1));
} // koniec metody ataku ald walczących wręcz w sytuacji gdy pierwszej linii już nie ma
} // koniec tego co robi piechur, konik lub pikinier
}// koniec sprawdzania czy żołnierz żyje
pZEnemy = botSoldierLine1.get(0).getPz() + botSoldierLine1.get(1).getPz() + botSoldierLine1.get(2).getPz() + botSoldierLine2.get(0).getPz() + botSoldierLine2.get(1).getPz();
pZPlayer = playerSoldierLine1.get(0).getPz() + playerSoldierLine1.get(1).getPz() + playerSoldierLine1.get(2).getPz() + playerSoldierLine2.get(0).getPz() + playerSoldierLine2.get(1).getPz();
if (pZEnemy == 0 || pZPlayer == 0) {
break;
}
} //koniec if sprawdzającego czy żołnierz jest gracza
else { // teraz gra bot
if (soldier.getAlive() == false) {
System.out.println(numerSBot + " " + soldier.getKlasa() + " nie żyje i nie może wykonywać akcji");
} else {
System.out.println();
System.out.println("Oto pole walki:");
System.out.println();
System.out.println(" 4[" + botSoldier4 + "] 5[" + botSoldier5 + "]");
System.out.println();
System.out.println("1[" + botSoldier1 + "] 2[" + botSoldier2 + "] 3[" + botSoldier3 + "]");
System.out.println();
System.out.println();
System.out.println("1[" + playerSoldier1 + "] 2[" + playerSoldier2 + "] 3[" + playerSoldier3 + "]");
System.out.println();
System.out.println(" 4[" + playerSoldier4 + "] 5[" + playerSoldier5 + "]");
System.out.println();
if (soldier instanceof Czarownik) {
ArrayList <Soldier> targetListOfCzarownik = new ArrayList<>();
for (Soldier s : allSPlayer) {
if (s.getPz() > 0) {
targetListOfCzarownik.add(s);
}
}
int attackOrBoost = random.nextInt(2);
if (attackOrBoost == 1) {
ArrayList <Soldier> listAliveSoldier = new ArrayList<>();
for (Soldier s : allSBot) {
if (s.getPz() > 0) {
listAliveSoldier.add(s);
}
}
Collections.shuffle(listAliveSoldier);
if (soldier instanceof Czarownik) {
Czarownik czarodziej = (Czarownik) soldier;
czarodziej.dodajAtrybut(listAliveSoldier.get(0));
}
} else {// czarownik teraz atakuje cel który ma najmniej zdrowia
Soldier toAttack = targetListOfCzarownik.get(0);
for (Soldier s : targetListOfCzarownik) {
if (s.getPz() < toAttack.getPz()) {
toAttack = s;
}
}
soldier.attack(toAttack);
} // koniec ataku czarownika
} // koniec ruchu czarownika
else if (soldier instanceof Lucznik || soldier instanceof Lowca) {
ArrayList <Soldier> targetListOfLucznikOrLowca = new ArrayList<>();
for (Soldier s : allSPlayer) {
if (s.getPz() > 0) {
targetListOfLucznikOrLowca.add(s);
}
}
Soldier toAttack = targetListOfLucznikOrLowca.get(0);
for (Soldier s : targetListOfLucznikOrLowca) {
if (s.getPz() < toAttack.getPz()) {
toAttack = s;
}
}
soldier.attack(toAttack);
} // koniec ruchu Łucznika lub Łowcy
else if (soldier instanceof Pikinier) { // teraz ruch Pikiniera, który powinien zaatakować konika jeśli ten jest
if (playerSoldierLine1.get(0).getPz() + playerSoldierLine1.get(1).getPz() + playerSoldierLine1.get(2).getPz() > 0) {
ArrayList <Soldier> targetOfPikinier = new ArrayList<>();
for (Soldier s : playerSoldierLine1) {
if (s.getPz() > 0) {
targetOfPikinier.add(s);
}
}
Soldier toAttack = targetOfPikinier.get(0);
for (Soldier s : targetOfPikinier) {
if (s instanceof Calvary) {
toAttack = s;
break;
} else {
if (s.getPz() < toAttack.getPz()) {
toAttack = s;
}
}
}
soldier.attack(toAttack);
}// koniec sytuacji gdy pierwsza linia gracza żyje
else { //teraz nie żyje pierwsza linia
ArrayList <Soldier> targetOfPikinier = new ArrayList<>();
for (Soldier s : playerSoldierLine2) {
if (s.getPz() > 0) {
targetOfPikinier.add(s);
}
}
Soldier toAttack = targetOfPikinier.get(0);
for (Soldier s : targetOfPikinier) {
if (s.getPz() < toAttack.getPz()) {
toAttack = s;
}
}
soldier.attack(toAttack);
} // koniec ataku gdy pierwsza linia nie zyje
} // koniec ataku pikiniera
else if (soldier instanceof Calvary) {
if (playerSoldierLine1.get(0).getPz() + playerSoldierLine1.get(1).getPz() + playerSoldierLine1.get(2).getPz() > 0) {
ArrayList <Soldier> targetOfCalvary = new ArrayList<>();
for (Soldier s : playerSoldierLine1) {
if (s.getPz() > 0) {
targetOfCalvary.add(s);
}
}
Soldier toAttack = targetOfCalvary.get(0);
for (Soldier s : targetOfCalvary) {
if (s instanceof Pikinier) {
} else {
if (s.getPz() < toAttack.getPz()) {
toAttack = s;
}
}
}
soldier.attack(toAttack);
}// koniec sytuacji gdy pierwsza linia gracza żyje
else { //teraz nie żyje pierwsza linia
ArrayList <Soldier> targetOfCalvary = new ArrayList<>();
for (Soldier s : playerSoldierLine2) {
if (s.getPz() > 0) {
targetOfCalvary.add(s);
}
}
Soldier toAttack = targetOfCalvary.get(0);
for (Soldier s : targetOfCalvary) {
if (s.getPz() < toAttack.getPz()) {
toAttack = s;
}
}
soldier.attack(toAttack);
} // koniec ataku gdy pierwsza linia nie zyje
} // koniec ataku konika
else { // atak piechura
if (playerSoldierLine1.get(0).getPz() + playerSoldierLine1.get(1).getPz() + playerSoldierLine1.get(2).getPz() > 0) {
ArrayList <Soldier> targetOfPiechur = new ArrayList<>();
for (Soldier s : playerSoldierLine1) {
if (s.getPz() > 0) {
targetOfPiechur.add(s);
}
}
Soldier toAttack = targetOfPiechur.get(0);
for (Soldier s : targetOfPiechur) {
if (s instanceof Calvary) {
if (s.getPz() < toAttack.getPz()) {
toAttack = s;
}
}
}
soldier.attack(toAttack);
}// koniec sytuacji gdy pierwsza linia gracza żyje
else { //teraz nie żyje pierwsza linia
ArrayList <Soldier> targetOfPiechur = new ArrayList<>();
for (Soldier s : playerSoldierLine2) {
if (s.getPz() > 0) {
targetOfPiechur.add(s);
}
}
Soldier toAttack = targetOfPiechur.get(0);
for (Soldier s : targetOfPiechur) {
if (s.getPz() < toAttack.getPz()) {
toAttack = s;
}
}
soldier.attack(toAttack);
} // koniec ataku gdy pierwsza linia nie zyje
} // koniec ataku piechura
} // koniec ruchu bota
pZEnemy = botSoldierLine1.get(0).getPz() + botSoldierLine1.get(1).getPz() + botSoldierLine1.get(2).getPz() + botSoldierLine2.get(0).getPz() + botSoldierLine2.get(1).getPz();
pZPlayer = playerSoldierLine1.get(0).getPz() + playerSoldierLine1.get(1).getPz() + playerSoldierLine1.get(2).getPz() + playerSoldierLine2.get(0).getPz() + playerSoldierLine2.get(1).getPz();
if (pZEnemy == 0 || pZPlayer == 0) {
break;
}
czekajNaEnter();
} // koniec pętli for each
pZEnemy = botSoldierLine1.get(0).getPz() + botSoldierLine1.get(1).getPz() + botSoldierLine1.get(2).getPz() + botSoldierLine2.get(0).getPz() + botSoldierLine2.get(1).getPz();
pZPlayer = playerSoldierLine1.get(0).getPz() + playerSoldierLine1.get(1).getPz() + playerSoldierLine1.get(2).getPz() + playerSoldierLine2.get(0).getPz() + playerSoldierLine2.get(1).getPz();
if (pZEnemy == 0 || pZPlayer == 0) {
break;
}
} // koniec pętli for each
round++;
} // koniec głównej pętli while walki
System.out.println("KONIEC WALKI!");
System.out.println();
if (pZPlayer > pZEnemy) {
System.out.println("Gratulacje, wygrałeś! Oto Twoje oddziały:");
System.out.println("1[" + playerSoldier1 + "] 2[" + playerSoldier2 + "] 3[" + playerSoldier3 + "]");
System.out.println();
System.out.println(" 4[" + playerSoldier4 + "] 5[" + playerSoldier5 + "]");
} else {
System.out.println("Niestety, ale tym razem wygrał Bot. Oto jego oddziały:");
System.out.println(" 4[" + botSoldier4 + "] 5[" + botSoldier5 + "]");
System.out.println();
System.out.println("1[" + botSoldier1 + "] 2[" + botSoldier2 + "] 3[" + botSoldier3 + "]");
}
} // koniec metody main
private static void czekajNaEnter() {
System.out.println("Naciśnij Enter, aby kontynuować...");
try {
System.in.read();
} catch (Exception e) {
e.printStackTrace();
}
}
} // koniec klasy main
Komentarze
Prześlij komentarz