Compare commits
10 Commits
7869bd002b
...
582b86edd1
Author | SHA1 | Date | |
---|---|---|---|
582b86edd1 | |||
f2ba8c96a2 | |||
7baedc8a30 | |||
698ab1d4e5 | |||
81aa65786d | |||
d3960dcc91 | |||
97fdd46adf | |||
93f8fd98de | |||
cbca7f2b57 | |||
15c948b080 |
6
.idea/misc.xml
Normal file
6
.idea/misc.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.12 (projekt_gra_turowa)" />
|
||||
</component>
|
||||
</project>
|
@ -2,11 +2,13 @@ from abc import ABC
|
||||
|
||||
|
||||
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}')
|
||||
|
@ -2,12 +2,12 @@ from jednostka import Jednostka
|
||||
|
||||
|
||||
class Kusznik(Jednostka):
|
||||
def __init__(self):
|
||||
super().__init__(80, 15, 2, 5)
|
||||
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()
|
||||
|
@ -2,12 +2,12 @@ from jednostka import Jednostka
|
||||
|
||||
|
||||
class Lucznik(Jednostka):
|
||||
def __init__(self):
|
||||
super().__init__( 60, 10, 3, 9)
|
||||
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()
|
||||
|
106
main.py
106
main.py
@ -4,22 +4,106 @@ from lucznik import Lucznik
|
||||
from kusznik import Kusznik
|
||||
from piechur import Piechur
|
||||
|
||||
|
||||
jednostki = []
|
||||
|
||||
|
||||
def wiecej_niz_jeden_zywy():
|
||||
licznik = 0
|
||||
for i in jednostki:
|
||||
if i.czy_zyje():
|
||||
licznik += 1
|
||||
|
||||
return licznik > 1
|
||||
|
||||
|
||||
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)
|
||||
|
||||
|
||||
def wybierz_opcje():
|
||||
opcja = -1
|
||||
wybrano_opcje = False
|
||||
while True:
|
||||
print('Wybierz opcje: ')
|
||||
print(f'1. Ruch')
|
||||
print(f'2. Atak')
|
||||
opcja = int(input('Wprowadz opcje:'))
|
||||
wybrano_opcje = waliduj_opcje(opcja)
|
||||
|
||||
if wybrano_opcje:
|
||||
break
|
||||
return opcja
|
||||
|
||||
|
||||
def wykonaj_ruch():
|
||||
wykonano_ruch = False
|
||||
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)
|
||||
else:
|
||||
print('Ups! Nieprawidlowe wspolrzedne. Podaj jeszcze raz')
|
||||
|
||||
if wykonano_ruch:
|
||||
break
|
||||
|
||||
|
||||
def wykonaj_atak():
|
||||
wykonano_ruch = False
|
||||
while True:
|
||||
wyswietl_jednostki()
|
||||
indeks_celu = int(input('Kogo atakujesz?'))
|
||||
|
||||
if waliduj_cel(indeks_celu):
|
||||
wykonano_ruch = plansza.wykonaj_atak(jednostka, jednostki[indeks_celu])
|
||||
else:
|
||||
print('Ups! Nieprawidłowy cel. Podaj jeszcze raz')
|
||||
|
||||
if wykonano_ruch:
|
||||
break
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
plansza = Plansza()
|
||||
|
||||
r1 = Rycerz()
|
||||
l1 = Lucznik()
|
||||
k1 = Kusznik()
|
||||
p1 = Piechur()
|
||||
r1 = Rycerz('Lukasz')
|
||||
l1 = Lucznik('Sebastian')
|
||||
|
||||
plansza.dodaj_jednostke(r1, 1, 1)
|
||||
plansza.dodaj_jednostke(l1, 2, 1)
|
||||
jednostki = [r1, l1]
|
||||
|
||||
plansza = Plansza()
|
||||
plansza.dodaj_jednostke(r1, 0, 0)
|
||||
plansza.dodaj_jednostke(l1, 4, 4)
|
||||
|
||||
plansza.dodaj_jednostke(k1, 5, 5)
|
||||
plansza.dodaj_jednostke(p1, 3, 5)
|
||||
print('Jednostki zostaly rozstawiona. Niech rozpocznie sie walka')
|
||||
while wiecej_niz_jeden_zywy():
|
||||
for jednostka in jednostki:
|
||||
plansza.wyswietl()
|
||||
print(f'Tura {jednostka.nazwa} {jednostka.imie}')
|
||||
jednostka.wyswietl_stan()
|
||||
|
||||
plansza.wykonaj_atak(r1, l1)
|
||||
opcja = wybierz_opcje()
|
||||
|
||||
l1.wyswietl_stan()
|
||||
if opcja == 1:
|
||||
wykonaj_ruch()
|
||||
elif opcja == 2:
|
||||
wykonaj_atak()
|
||||
|
@ -2,12 +2,12 @@ from jednostka import Jednostka
|
||||
|
||||
|
||||
class Piechur(Jednostka):
|
||||
def __init__(self):
|
||||
super().__init__(80, 15, 1, 7)
|
||||
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()
|
||||
|
87
plansza.py
87
plansza.py
@ -5,38 +5,77 @@ class Plansza:
|
||||
_instance = None
|
||||
|
||||
def __new__(cls, *args, **kwargs):
|
||||
if not cls._instance:
|
||||
cls._instance = super().__new__(cls)
|
||||
return cls._instance
|
||||
if not cls._instance:
|
||||
cls._instance = super().__new__(cls)
|
||||
return cls._instance
|
||||
|
||||
def __init__(self):
|
||||
if not hasattr(self, '_initialized'):
|
||||
if not hasattr(self, '_initialized'):
|
||||
self.pole = [['O' for x in range(5)] for y in range(5)]
|
||||
self._initialized = True
|
||||
|
||||
def dodaj_jednostke(self, jednostka, x, y):
|
||||
x -= 1
|
||||
y -= 1
|
||||
if self.czy_zajete(x, y):
|
||||
print('Nie mozna dodać jednostki na tym polu')
|
||||
else:
|
||||
self.pole[x][y] = jednostka
|
||||
self.wyswietl()
|
||||
|
||||
def usun_jednostke(self, x, y):
|
||||
x -= 1
|
||||
y -= 1
|
||||
if self.czy_zajete(x, y):
|
||||
self.pole[x][y] = 'O'
|
||||
else:
|
||||
print('To pole juz jest puste')
|
||||
self.wyswietl()
|
||||
|
||||
def rusz_jednostke(self, jednostka, x, y):
|
||||
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)
|
||||
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
|
||||
return True
|
||||
|
||||
def znajdz(self, jednostka):
|
||||
for y in range(5):
|
||||
for x in range(5):
|
||||
if self.pole[x][y] == jednostka:
|
||||
return x, y
|
||||
|
||||
def wyswietl(self):
|
||||
print()
|
||||
for y in range(5):
|
||||
@ -44,31 +83,3 @@ class Plansza:
|
||||
print(self.pole[x][y], end=' ')
|
||||
print()
|
||||
print()
|
||||
|
||||
def wykonaj_atak(self, atakujacy, cel):
|
||||
if self.sprawdz_zasieg(atakujacy, cel):
|
||||
cel.otrzymaj_obrazenia(self.oblicz_obrazenia(atakujacy, cel))
|
||||
else:
|
||||
print('Cel jest za daleko')
|
||||
|
||||
def sprawdz_zasieg(self, atakujacy, cel):
|
||||
x1, y1 = self.znajdz(atakujacy)
|
||||
x2, y2 = self.znajdz(cel)
|
||||
|
||||
dystans = math.sqrt(math.pow(math.fabs(x1 - x2), 2) + math.pow(math.fabs(y1- y2), 2))
|
||||
dystans = round(dystans, 0)
|
||||
|
||||
if atakujacy.zasieg_ataku >= dystans:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def oblicz_obrazenia(self, atakujacy, cel):
|
||||
obrazenia = atakujacy.sila_ataku
|
||||
return obrazenia
|
||||
|
||||
def znajdz(self, jednostka):
|
||||
for y in range(5):
|
||||
for x in range(5):
|
||||
if self.pole[x][y] == jednostka:
|
||||
return x, y
|
||||
|
@ -2,12 +2,12 @@ from jednostka import Jednostka
|
||||
|
||||
|
||||
class Rycerz(Jednostka):
|
||||
def __init__(self):
|
||||
super().__init__(100, 20, 1, 5)
|
||||
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()
|
||||
|
Loading…
Reference in New Issue
Block a user