Add SystemWalki as different class

This commit is contained in:
s500512 2025-01-03 20:11:36 +01:00 committed by JediSebas
parent 582b86edd1
commit 9ef1599b29
6 changed files with 51 additions and 30 deletions

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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
View 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
View 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