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()