Guest User

Untitled

a guest
Nov 23rd, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.12 KB | None | 0 0
  1. Traceback (most recent call last):
  2. File "C:/Users/Чебупелька/Desktop/Python/!Читаю с клавиатуры.py", line 249, in <module>
  3. main()
  4. File "C:/Users/Чебупелька/Desktop/Python/!Читаю с клавиатуры.py", line 246, in main
  5. game.play()
  6. File "C:/Users/Чебупелька/Desktop/Python/!Читаю с клавиатуры.py", line 27, in play
  7. games.screen.mainloop()
  8. File "C:Program Files (x86)Python36-32libsite-packageslivewiresgames.py", line 308, in mainloop
  9. object._tick()
  10. File "C:Program Files (x86)Python36-32libsite-packageslivewiresgames.py", line 506, in _tick
  11. self.update()
  12. File "C:/Users/Чебупелька/Desktop/Python/!Читаю с клавиатуры.py", line 126, in update
  13. super(Missile, self).update()
  14. File "C:/Users/Чебупелька/Desktop/Python/!Читаю с клавиатуры.py", line 90, in update
  15. sprite.die()
  16. AttributeError: 'Text' object has no attribute 'die'
  17. Exception ignored in: <bound method Sprite.__del__ of <__main__.Missile object at 0x06283610>>
  18.  
  19. import random
  20. import math
  21.  
  22. from livewires import games, color
  23.  
  24. games.init(screen_width=800, screen_height=600, fps=60)
  25.  
  26.  
  27. class Game(object):
  28. def __init__(self):
  29. self.level = 0
  30. self.score = games.Text(value='0',
  31. size=30,
  32. color=color.black,
  33. top=0,
  34. left=games.screen.width)
  35. games.screen.add(self.score)
  36. self.ship = Ship(game=self,
  37. x=games.screen.width / 2,
  38. y=games.screen.height / 2)
  39. games.screen.add(self.ship)
  40.  
  41. def play(self):
  42. nebula_image = games.load_image('nebula228.jpg', transparent=False)
  43. games.screen.background = nebula_image
  44. self.lvlup()
  45. games.screen.mainloop()
  46.  
  47. def lvlup(self):
  48. self.level += 1
  49. BUFFER = 150
  50. for i in range(self.level):
  51. x_min = random.randrange(BUFFER)
  52. y_min = BUFFER - x_min
  53. x_distance = random.randrange(y_min, games.screen.width - x_min)
  54. y_distance = random.randrange(x_min, games.screen.height - y_min)
  55. x = self.ship.x + x_distance
  56. y = self.ship.y + y_distance
  57. y %= games.screen.height
  58. x %= games.screen.width
  59. new_asteroid = Asteroid(game=self,
  60. x=x, y=y,
  61. size=Asteroid.LARGE)
  62. games.screen.add(new_asteroid)
  63. level_message = games.Message(value='Level ' + str(self.level),
  64. size=40,
  65. color=color.yellow,
  66. x=games.screen.width / 2,
  67. y=games.screen.height / 10,
  68. lifetime=3 * games.screen.fps,
  69. is_collideable=False)
  70. games.screen.add(level_message)
  71.  
  72. def end(self):
  73. end_message = games.Message(value='Game Over!', lifetime=5 * games.screen.fps,
  74. x=games.screen.width / 2,
  75. y=games.screen.height / 2,
  76. is_collideable=False,
  77. after_death=games.screen.quit)
  78. games.screen.add(end_message)
  79.  
  80.  
  81. class Wrapper(games.Sprite):
  82. def upadte(self):
  83. if self.top > games.screen.height:
  84. self.bottom = 0
  85. if self.bottom < 0:
  86. self.top = games.screen.height
  87. if self.left > games.screen.width:
  88. self.right = 0
  89. if self.right < 0:
  90. self.left = games.screen.width
  91.  
  92. def die(self):
  93. self.destroy()
  94.  
  95.  
  96. class Collider(Wrapper):
  97. def update(self):
  98. if self.top > games.screen.height:
  99. self.bottom = 0
  100. if self.bottom < 0:
  101. self.top = games.screen.height
  102. if self.left > games.screen.width:
  103. self.right = 0
  104. if self.right < 0:
  105. self.left = games.screen.width
  106. if self.overlapping_sprites:
  107. for sprite in self.overlapping_sprites:
  108. sprite.die()
  109. self.die()
  110.  
  111. def die(self):
  112. new_expl = Explosion(x=self.x, y=self.y)
  113. games.screen.add(new_expl)
  114. self.destroy()
  115.  
  116.  
  117. class Missile(Collider):
  118. image = games.load_image('missile.bmp', transparent=True)
  119. BUFFER = 40
  120. VELOCITY_FACTOR = 7
  121. LIFETIME = 100
  122.  
  123. def __init__(self, sx, sy, sangle):
  124. angle = sangle * math.pi / 180
  125. bx = Missile.BUFFER * math.sin(angle)
  126. by = Missile.BUFFER * -math.cos(angle)
  127. x = sx + bx
  128. y = sy + by
  129. dy = Missile.VELOCITY_FACTOR * -math.cos(angle)
  130. dx = Missile.VELOCITY_FACTOR * math.sin(angle)
  131. super(Missile, self).__init__(image=Missile.image,
  132. x=x, y=y,
  133. dx=dx, dy=dy)
  134. self.lifetime = Missile.LIFETIME
  135.  
  136. def update(self):
  137. if self.overlapping_sprites:
  138. for sprite in self.overlapping_sprites:
  139. sprite.die()
  140. self.die()
  141. self.lifetime -= 1
  142. if self.lifetime == 0:
  143. self.destroy()
  144. super(Missile, self).update()
  145.  
  146. def die(self):
  147. self.destroy()
  148.  
  149.  
  150. class Ship(Collider):
  151. image = games.load_image('ship.bmp', transparent=True)
  152. ROTATION_STEP = 3
  153. VELOCITY_STEP = .03
  154. VELOCITY_MAX = 3
  155. MISSILE_DELAY = 25
  156.  
  157. def __init__(self, game, x, y):
  158. self.game = game
  159. super(Ship, self).__init__(image=Ship.image, x=x, y=y)
  160. self.missile_wait = 0
  161.  
  162. def update(self):
  163. if self.missile_wait > 0:
  164. self.missile_wait -= 1
  165. if games.keyboard.is_pressed(games.K_w):
  166. angle = self.angle * math.pi / 180
  167. self.dy += Ship.VELOCITY_STEP * -math.cos(angle)
  168. self.dx += Ship.VELOCITY_STEP * math.sin(angle)
  169. self.dx = min(max(self.dx, -Ship.VELOCITY_MAX), Ship.VELOCITY_MAX)
  170. self.dy = min(max(self.dy, -Ship.VELOCITY_MAX), Ship.VELOCITY_MAX)
  171. if games.keyboard.is_pressed(games.K_LEFT):
  172. self.angle -= Ship.ROTATION_STEP
  173. if games.keyboard.is_pressed(games.K_RIGHT):
  174. self.angle += Ship.ROTATION_STEP
  175. if games.keyboard.is_pressed(games.K_SPACE) and self.missile_wait == 0:
  176. new_missile = Missile(self.x, self.y, self.angle)
  177. games.screen.add(new_missile)
  178. self.missile_wait = Ship.MISSILE_DELAY
  179. if self.top > games.screen.height:
  180. self.bottom = 0
  181. if self.bottom < 0:
  182. self.top = games.screen.height
  183. if self.left > games.screen.width:
  184. self.right = 0
  185. if self.right < 0:
  186. self.left = games.screen.width
  187. super(Ship, self).update()
  188.  
  189. def die(self):
  190. self.game.end()
  191. super(Ship, self).die()
  192.  
  193.  
  194. class Asteroid(Wrapper):
  195. POINTS = 30
  196. SMALL = 1
  197. MEDIUM = 2
  198. LARGE = 3
  199. SPAWN = 2
  200. images = {SMALL: games.load_image('asteroid_small.bmp'),
  201. MEDIUM: games.load_image('asteroid_med.bmp'),
  202. LARGE: games.load_image('asteroid_big.bmp')}
  203. SPEED = 2
  204. total = 1
  205.  
  206. def __init__(self, game, x, y, size):
  207. self.game = game
  208. Asteroid.total += 1
  209. super(Asteroid, self).__init__(
  210. image=Asteroid.images[size],
  211. x=x, y=y,
  212. dx=random.choice([1, -1]) * Asteroid.SPEED * random.random() / size,
  213. dy=random.choice([1, -1]) * Asteroid.SPEED * random.random() / size)
  214. self.size = size
  215.  
  216. def update(self):
  217. if self.top > games.screen.height:
  218. self.bottom = 0
  219. if self.bottom < 0:
  220. self.top = games.screen.height
  221. if self.left > games.screen.width:
  222. self.right = 0
  223. if self.right < 0:
  224. self.left = games.screen.width
  225. super(Asteroid, self).update()
  226.  
  227. def die(self):
  228. Asteroid.total -= 1
  229. self.game.score.value += str(30)
  230. self.game.score.right = games.screen.width - 10
  231. new_expl = Explosion(x=self.x, y=self.y)
  232. games.screen.add(new_expl)
  233. self.destroy()
  234. if self.size != 1:
  235. for i in range(Asteroid.SPAWN):
  236. new_aster = Asteroid(x=self.x, y=self.y,
  237. size=self.size - 1)
  238. games.screen.add(new_aster)
  239. if Asteroid.total == 0:
  240. self.game.lvlup()
  241. super(Asteroid, self).die()
  242.  
  243.  
  244. class Explosion(games.Animation):
  245. ALLAHU_AKBAR = ('1.bmp',
  246. '2.bmp',
  247. '3.bmp',
  248. '4.bmp',
  249. '5.bmp',
  250. '6.bmp',
  251. '7.bmp',
  252. '8.bmp',
  253. '9.bmp')
  254.  
  255. def __init__(self, x, y):
  256. super(Explosion, self).__init__(images=Explosion.ALLAHU_AKBAR,
  257. x=x, y=y,
  258. repeat_interval=4, n_repeats=1,
  259. is_collideable=False)
  260.  
  261.  
  262. def main():
  263. game = Game()
  264. game.play()
  265.  
  266.  
  267. main()
Add Comment
Please, Sign In to add comment