Advertisement
Guest User

ZmeyaFull2.0

a guest
May 22nd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.82 KB | None | 0 0
  1. import random
  2.  
  3. class Kusok:
  4.     def __init__(self, coords, next = None, prev = None):
  5.         self.next = next
  6.         self.prev = prev
  7.         self.coords = coords
  8.         self.ishead = False
  9.         self.isend = False
  10.  
  11.  
  12. def create_head(zmeya, direction):
  13.     coords_new_head = [zmeya.coords[0] + direction[0], zmeya.coords[1] + direction[1]]
  14.     new_head = Kusok(coords_new_head, next = zmeya)
  15.     zmeya.ishead = False
  16.     zmeya.prev = new_head
  17.     new_head.ishead = True
  18.     return new_head
  19.  
  20. def delete_end(zmeya):
  21.     hvost = zmeya
  22.     while hvost.isend != True:
  23.         hvost = hvost.next
  24.     hvost.prev.isend = True
  25.     hvost.prev.next = None
  26.     return zmeya
  27.  
  28. def create_pole():
  29.     pole = [[0]*12 for x in range(12)]
  30.     for i in range(len(pole)):
  31.         for j in range(len(pole)):
  32.             if i == 0 or j == 0 or i == len(pole)-1 or j == len(pole) -1:
  33.                 pole[i][j] = 1
  34.     return pole
  35.  
  36. def print_pole (pole):
  37.     for i in range(len(pole)):
  38.         print(*pole[i])
  39.  
  40.  
  41. def draw(zmeya, yabloko):
  42.     pole = create_pole()
  43.     pole[yabloko[0]][yabloko[1]] = "X"
  44.     pole[zmeya.coords[0]][zmeya.coords[1]] = "G"
  45.     zmeya = zmeya.next
  46.     while zmeya.isend != True:
  47.         x = zmeya.coords[0]
  48.         y = zmeya.coords[1]
  49.         pole[x][y] = "="
  50.         zmeya = zmeya.next
  51.     x = zmeya.coords[0]
  52.     y = zmeya.coords[1]
  53.     pole[x][y] = "="
  54.     print_pole(pole)
  55.     return pole
  56.  
  57. def possible_move(zmeya, pole, direction):
  58.     x = zmeya.coords[0] + direction[0]
  59.     y = zmeya.coords[1] + direction[1]
  60.     if pole[x][y]== 0 or pole[x][y]== "X":
  61.         return True
  62.     else:
  63.         return False
  64.  
  65.  
  66. def move(pole, zmeya, direction, yabloko):
  67.     if possible_move(zmeya, pole, direction):
  68.         zmeya = create_head(zmeya, direction)
  69.         if zmeya.coords == yabloko:
  70.             yabloko = create_yabloko(zmeya, pole)
  71.         else:
  72.             zmeya = delete_end(zmeya)
  73.         flag = 0
  74.     else:
  75.         flag = 1
  76.     return zmeya, yabloko, flag
  77.  
  78.  
  79. def create_yabloko(zmeya, pole):
  80.     while pole[yabloko[0]][yabloko[1]] != 0:
  81.         yabloko[0] = random.randint(0,len(pole)-1)
  82.         yabloko[1] = random.randint(0,len(pole)-1)
  83.     print([yabloko[0],yabloko[1]])
  84.     return [yabloko[0],yabloko[1]]
  85.  
  86. zmeya = Kusok([5,5])
  87. zmeya.ishead = True
  88. hvost = Kusok([5,6])
  89. hvost.isend = True
  90. zmeya.next = hvost
  91. hvost.prev = zmeya
  92.  
  93. yabloko = [0,0]
  94. pole = create_pole()
  95. yabloko = create_yabloko(zmeya, pole)
  96. pole = draw(zmeya, yabloko)
  97. inp = input()
  98. while inp != "end":
  99.     flag = 0
  100.     directions = {"w":[-1, 0], "d":[0, 1], "s":[1, 0], "a": [0, -1]}
  101.     inp = directions[inp]
  102.     zmeya, yabloko, flag = move(pole, zmeya, inp, yabloko)
  103.     pole = draw(zmeya, yabloko)
  104.     if flag == 1:
  105.         print("LOL, u are dead")
  106.         inp = "end"
  107.     else:
  108.         inp = input()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement