- from enum import Enum
- class Pole(object):
- def __init__(self, value):
- self.value = value
- def zawartosc(self):
- if self.value == Field.EMPTY:
- return " "
- elif self.value == Field.SHIP:
- return " "
- elif self.value == Field.NOT_HIT:
- return "@"
- elif self.value == Field.HIT:
- return "X"
- class Field(Enum):
- EMPTY = 0
- SHIP = 1
- NOT_HIT = 2
- HIT = 3
- class Plansza(object):
- def __init__(self, x, y):
- self.plansza = [[0 for i in range(x)] for j in range(y)]
- self.x = x
- self.y = y
- self.wypelnianie_planszy()
- def wypelnianie_planszy(self):
- for x in range(self.x):
- for y in range(self.y):
- self.plansza[x][y] = Pole(Field.EMPTY)
- def przeliczanie_wspolrzednych(self, x, y):
- pozycja_na_planszy = x * self.x + y
- return pozycja_na_planszy
- def zdefiniuj_statek(self, data):
- data_split = list(data)
- x = int(data_split[0])
- y = int(data_split[1])
- length = int(data_split[2])
- direction = data_split[3]
- if (direction == 'R'):
- for i in range(length):
- self.plansza[(x - 1)][(y - 1) + i].value = Field.SHIP
- if (direction == "D"):
- for j in range(length):
- self.plansza[(x - 1) + j][(y - 1)].value = Field.SHIP
- def check_win(self):
- for x in range(self.x):
- for y in range(self.y):
- if (self.plansza[x][y].value == Field.SHIP):
- return True
- raise ValueError("Przegrał Gracz " + self.imie)
- def strzel_w_statek(self, pos):
- data_split = list(pos)
- x = int(data_split[0])
- y = int(data_split[1])
- if (self.plansza[x][y].value == Field.SHIP):
- print("trafiony\n")
- self.plansza[x][y].value = Field.HIT
- self.rysowanie_planszy()
- self.check_win()
- return True
- else:
- print("nietrafiles\n")
- self.plansza[x][y].value = Field.NOT_HIT
- self.rysowanie_planszy()
- return False
- def rysowanie_planszy(self):
- print(self.imie)
- [print('', x+1, end='') for x in range(10)];print()
- for x in range(self.x):
- linia = ""
- for y in range(self.y):
- zawartosc_pola = self.plansza[x][y].zawartosc()
- linia = " ".join((linia, zawartosc_pola))
- print(str(x + 1) + linia)
- def main():
- plansza_gracza1 = Plansza(10, 10)
- plansza_gracza1.imie = "karol" # input("Podaj imie pierwszego gracza:\n ")
- plansza_gracza2 = Plansza(10, 10)
- plansza_gracza2.imie = "pawel" # input("Podaj imie drugiego gracza:\n ")
- # plansza_gracza1.zdefiniuj_statek("001D")
- # plansza_gracza1.zdefiniuj_statek("303R")
- # plansza_gracza1.zdefiniuj_statek("032R")
- # plansza_gracza1.zdefiniuj_statek("911D")
- # plansza_gracza1.zdefiniuj_statek("542D")
- # plansza_gracza1.zdefiniuj_statek("733D")
- # plansza_gracza1.zdefiniuj_statek("252R")
- # plansza_gracza1.zdefiniuj_statek("271D")
- # plansza_gracza1.zdefiniuj_statek("581D")
- # plansza_gracza1.zdefiniuj_statek("863D")
- # plansza_gracza1.rysowanie_planszy()
- print("")
- # plansza_gracza2.zdefiniuj_statek("001D")
- # plansza_gracza2.zdefiniuj_statek("303R")
- # plansza_gracza2.zdefiniuj_statek("032R")
- # plansza_gracza2.zdefiniuj_statek("911D")
- # plansza_gracza2.zdefiniuj_statek("542D")
- # plansza_gracza2.zdefiniuj_statek("733D")
- # plansza_gracza2.zdefiniuj_statek("252R")
- # plansza_gracza2.zdefiniuj_statek("271D")
- # plansza_gracza2.zdefiniuj_statek("581D")
- # plansza_gracza2.zdefiniuj_statek("863D")
- # plansza_gracza2.rysowanie_planszy()
- for x in range(13):
- plansza_gracza1.zdefiniuj_statek(input("Podaj miejsce statku dla gracza 1"))
- for x in range(13):
- plansza_gracza2.zdefiniuj_statek(input("Podaj miejsce statku dla gracza 2"))
- while (1):
- while (plansza_gracza1.strzel_w_statek(input("Podaj miejsce strzału w statek 1"))):
- print("continue")
- while (plansza_gracza2.strzel_w_statek(input("Podaj miejsce strzału w statek 2"))):
- print("continue")
- if __name__ == "__main__":
- main()