Project: Battle Simulator
Hai să construim ceva distractiv: un simulator de luptă! Gândește-te la el ca la un sistem de luptă pe ture dintr-un RPG. O să avem personaje cu viață și putere de atac, plus subclase pentru Razboinici și Magi cu propriile lor abilități speciale. Acest proiect folosește moștenirea, metodele, și OOP lucrând toate împreună
Pasul 1: Clasa de bază Personaj
Fiecare personaj are un nume, viata, și putereAtac. De asemenea, poate să atace alt personaj
class Personaj {
String nume;
int viata;
int putereAtac;
Personaj(String nume, int viata, int putereAtac) {
this.nume = nume;
this.viata = viata;
this.putereAtac = putereAtac;
}
void ataca(Personaj tinta) {
tinta.viata -= this.putereAtac;
System.out.println(this.nume + " ataca " + tinta.nume + " cu " + this.putereAtac + " daune!");
}
void afiseazaStatus() {
System.out.println(this.nume + " - HP: " + this.viata);
}
}
Metoda ataca reduce viața țintei cu puterea atacatorului. Simplu și eficient, ca o lovitură corp-la-corp de bază în Vice City
Pasul 2: Subclasa Razboinic
Un Razboinic are armura în plus, care reduce daunele primite. Suprascriem câmpurile părintelui și adăugăm logica de reducere a daunelor. Când un Razboinic e atacat, armura absoarbe o parte din daune
class Razboinic extends Personaj {
int armura;
Razboinic(String nume, int viata, int putereAtac, int armura) {
super(nume, viata, putereAtac);
this.armura = armura;
}
void ataca(Personaj tinta) {
int daune = this.putereAtac;
tinta.viata -= daune;
System.out.println(this.nume + " loveste cu sabia pe " + tinta.nume + " cu " + daune + " daune!");
}
}
Metoda ataca a Razboinicului o suprascrie pe cea a părintelui ca să afișeze un mesaj mai specific. Apelul super(...) configurează câmpurile de bază ale clasei Personaj
Pasul 3: Subclasa Mag
Un Mag are putereVraja: magia lui face daune suplimentare peste atacul de bază
class Mag extends Personaj {
int putereVraja;
Mag(String nume, int viata, int putereAtac, int putereVraja) {
super(nume, viata, putereAtac);
this.putereVraja = putereVraja;
}
void ataca(Personaj tinta) {
int daune = this.putereAtac + this.putereVraja;
tinta.viata -= daune;
System.out.println(this.nume + " lanseaza o vraja asupra lui " + tinta.nume + " cu " + daune + " daune!");
}
}
Metoda ataca a Mag-ului combină putereAtac-ul de bază și putereVraja pentru lovituri mai mari. Stil „tun de sticlă": multe daune, dar de obicei mai puțină viață decât un Razboinic
Punând totul cap la cap
class Personaj {
String nume;
int viata;
int putereAtac;
Personaj(String nume, int viata, int putereAtac) {
this.nume = nume;
this.viata = viata;
this.putereAtac = putereAtac;
}
void ataca(Personaj tinta) {
tinta.viata -= this.putereAtac;
System.out.println(this.nume + " ataca " + tinta.nume + " cu " + this.putereAtac + " daune!");
}
void afiseazaStatus() {
System.out.println(this.nume + " - HP: " + this.viata);
}
}
class Razboinic extends Personaj {
int armura;
Razboinic(String nume, int viata, int putereAtac, int armura) {
super(nume, viata, putereAtac);
this.armura = armura;
}
void ataca(Personaj tinta) {
int daune = this.putereAtac;
tinta.viata -= daune;
System.out.println(this.nume + " loveste cu sabia pe " + tinta.nume + " cu " + daune + " daune!");
}
}
class Mag extends Personaj {
int putereVraja;
Mag(String nume, int viata, int putereAtac, int putereVraja) {
super(nume, viata, putereAtac);
this.putereVraja = putereVraja;
}
void ataca(Personaj tinta) {
int daune = this.putereAtac + this.putereVraja;
tinta.viata -= daune;
System.out.println(this.nume + " lanseaza o vraja asupra lui " + tinta.nume + " cu " + daune + " daune!");
}
}
public class Main {
public static void main(String[] args) {
Razboinic w = new Razboinic("Tommy", 100, 25, 10);
Mag m = new Mag("Lance", 80, 15, 20);
w.ataca(m);
m.afiseazaStatus();
m.ataca(w);
w.afiseazaStatus();
}
}
Ieșire
Tommy loveste cu sabia pe Lance cu 25 daune!
Lance - HP: 55
Lance lanseaza o vraja asupra lui Tommy cu 35 daune!
Tommy - HP: 65
Acesta este polimorfismul în acțiune: atât Razboinic cât și Mag SUNT Personaje, dar fiecare atacă diferit. Metoda ataca face lucruri diferite în funcție de tipul real. În termeni de Vice City: Tommy lovește tare (Razboinic), în timp ce Lance folosește trucuri viclene (Mag)
Observă cum afiseazaStatus() este definită o singură dată în clasa părinte Personaj, dar atât Razboinic cât și Mag o pot folosi. Asta este puterea moștenirii: o scrii o dată, o refolosești peste tot
Misiune: Protocolul de Luptă din Arenă
Doi membri ai echipajului au intrat în arena de antrenament holografică a stației. Tommy este un Razboinic de luptă apropiată, cu armură grea, iar Lance este un Mag care canalizează rafale de energie. Construiește sistemul de luptă și simulează o rundă de atacuri.
- Creează o clasă
Personajcunume(String),viata(int),putereAtac(int), un constructor, o metodăataca(Personaj tinta)care reduce viața țintei cuputereAtacși afișează"NUME ataca TINTA cu DAUNE daune!", și o metodăafiseazaStatus()care afișează"NUME - HP: VIATA" - Creează o clasă
Razboiniccare extinde Personaj cuarmura(int). Suprascrie ataca ca să afișeze:"NUME loveste cu sabia pe TINTA cu DAUNE daune!"unde daune e egal cu putereAtac - Creează o clasă
Magcare extinde Personaj cuputereVraja(int). Suprascrie ataca ca să afișeze:"NUME lanseaza o vraja asupra lui TINTA cu DAUNE daune!"unde daune e egal cu putereAtac + putereVraja - În main, stochează statisticile luptătorilor în variabile:
nume1/viata1/atac1/armura1pentru Razboinic șinume2/viata2/atac2/vraja2pentru Mag (pornește cu Tommy/100/25/10 și Lance/80/15/20). CreeazăRazboinic-ul șiMag-ul din aceste variabile - Tommy îl atacă pe Lance, afișează statusul lui Lance. Apoi Lance îl atacă pe Tommy, afișează statusul lui Tommy
Ieșire
Tommy loveste cu sabia pe Lance cu 25 daune!
Lance - HP: 55
Lance lanseaza o vraja asupra lui Tommy cu 35 daune!
Tommy - HP: 65