diff --git a/jednostka.py b/jednostka.py index 86d2a70..0edfadd 100644 --- a/jednostka.py +++ b/jednostka.py @@ -1,12 +1,14 @@ -from abc import ABC +from abc import ABC, abstractmethod class Jednostka(ABC): - def __init__(self, zdrowie, sila_ataku, zasieg_ataku, szybkosc_ruchu): + def __init__(self, zdrowie, sila_ataku, zasieg_ataku, szybkosc_ruchu, imie): + self.nazwa = '' self.zdrowie = zdrowie self.sila_ataku = sila_ataku self.zasieg_ataku = zasieg_ataku self.szybkosc_ruchu = szybkosc_ruchu + self.imie = imie def otrzymaj_obrazenia(self, obrazenia): print(f'Zadano {obrazenia} obrażeń') @@ -18,6 +20,7 @@ class Jednostka(ABC): return False def wyswietl_stan(self): + print(self.nazwa) print(f'Zdrowie: {self.zdrowie}') print(f'Sila: {self.sila_ataku}') print(f'Zasieg: {self.zasieg_ataku}') diff --git a/kusznik.py b/kusznik.py index f38f7cc..9ed5c0a 100644 --- a/kusznik.py +++ b/kusznik.py @@ -2,12 +2,12 @@ from jednostka import Jednostka class Kusznik(Jednostka): - def __init__(self): - super().__init__(80, 15, 2, 2) + def __init__(self, imie): + super().__init__(80, 15, 2, 2, imie) + self.nazwa = 'Kusznik' def __str__(self): return 'K' def wyswietl_stan(self): - print('Kusznik') super().wyswietl_stan() diff --git a/lucznik.py b/lucznik.py index 4834d9c..973d4f0 100644 --- a/lucznik.py +++ b/lucznik.py @@ -2,12 +2,12 @@ from jednostka import Jednostka class Lucznik(Jednostka): - def __init__(self): - super().__init__(60, 10, 3, 3) + def __init__(self, imie): + super().__init__(60, 10, 3, 3, imie) + self.nazwa = 'Lucznik' def __str__(self): return 'L' def wyswietl_stan(self): - print('Łucznik') super().wyswietl_stan() diff --git a/main.py b/main.py index 5801561..903da56 100644 --- a/main.py +++ b/main.py @@ -4,19 +4,90 @@ from lucznik import Lucznik from kusznik import Kusznik from piechur import Piechur + +jednostki = [] + + +def waliduj_opcje(opcja): + return 1 <= opcja <= 2 + + +def wprowadz_wspolrzedna(w): + a = int(input(f'Podaj wspolrzedna {w}: ')) + return a + + +def waliduj_wspolrzedna(a): + return 0 <= a <= 4 + + +def wyswietl_jednostki(): + for i in range(len(jednostki)): + print(f'{i} - {jednostki[i]}') + + +def waliduj_cel(x): + return 0 <= x <= (len(jednostki) - 1) + + if __name__ == '__main__': plansza = Plansza() - r1 = Rycerz() - l1 = Lucznik() - k1 = Kusznik() - p1 = Piechur() + r1 = Rycerz('Stefan') + l1 = Lucznik('Agata') + k1 = Kusznik('Bogumił') + p1 = Piechur('Łukasz') - plansza.dodaj_jednostke(r1, 1, 1) - plansza.dodaj_jednostke(l1, 2, 1) - plansza.dodaj_jednostke(k1, 5, 5) - plansza.dodaj_jednostke(p1, 3, 5) + jednostki = [r1, l1, k1, p1] - plansza.wykonaj_atak(r1, l1) + plansza.dodaj_jednostke(r1, 0, 0) + plansza.dodaj_jednostke(l1, 0, 1) + plansza.dodaj_jednostke(k1, 4, 4) + plansza.dodaj_jednostke(p1, 2, 4) - l1.wyswietl_stan() + print('Jednostki zostaly rozstawiona. Niech rozpocznie sie walka') + while r1.czy_zyje() or l1.czy_zyje() or k1.czy_zyje() or p1.czy_zyje(): + for jednostka in jednostki: + plansza.wyswietl() + print(f'Tura {jednostka.nazwa} {jednostka.imie}') + + opcja = 0 + wybrano_opcje = False + wybrano_cel = False + wykonano_ruch = False + + while True: + print(f'1. Ruch') + print(f'2. Atak') + print('Wybierz opcje: ') + opcja = int(input('Wprowadz opcje:')) + wybrano_opcje = waliduj_opcje(opcja) + + if wybrano_opcje: + break + + if opcja == 1: + while True: + x = wprowadz_wspolrzedna('x') + y = wprowadz_wspolrzedna('y') + if waliduj_wspolrzedna(x) and waliduj_wspolrzedna(y): + wykonano_ruch = plansza.rusz_jednostke(jednostka, x, y) + plansza.wyswietl() + else: + print('Ups! Nieprawidlowe wspolrzedne. Podaj jeszcze raz') + + if wykonano_ruch: + break + elif opcja == 2: + x = -1 + while True: + wyswietl_jednostki() + x = int(input('Kogo atakujesz?')) + + if waliduj_cel(x): + wykonano_ruch = plansza.wykonaj_atak(jednostka, jednostki[x]) + else: + print('Ups! Nieprawidłowy cel. Podaj jeszcze raz') + + if wykonano_ruch: + break diff --git a/piechur.py b/piechur.py index 27f4346..ae69a85 100644 --- a/piechur.py +++ b/piechur.py @@ -2,12 +2,12 @@ from jednostka import Jednostka class Piechur(Jednostka): - def __init__(self): - super().__init__(80, 15, 1, 1.5) + def __init__(self, imie): + super().__init__(80, 15, 1, 1.5, imie) + self.nazwa = 'Piechur' def __str__(self): return 'P' def wyswietl_stan(self): - print('Piechur') super().wyswietl_stan() diff --git a/plansza.py b/plansza.py index f64f23f..1ede479 100644 --- a/plansza.py +++ b/plansza.py @@ -30,19 +30,24 @@ class Plansza: x1, y1 = self.znajdz(jednostka) if self.czy_zajete(x, y): print('Nie mozna ruszyc jednostki na to pole - pole zajete') + return False else: dystans = self.sprawdz_dystans(x1, y1, x, y) if dystans <= jednostka.szybkosc_ruchu: self.dodaj_jednostke(jednostka, x, y) self.usun_jednostke(x1, y1) + return True else: print('Nie mozna ruszyc jednostki na to pole - za duzy dystans') + return False def wykonaj_atak(self, atakujacy, cel): if self.sprawdz_zasieg(atakujacy, cel): cel.otrzymaj_obrazenia(self.oblicz_obrazenia(atakujacy, cel)) + return True else: print('Cel jest za daleko') + return False def sprawdz_zasieg(self, atakujacy, cel): x1, y1 = self.znajdz(atakujacy) diff --git a/rycerz.py b/rycerz.py index 3a29017..1537e16 100644 --- a/rycerz.py +++ b/rycerz.py @@ -2,12 +2,12 @@ from jednostka import Jednostka class Rycerz(Jednostka): - def __init__(self): - super().__init__(100, 20, 1, 1) + def __init__(self, imie): + super().__init__(100, 20, 1, 1, imie) + self.nazwa = 'Rycerz' def __str__(self): return 'R' def wyswietl_stan(self): - print('Rycerz') super().wyswietl_stan()