Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. import tkinter
  2. import random
  3. e = []
  4.  
  5.  
  6. def prepare_and_start():
  7. global player, exit, fires, enemies, e
  8. canvas.delete("all")
  9. player_pos = (random.randint(0, N_X) * 30,
  10. random.randint(0, N_Y) * 30)
  11. player = canvas.create_image(player_pos, image=player_pic, anchor='nw')
  12. exit_pos = (random.randint(0, N_X) * 30,
  13. random.randint(0, N_Y) * 30)
  14. exit = canvas.create_image(exit_pos, image=exit_pic, anchor='nw')
  15. N_FIRES = 12 #Число клеток, заполненных огнем
  16. fires = []
  17. f = []
  18. qe = 0
  19. for i in range(N_FIRES):
  20. fire_pos = (random.randint(0, N_X) * 30,
  21. random.randint(0, N_Y) * 30)
  22. fire = canvas.create_image(fire_pos, image=fire_pic, anchor='nw')
  23. fires.append(fire)
  24. f.append(fire_pos)
  25. N_ENEMIES = 8 #Число врагов
  26. enemies = []
  27. qa = 0
  28. k = 0
  29. rt = 0
  30. for i in range(N_ENEMIES):
  31. enemy_pos = (random.randint(0, N_X) * 30,
  32. random.randint(0, N_Y) * 30)
  33. enemy = canvas.create_image(enemy_pos, image=enemy_pic, anchor='nw')
  34. enemies.append((enemy, random.choice([always_right, random_move])))
  35. e.append(enemy_pos)
  36. for i in e:
  37. if e.count(i) != 1:
  38. qa += e.count(i) - 1
  39. while k != qa:
  40. enemy_pos = (random.randint(0, N_X) * 30,
  41. random.randint(0, N_Y) * 30)
  42. k += 1
  43. if enemy_pos in e:
  44. k -= 1
  45. else:
  46. enemy = canvas.create_image(enemy_pos, image=enemy_pic, anchor='nw')
  47. enemies.append((enemy, random.choice([always_right, random_move])))
  48. e.append(enemy_pos)
  49. for i in f:
  50. if f.count(i) != 1:
  51. qe += f.count(i) - 1
  52. while rt != qe:
  53. fire_pos = (random.randint(0, N_X) * 30,
  54. random.randint(0, N_Y) * 30)
  55. rt += 1
  56. if fire_pos in f:
  57. rt -= 1
  58. else:
  59. fire = canvas.create_image(enemy_pos, image=enemy_pic, anchor='nw')
  60. fires.append((enemy, random.choice([always_right, random_move])))
  61. f.append(fire_pos)
  62. label.config(text="Найди выход!")
  63. master.bind("<KeyPress>", key_pressed)
  64.  
  65.  
  66. def always_right():
  67. return (step, 0)
  68.  
  69.  
  70. def random_move():
  71. return random.choice([(step, 0), (-step, 0), (0, step), (0, -step)])
  72.  
  73.  
  74. def do_nothing(x):
  75. pass
  76.  
  77.  
  78. def move_wrap(obj, move):
  79. canvas.move(obj, move[0], move[1])
  80. if canvas.coords(obj)[0] < 0:
  81. canvas.move(obj, 300, 0)
  82. if canvas.coords(obj)[0] > 300:
  83. canvas.move(obj, -300, 0)
  84. if canvas.coords(obj)[1] > 300:
  85. canvas.move(obj, 0, -300)
  86. if canvas.coords(obj)[1] < 0:
  87. canvas.move(obj, 0, 300)
  88.  
  89.  
  90. def check_move():
  91. if canvas.coords(player) == canvas.coords(exit):
  92. label.config(text="Победа!")
  93. master.bind("<KeyPress>", do_nothing)
  94. for f in fires:
  95. if canvas.coords(player) == canvas.coords(f):
  96. label.config(text="Ты проиграл!")
  97. master.bind("<KeyPress>", do_nothing)
  98. for e in enemies:
  99. if canvas.coords(player) == canvas.coords(e[0]):
  100. label.config(text="Ты проиграл!")
  101. master.bind("<KeyPress>", do_nothing)
  102.  
  103.  
  104. def key_pressed(event):
  105. global e
  106. if event.keysym == 'Up':
  107. move_wrap(player, (0, -step))
  108. if event.keysym == 'Down':
  109. move_wrap(player, (0, step))
  110. if event.keysym == 'Left':
  111. move_wrap(player, (-step, 0))
  112. if event.keysym == 'Right':
  113. move_wrap(player, (step, 0))
  114. check_move()
  115. # for enemy in enemies:
  116. # direction = enemy[1]() # вызвать функцию перемещения у "врага"
  117. # move_wrap(enemy[0], direction) # произвести перемещение
  118. # print(e)
  119. for enemy in enemies:
  120. direction = enemy[1]()
  121. move_wrap(enemy[0], direction)
  122. list_ = [(step, 0), (-step, 0), (0, step), (0, -step)]
  123. predictions = []
  124. for i in list_:
  125. predictions.append([canvas.coords(enemy[0])[0] + i[0], canvas.coords(enemy[0])[1] + i[1]])
  126. for i in predictions:
  127. if i[0] - canvas.coords(player)[0] > i[1] - canvas.coords(player)[1]:
  128. if predictions.index(i) == 1:
  129. move_wrap(enemy[0], (step, 0))
  130. elif predictions.index(i) == 2:
  131. move_wrap(enemy[0], (-step, 0))
  132. elif predictions.index(i) == 3:
  133. move_wrap(enemy[0], (0, step))
  134. elif predictions.index(i) == 4:
  135. move_wrap(enemy[0], (0, -step))
  136. predictions.clear()
  137. master = tkinter.Tk()
  138. step = 15
  139. N_X = 10
  140. N_Y = 10
  141. canvas = tkinter.Canvas(master, bg='blue',
  142. width=30 * N_X, height=30 * N_Y)
  143.  
  144. player_pos = (random.randint(0, N_X) * 30,
  145. random.randint(0, N_Y) * 30)
  146. exit_pos = (random.randint(0, N_X) * 30,
  147. random.randint(0, N_Y) * 30)
  148.  
  149. player = canvas.create_oval((player_pos[0], player_pos[1]),
  150. (player_pos[0] + 30, player_pos[1] + 30),
  151. fill='green')
  152. exit = canvas.create_oval((exit_pos[0], exit_pos[1]),
  153. (exit_pos[0] + 30, exit_pos[1] + 30),
  154. fill='yellow')
  155.  
  156. label = tkinter.Label(master, text="Найди выход")
  157. label.pack()
  158. player_pic = tkinter.PhotoImage(file="player_pic.png")
  159. exit_pic = tkinter.PhotoImage(file="exit_pic.png")
  160. fire_pic = tkinter.PhotoImage(file="fire_pic.png")
  161. enemy_pic = tkinter.PhotoImage(file="enemy_pic.png")
  162. master.bind("<KeyPress>", key_pressed)
  163. canvas = tkinter.Canvas(master, bg='blue',
  164. height=N_X * 30, width=N_Y * 30)
  165. canvas.pack()
  166. restart = tkinter.Button(master, text="Начать заново", command=prepare_and_start)
  167. restart.pack()
  168. prepare_and_start()
  169. master.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement