Add SystemWalki as different class
This commit is contained in:
parent
582b86edd1
commit
9ef1599b29
@ -3,4 +3,5 @@
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.12 (projekt_gra_turowa)" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13 (projekt_gra_turowa)" project-jdk-type="Python SDK" />
|
||||
</project>
|
@ -4,7 +4,7 @@
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.12 (projekt_gra_turowa)" jdkType="Python SDK" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.13 (projekt_gra_turowa)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
28
jednostka.py
28
jednostka.py
@ -1,7 +1,9 @@
|
||||
from abc import ABC
|
||||
from plansza import Plansza
|
||||
from sprawdz import sprawdz_dystans
|
||||
from system_walki import SystemWalki
|
||||
|
||||
|
||||
class Jednostka(ABC):
|
||||
class Jednostka(SystemWalki):
|
||||
def __init__(self, zdrowie, sila_ataku, zasieg_ataku, szybkosc_ruchu, imie):
|
||||
self.nazwa = ''
|
||||
self.zdrowie = zdrowie
|
||||
@ -10,10 +12,32 @@ class Jednostka(ABC):
|
||||
self.szybkosc_ruchu = szybkosc_ruchu
|
||||
self.imie = imie
|
||||
|
||||
def wykonaj_atak(self, cel):
|
||||
if self.sprawdz_zasieg(cel):
|
||||
obrazenia = self.oblicz_obrazenia(cel)
|
||||
cel.otrzymaj_obrazenia(obrazenia)
|
||||
return True
|
||||
else:
|
||||
print('Cel jest za daleko')
|
||||
return False
|
||||
|
||||
def oblicz_obrazenia(self, cel):
|
||||
obrazenia = self.sila_ataku
|
||||
return obrazenia
|
||||
|
||||
def otrzymaj_obrazenia(self, obrazenia):
|
||||
print(f'Zadano {obrazenia} obrażeń')
|
||||
self.zdrowie -= obrazenia
|
||||
|
||||
def sprawdz_zasieg(self, cel):
|
||||
plansza = Plansza()
|
||||
x1, y1 = plansza.znajdz(self)
|
||||
x2, y2 = plansza.znajdz(cel)
|
||||
|
||||
dystans = sprawdz_dystans(x1, y1, x2, y2)
|
||||
|
||||
return self.zasieg_ataku >= dystans
|
||||
|
||||
def czy_zyje(self):
|
||||
if self.zdrowie > 0:
|
||||
return True
|
||||
|
30
plansza.py
30
plansza.py
@ -1,4 +1,4 @@
|
||||
import math
|
||||
from sprawdz import sprawdz_dystans
|
||||
|
||||
|
||||
class Plansza:
|
||||
@ -11,7 +11,7 @@ class Plansza:
|
||||
|
||||
def __init__(self):
|
||||
if not hasattr(self, '_initialized'):
|
||||
self.pole = [['O' for x in range(5)] for y in range(5)]
|
||||
self.pole = [['O' for _ in range(5)] for _ in range(5)]
|
||||
self._initialized = True
|
||||
|
||||
def dodaj_jednostke(self, jednostka, x, y):
|
||||
@ -32,7 +32,7 @@ class Plansza:
|
||||
print('Nie mozna ruszyc jednostki na to pole - pole zajete')
|
||||
return False
|
||||
else:
|
||||
dystans = self.sprawdz_dystans(x1, y1, x, y)
|
||||
dystans = sprawdz_dystans(x1, y1, x, y)
|
||||
if dystans <= jednostka.szybkosc_ruchu:
|
||||
self.dodaj_jednostke(jednostka, x, y)
|
||||
self.usun_jednostke(x1, y1)
|
||||
@ -41,30 +41,6 @@ class Plansza:
|
||||
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)
|
||||
x2, y2 = self.znajdz(cel)
|
||||
|
||||
dystans = self.sprawdz_dystans(x1, y1, x2, y2)
|
||||
|
||||
return atakujacy.zasieg_ataku >= dystans
|
||||
|
||||
def sprawdz_dystans(self, x1, y1, x2, y2):
|
||||
dystans = math.sqrt(math.pow(math.fabs(x1 - x2), 2) + math.pow(math.fabs(y1 - y2), 2))
|
||||
return round(dystans, 0)
|
||||
|
||||
def oblicz_obrazenia(self, atakujacy, cel):
|
||||
obrazenia = atakujacy.sila_ataku
|
||||
return obrazenia
|
||||
|
||||
def czy_zajete(self, x, y):
|
||||
if self.pole[x][y] == 'O':
|
||||
return False
|
||||
|
5
sprawdz.py
Normal file
5
sprawdz.py
Normal file
@ -0,0 +1,5 @@
|
||||
import math
|
||||
|
||||
def sprawdz_dystans(x1, y1, x2, y2):
|
||||
dystans = math.sqrt(math.pow(math.fabs(x1 - x2), 2) + math.pow(math.fabs(y1 - y2), 2))
|
||||
return round(dystans, 0)
|
15
system_walki.py
Normal file
15
system_walki.py
Normal file
@ -0,0 +1,15 @@
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
class SystemWalki(ABC):
|
||||
|
||||
@abstractmethod
|
||||
def wykonaj_atak(self, cel):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def oblicz_obrazenia(self, cel):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def sprawdz_zasieg(self, cel):
|
||||
pass
|
Loading…
Reference in New Issue
Block a user