Facebook
From Capacious Wolf, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 237
  1. from enum import Enum
  2.  
  3.  
  4. class Pole(object):
  5.     def __init__(self, value):
  6.         self.value = value
  7.  
  8.     def zawartosc(self):
  9.         if self.value == Field.EMPTY:
  10.             return " "
  11.         elif self.value == Field.SHIP:
  12.             return " "
  13.         elif self.value == Field.NOT_HIT:
  14.             return "@"
  15.         elif self.value == Field.HIT:
  16.             return "X"
  17.  
  18.  
  19. class Field(Enum):
  20.     EMPTY = 0
  21.     SHIP = 1
  22.     NOT_HIT = 2
  23.     HIT = 3
  24.  
  25.  
  26. class Plansza(object):
  27.     def __init__(self, x, y):
  28.         self.plansza = [[0 for i in range(x)] for j in range(y)]
  29.         self.x = x
  30.         self.y = y
  31.         self.wypelnianie_planszy()
  32.  
  33.     def wypelnianie_planszy(self):
  34.         for x in range(self.x):
  35.             for y in range(self.y):
  36.                 self.plansza[x][y] = Pole(Field.EMPTY)
  37.  
  38.     def przeliczanie_wspolrzednych(self, x, y):
  39.         pozycja_na_planszy = x * self.x + y
  40.         return pozycja_na_planszy
  41.  
  42.     def zdefiniuj_statek(self, data):
  43.         data_split = list(data)
  44.         x = int(data_split[0])
  45.         y = int(data_split[1])
  46.         length = int(data_split[2])
  47.         direction = data_split[3]
  48.         if (direction == 'R'):
  49.             for i in range(length):
  50.                 self.plansza[(x - 1)][(y - 1) + i].value = Field.SHIP
  51.  
  52.         if (direction == "D"):
  53.             for j in range(length):
  54.                 self.plansza[(x - 1) + j][(y - 1)].value = Field.SHIP
  55.  
  56.     def check_win(self):
  57.         for x in range(self.x):
  58.             for y in range(self.y):
  59.                 if (self.plansza[x][y].value == Field.SHIP):
  60.                     return True
  61.         raise ValueError("Przegrał Gracz " + self.imie)
  62.  
  63.     def strzel_w_statek(self, pos):
  64.         data_split = list(pos)
  65.         x = int(data_split[0])
  66.         y = int(data_split[1])
  67.         if (self.plansza[x][y].value == Field.SHIP):
  68.             print("trafiony\n")
  69.             self.plansza[x][y].value = Field.HIT
  70.             self.rysowanie_planszy()
  71.             self.check_win()
  72.             return True
  73.         else:
  74.             print("nietrafiles\n")
  75.             self.plansza[x][y].value = Field.NOT_HIT
  76.             self.rysowanie_planszy()
  77.             return False
  78.  
  79.     def rysowanie_planszy(self):
  80.         print(self.imie)
  81.         [print('', x+1, end='') for x in range(10)];print()
  82.         for x in range(self.x):
  83.             linia = ""
  84.             for y in range(self.y):
  85.                 zawartosc_pola = self.plansza[x][y].zawartosc()
  86.                 linia = " ".join((linia, zawartosc_pola))
  87.             print(str(x + 1) + linia)
  88.  
  89.  
  90. def main():
  91.     plansza_gracza1 = Plansza(10, 10)
  92.     plansza_gracza1.imie = "karol"  # input("Podaj imie pierwszego gracza:\n ")
  93.     plansza_gracza2 = Plansza(10, 10)
  94.     plansza_gracza2.imie = "pawel"  # input("Podaj imie drugiego gracza:\n ")
  95.     # plansza_gracza1.zdefiniuj_statek("001D")
  96.     # plansza_gracza1.zdefiniuj_statek("303R")
  97.     # plansza_gracza1.zdefiniuj_statek("032R")
  98.     # plansza_gracza1.zdefiniuj_statek("911D")
  99.     # plansza_gracza1.zdefiniuj_statek("542D")
  100.     # plansza_gracza1.zdefiniuj_statek("733D")
  101.     # plansza_gracza1.zdefiniuj_statek("252R")
  102.     # plansza_gracza1.zdefiniuj_statek("271D")
  103.     # plansza_gracza1.zdefiniuj_statek("581D")
  104.     # plansza_gracza1.zdefiniuj_statek("863D")
  105.     # plansza_gracza1.rysowanie_planszy()
  106.  
  107.     print("")
  108.     # plansza_gracza2.zdefiniuj_statek("001D")
  109.     # plansza_gracza2.zdefiniuj_statek("303R")
  110.     # plansza_gracza2.zdefiniuj_statek("032R")
  111.     # plansza_gracza2.zdefiniuj_statek("911D")
  112.     # plansza_gracza2.zdefiniuj_statek("542D")
  113.     # plansza_gracza2.zdefiniuj_statek("733D")
  114.     # plansza_gracza2.zdefiniuj_statek("252R")
  115.     # plansza_gracza2.zdefiniuj_statek("271D")
  116.     # plansza_gracza2.zdefiniuj_statek("581D")
  117.     # plansza_gracza2.zdefiniuj_statek("863D")
  118.     # plansza_gracza2.rysowanie_planszy()
  119.  
  120.     for x in range(13):
  121.         plansza_gracza1.zdefiniuj_statek(input("Podaj miejsce statku dla gracza 1"))
  122.  
  123.     for x in range(13):
  124.         plansza_gracza2.zdefiniuj_statek(input("Podaj miejsce statku dla gracza 2"))
  125.  
  126.     while (1):
  127.         while (plansza_gracza1.strzel_w_statek(input("Podaj miejsce strzału w statek 1"))):
  128.             print("continue")
  129.         while (plansza_gracza2.strzel_w_statek(input("Podaj miejsce strzału w statek 2"))):
  130.             print("continue")
  131.  
  132.  
  133. if __name__ == "__main__":
  134.     main()