Advertisement
Guest User

Untitled

a guest
Jan 26th, 2015
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 49.66 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sys, pygame, random, math, pyganim, os
  5.  
  6. size = (width, height) = (800, 600)
  7.  
  8. screen = pygame.display.set_mode(size)
  9. pygame.display.set_caption("Ship")
  10.  
  11. pygame.init()
  12. pygame.mixer.set_num_channels(16)
  13.  
  14.  
  15. diagonal_2 = width**2 + height**2
  16. score = 0
  17. time_shift = 0
  18.  
  19. ship_2_im = pygame.image.load("ship_2.png")
  20. ship_1_im = pygame.image.load("ship_1.png")
  21. ship0_im = pygame.image.load("ship0.png")
  22. ship1_im = pygame.image.load("ship1.png")
  23. ship2_im = pygame.image.load("ship2.png")
  24. ship_2_mask = pygame.mask.from_surface(ship_2_im)
  25. ship_1_mask = pygame.mask.from_surface(ship_1_im)
  26. ship0_mask = pygame.mask.from_surface(ship0_im)
  27. ship1_mask = pygame.mask.from_surface(ship1_im)
  28. ship2_mask = pygame.mask.from_surface(ship2_im)
  29.  
  30. list_of_ships = [ship0_im, ship1_im, ship2_im, ship_2_im, ship_1_im]
  31. list_of_masks = [ship0_mask, ship1_mask, ship2_mask, ship_2_mask, ship_1_mask]
  32.  
  33. galaxy_im = pygame.image.load("galaxy.png").convert()
  34. menu_im = pygame.image.load("menu.png")
  35. cross_im = pygame.image.load("cross.png")
  36. star_im = pygame.image.load("star.png")
  37. blaster_im = pygame.image.load("blaster.png")
  38. rocket_im = pygame.image.load("rocket.png")
  39. lazer1_im = pygame.image.load("lazer1.png")
  40. lazer2_im = pygame.image.load("lazer2.png")
  41.  
  42. gun_2_im = pygame.image.load("gun_2.png")
  43. gun_1_im = pygame.image.load("gun_1.png")
  44. gun0_im = pygame.image.load("gun0.png")
  45. gun1_im = pygame.image.load("gun1.png")
  46. gun2_im = pygame.image.load("gun2.png")
  47.  
  48. list_of_guns = [gun0_im, gun1_im, gun2_im, gun_2_im, gun_1_im]
  49.  
  50. double_gun_2_im = pygame.image.load("double_gun_2.png")
  51. double_gun_1_im = pygame.image.load("double_gun_1.png")
  52. double_gun0_im = pygame.image.load("double_gun0.png")
  53. double_gun1_im = pygame.image.load("double_gun1.png")
  54. double_gun2_im = pygame.image.load("double_gun2.png")
  55.  
  56. list_of_double_guns = [double_gun0_im, double_gun1_im, double_gun2_im, double_gun_2_im, double_gun_1_im]
  57.  
  58. polygun_2_im = pygame.image.load("polygun_2.png")
  59. polygun_1_im = pygame.image.load("polygun_1.png")
  60. polygun0_im = pygame.image.load("polygun0.png")
  61. polygun1_im = pygame.image.load("polygun1.png")
  62. polygun2_im = pygame.image.load("polygun2.png")
  63.  
  64. list_of_polyguns = [polygun0_im, polygun1_im, polygun2_im, polygun_2_im, polygun_1_im]
  65.  
  66. armor_2_im = pygame.image.load("armor_2.png")
  67. armor_1_im = pygame.image.load("armor_1.png")
  68. armor0_im = pygame.image.load("armor0.png")
  69. armor1_im = pygame.image.load("armor1.png")
  70. armor2_im = pygame.image.load("armor2.png")
  71.  
  72. list_of_armors = [armor0_im, armor1_im, armor2_im, armor_2_im, armor_1_im]
  73.  
  74. flare_gun_2_im = pygame.image.load("flare_gun_2.png")
  75. flare_gun_1_im = pygame.image.load("flare_gun_1.png")
  76. flare_gun0_im = pygame.image.load("flare_gun0.png")
  77. flare_gun1_im = pygame.image.load("flare_gun1.png")
  78. flare_gun2_im = pygame.image.load("flare_gun2.png")
  79.  
  80. list_of_flare_guns = [flare_gun0_im, flare_gun1_im, flare_gun2_im, flare_gun_2_im, flare_gun_1_im]
  81.  
  82. extra_gun_2_im = pygame.image.load("extra_gun_2.png")
  83. extra_gun_1_im = pygame.image.load("extra_gun_1.png")
  84. extra_gun0_im = pygame.image.load("extra_gun0.png")
  85. extra_gun1_im = pygame.image.load("extra_gun1.png")
  86. extra_gun2_im = pygame.image.load("extra_gun2.png")
  87.  
  88. list_of_extra_guns = [extra_gun0_im, extra_gun1_im, extra_gun2_im, extra_gun_2_im, extra_gun_1_im]
  89.  
  90. lazer_gun_2_im = pygame.image.load("lazer_gun_2.png")
  91. lazer_gun_1_im = pygame.image.load("lazer_gun_1.png")
  92. lazer_gun0_im = pygame.image.load("lazer_gun0.png")
  93. lazer_gun1_im = pygame.image.load("lazer_gun1.png")
  94. lazer_gun2_im = pygame.image.load("lazer_gun2.png")
  95.  
  96. list_of_lazer_guns = [lazer_gun0_im, lazer_gun1_im, lazer_gun2_im, lazer_gun_2_im, lazer_gun_1_im]
  97.  
  98. bonus_for_double_gun_im = pygame.image.load("bonus_for_double_gun.png")
  99. bonus_for_armor_im = pygame.image.load("bonus_for_armor.png")
  100. bonus_for_rocket_im = pygame.image.load("bonus_for_rocket.png")
  101. bonus_for_polygun_im = pygame.image.load("bonus_for_polygun.png")
  102. bonus_for_extra_gun_im = pygame.image.load("bonus_for_extra_gun.png")
  103. bonus_for_25_repair_im = pygame.image.load("bonus_for_25_repair.png")
  104. bonus_for_lazer_im = pygame.image.load("bonus_for_lazer.png")
  105.  
  106. ufo_im = pygame.image.load("ufo.png")
  107. armor_ufo_im = pygame.image.load("armor_ufo.png")
  108. armor_ufo1_im = pygame.image.load("armor_ufo1.png")
  109. ufo_weapon_im = pygame.image.load("ufo_weapon.png")
  110. bird_ship_im = pygame.image.load("bird_ship.png")
  111. bird_ship1_im = pygame.image.load("bird_ship1.png")
  112. bird_ship2_im = pygame.image.load("bird_ship2.png")
  113. bird_ship3_im = pygame.image.load("bird_ship3.png")
  114. bird_ship_weapon_im = pygame.image.load("bird_ship_weapon.png")
  115. cosmo_ship_im = pygame.image.load("cosmo_ship.png")
  116. cosmo_ship1_im = pygame.image.load("cosmo_ship1.png")
  117. cosmo_ship2_im = pygame.image.load("cosmo_ship2.png")
  118. cosmo_ship3_im = pygame.image.load("cosmo_ship3.png")
  119. cosmo_ship_weapon_im = pygame.image.load("cosmo_ship_weapon.png")
  120. aero_ship_im = pygame.image.load("aero_ship.png")
  121. aero_ship1_im = pygame.image.load("aero_ship1.png")
  122. aero_ship2_im = pygame.image.load("aero_ship2.png")
  123. aero_ship3_im = pygame.image.load("aero_ship3.png")
  124. aero_ship_weapon_im = pygame.image.load("aero_ship_weapon.png")
  125.  
  126.  
  127. muse_dir = os.curdir + "\music\\"
  128. list_of_authors = os.listdir(muse_dir)
  129. author = dict()
  130. my_music = []
  131. for auth in list_of_authors:
  132.     music_of_auth = os.listdir(muse_dir + str(auth) + '\\')
  133.     for music in music_of_auth:
  134.         author[music] = auth
  135.     my_music += music_of_auth
  136.  
  137. play_list = random.shuffle(my_music)
  138. cur = 0
  139. pygame.mixer.music.load(muse_dir + author[my_music[cur]] + '\\' + my_music[cur])
  140. pygame.mixer.music.set_volume(0.5)
  141. pygame.mixer.music.play()
  142. cur += 1
  143.  
  144.  
  145. muse_blaster = pygame.mixer.Sound("muse_blaster.ogg")
  146. muse_blaster.set_volume(0.3)
  147. muse_rocket = pygame.mixer.Sound("muse_rocket.ogg")
  148. muse_rocket.set_volume(0.15)
  149. muse_ufo_weapon = pygame.mixer.Sound("muse_ufo_weapon.ogg")
  150. muse_ufo_weapon.set_volume(0.4)
  151. muse_enemy_blaster = pygame.mixer.Sound("muse_enemy_laser.ogg")
  152. muse_enemy_blaster.set_volume(0.4)
  153. muse_small_bah = pygame.mixer.Sound("muse_small_bah.ogg")
  154. muse_small_bah.set_volume(0.43)
  155. muse_aimed = pygame.mixer.Sound("muse_aimed.ogg")
  156. muse_aimed.set_volume(0.2)
  157. muse_lazer = pygame.mixer.Sound("muse_lazer.ogg")
  158. muse_lazer.set_volume(0.3)
  159.  
  160.  
  161. class Star(pygame.sprite.Sprite):
  162.     def __init__(self):
  163.         pygame.sprite.Sprite.__init__(self)
  164.         self.image = star_im
  165.         self.rect = self.image.get_rect()
  166.         self.speed = 5
  167.     def reset_pos(self):
  168.         self.rect.x = width
  169.         self.rect.y = random.randrange(height)        
  170.     def update(self):
  171.         self.rect.x -= self.speed
  172.         if self.rect.x <= 0:
  173.             self.reset_pos()
  174.            
  175. class Ship(pygame.sprite.Sprite):
  176.     def __init__(self):
  177.         pygame.sprite.Sprite.__init__(self)
  178.         self.image = ship0_im
  179.         self.rect = self.image.get_rect()
  180.         self.mask = ship0_mask
  181.         self.rect.x = self.rect.width + 100
  182.         self.rect.y = height / 2
  183.         self.width = self.rect[2]
  184.         self.height = self.rect[3]
  185.         self.life = 3
  186.         self.health = 50
  187.         self.damage = 15
  188.         self.speed = 4
  189.         self.x_speed = 0
  190.         self.y_speed = 0
  191.         self.state = 0
  192.         self.begin_anim = 0
  193.         self.we_begin = False
  194.         self.gun = True
  195.         self.double_gun = False
  196.         self.polygun = False
  197.         self.armor = False
  198.         self.flare_gun = False
  199.         self.extra_gun = False
  200.         self.lazer_gun = False
  201.         self.has_lazer = False
  202.         self.has_one_lazer = False
  203.         self.has_three_lazer = False
  204.         self.has_weapon = self.double_gun or self.flare_gun or self.polygun or self.lazer_gun
  205.         self.time_for_weapon = 0.0
  206.         self.time_for_armor = 0.0
  207.         self.begin_weapon = 0.0
  208.         self.begin_armor = 0.0
  209.         self.weapon_print = 0
  210.         self.armor_print = 0
  211.         self.time_for_blaster = 160
  212.         self.time_for_rocket = 190
  213.         self.time_for_lazer = 250
  214.         self.time_last_blaster = -time_shift
  215.         self.time_last_rocket = -time_shift
  216.         self.can_fire_blaster = True
  217.         self.can_fire_rocket = True
  218.     def new_life(self):
  219.         play_an_effect(muse_small_bah)
  220.         self.life -= 1
  221.         self.health = 50
  222.         self.double_gun = False
  223.         self.flare_gun = False
  224.         self.lazer_gun = False
  225.         self.has_lazer = False
  226.         self.has_one_lazer = False
  227.         self.has_three_lazer = False        
  228.         self.time_for_weapon = 0.0
  229.         self.begin_armor = pygame.time.get_ticks() - time_shift
  230.         self.armor = True
  231.         self.time_for_armor = 6000
  232.         self.extra_gun = False
  233.         self.polygun = False
  234.         self.has_weapon = False
  235.         self.can_fire_blaster = True
  236.         self.can_fire_rocket = True
  237.         if not self.gun:
  238.             self.gun = True
  239.             gun = Gun(self.rect.x, self.rect.y)
  240.             ship_weapon_list.add(gun)
  241.     def update(self, must_update):
  242.         if pygame.time.get_ticks() - time_shift - self.time_last_blaster >= self.time_for_blaster:
  243.             self.can_fire_blaster = True
  244.         if pygame.time.get_ticks() - time_shift - self.time_last_rocket >= self.time_for_rocket:
  245.             self.can_fire_rocket = True        
  246.         self.has_weapon = self.double_gun or self.flare_gun or self.polygun or self.lazer_gun
  247.         if not self.has_lazer:
  248.             self.has_one_lazer = False
  249.             self.has_three_lazer = False        
  250.         if self.has_weapon:
  251.             self.weapon_print = int((self.time_for_weapon - (pygame.time.get_ticks() - self.begin_weapon - time_shift)) // 1000)
  252.             if pygame.time.get_ticks() - self.begin_weapon - time_shift >= self.time_for_weapon:
  253.                 self.time_for_weapon = 0.0
  254.                 self.double_gun = False
  255.                 self.flare_gun = False
  256.                 self.polygun = False
  257.                 self.lazer_gun = False
  258.                 self.has_lazer = False
  259.         if self.armor:
  260.             self.armor_print = int((self.time_for_armor - (pygame.time.get_ticks() - self.begin_armor - time_shift)) // 1000)
  261.             if pygame.time.get_ticks() - self.begin_armor - time_shift >= self.time_for_armor:
  262.                 self.time_for_armor = 0.0
  263.                 self.armor = False
  264.         if not self.gun and not self.has_weapon:
  265.             gun = Gun(self.rect.x, self.rect.y)
  266.             self.gun = True
  267.             ship_weapon_list.add(gun)            
  268.         global up, down, time_begin_up, time_begin_down
  269.        
  270.         if not up and not down:
  271.             if self.state != 0:
  272.                 if not self.we_begin:
  273.                     self.begin_anim = pygame.time.get_ticks() - time_shift
  274.                     self.we_begin = True
  275.                 if self.state == 2:
  276.                     if pygame.time.get_ticks() - self.begin_anim - time_shift >= 200:
  277.                         self.state = 1
  278.                         self.begin_anim = pygame.time.get_ticks() - time_shift
  279.                 elif self.state == -2:
  280.                     if pygame.time.get_ticks() - self.begin_anim - time_shift >= 200:
  281.                         self.state = -1
  282.                         self.begin_anim = pygame.time.get_ticks() - time_shift
  283.                 if pygame.time.get_ticks() - self.begin_anim - time_shift >= 400:
  284.                     self.state = 0
  285.                     self.we_begin = False
  286.         else:
  287.             if up and not down:
  288.                 if self.state == 2 and pygame.time.get_ticks() - time_begin_up - time_shift >= 700:
  289.                     self.state = 1
  290.                     time_begin_up = pygame.time.get_ticks() - time_shift
  291.                 elif self.state == 1 and pygame.time.get_ticks() - time_begin_up - time_shift >= 500:
  292.                     self.state = 0
  293.                     time_begin_up = pygame.time.get_ticks() - time_shift
  294.                 elif self.state == 0 and pygame.time.get_ticks() - time_begin_up - time_shift >= 500:
  295.                     self.state = -1
  296.                     time_begin_up = pygame.time.get_ticks() - time_shift
  297.                 elif self.state == -1 and pygame.time.get_ticks() - time_begin_up - time_shift >= 700:
  298.                     self.state = -2
  299.                     time_begin_up = pygame.time.get_ticks() - time_shift
  300.            
  301.             if down and not up:
  302.                 if self.state == -2 and pygame.time.get_ticks() - time_begin_down - time_shift >= 700:
  303.                     self.state = -1
  304.                     time_begin_down = pygame.time.get_ticks() - time_shift
  305.                 elif self.state == -1 and pygame.time.get_ticks() - time_begin_down - time_shift >= 500:
  306.                     self.state = 0
  307.                     time_begin_down = pygame.time.get_ticks() - time_shift
  308.                 elif self.state == 0 and pygame.time.get_ticks() - time_begin_down - time_shift >= 500:
  309.                     self.state = 1
  310.                     time_begin_down = pygame.time.get_ticks() - time_shift
  311.                 elif self.state == 1 and pygame.time.get_ticks() - time_begin_down - time_shift >= 700:
  312.                     self.state = 2
  313.                     time_begin_down = pygame.time.get_ticks() - time_shift  
  314.         if self.armor:
  315.             self.image = list_of_armors[self.state]
  316.         else:
  317.             self.image = list_of_ships[self.state]
  318.         self.mask = list_of_masks[self.state]  
  319.         prev_x, prev_y = self.rect.x, self.rect.y
  320.         self.rect = self.image.get_rect()
  321.         self.rect.x, self.rect.y = prev_x, prev_y
  322.         self.width = self.rect[2]
  323.         self.height = self.rect[3]
  324.         if must_update:
  325.             self.rect.x += self.x_speed
  326.             self.rect.y += self.y_speed        
  327.        
  328. player = Ship()
  329.  
  330. def rad(degree):
  331.     return degree * math.pi / 180
  332.  
  333. def degree(rad):
  334.     return rad * 180 / math.pi
  335.    
  336.        
  337. class Blaster(pygame.sprite.Sprite):
  338.     def __init__(self, x, y, angle = 0): # > 0 rotate counterclockwise, angle in degrees
  339.         pygame.sprite.Sprite.__init__(self)
  340.         self.image = blaster_im
  341.         self.image = pygame.transform.rotate(self.image, angle)
  342.         self.rect = self.image.get_rect()
  343.         self.mask = pygame.mask.from_surface(self.image)
  344.         self.rect.x = x
  345.         self.rect.y = y
  346.         self.type = 'Blaster'
  347.         self.damage = 2
  348.         self.speed = 7
  349.         self.x_speed = self.speed * math.cos(rad(angle))
  350.         self.y_speed = -self.speed * math.sin(rad(angle))
  351.         play_an_effect(muse_blaster)
  352.     def update(self, must_update):
  353.         if self.rect.x > width or self.rect.y < 0 or self.rect.y > height:
  354.             self.kill()
  355.         self.rect.x += self.x_speed
  356.         self.rect.y += self.y_speed
  357.        
  358. class Rocket(pygame.sprite.Sprite):
  359.     def __init__(self, x, y):
  360.         pygame.sprite.Sprite.__init__(self)
  361.         self.image = rocket_im
  362.         self.rect = self.image.get_rect()
  363.         self.mask = pygame.mask.from_surface(self.image)
  364.         self.rect.x = x
  365.         self.rect.y = y
  366.         self.type = 'Rocket'
  367.         self.damage = 5
  368.         self.speed = 8
  369.         #self.smoke = pyganim.PygAnimation([(smoke1_im, 0.2), (smoke2_im, 0.2)])
  370.         #self.smoke.play()
  371.         play_an_effect(muse_rocket)      
  372.     def update(self, must_update):
  373.         if self.rect.x > width:
  374.             self.kill()
  375.         self.rect.x += self.speed
  376.        
  377. class Lazer(pygame.sprite.Sprite):
  378.     def __init__(self, x, y):
  379.         pygame.sprite.Sprite.__init__(self)
  380.         self.image = lazer1_im
  381.         self.rect = self.image.get_rect()
  382.         self.mask = pygame.mask.from_surface(self.image)
  383.         self.rect.x = x + 55
  384.         self.rect.y = y + 18
  385.         self.image = lazer_gun2_im
  386.         self.type = 'Lazer'
  387.         self.damage = 3
  388.         self.anim = pyganim.PygAnimation([(lazer1_im, 0.3), (lazer2_im, 0.3)])
  389.         self.anim.play()        
  390.         play_an_effect(muse_lazer, -1)      
  391.     def update(self, must_update):
  392.         if not player.has_lazer or not player.lazer_gun:
  393.             muse_lazer.stop()
  394.             self.kill()
  395.         if must_update:
  396.             self.rect.x += player.x_speed
  397.             self.rect.y += player.y_speed
  398.     def draw_anim(self):
  399.         self.anim.blit(screen, (self.rect.x, self.rect.y))
  400.  
  401.  
  402.    
  403.        
  404. class Ship_weapons(pygame.sprite.Sprite):
  405.     def __init__(self, x, y, image, list_of):
  406.         pygame.sprite.Sprite.__init__(self)
  407.         self.image = image
  408.         self.rect = self.image.get_rect()
  409.         self.rect.x = x
  410.         self.rect.y = y
  411.         self.list_elem = list_of
  412.     def update(self, must_update):
  413.         self.image = self.list_elem[player.state]
  414.         if must_update:
  415.             self.rect.x += player.x_speed
  416.             self.rect.y += player.y_speed
  417.            
  418.        
  419. class Gun(Ship_weapons):
  420.     def __init__(self, x, y):
  421.         Ship_weapons.__init__(self, x, y, gun0_im, list_of_guns)
  422.     def update(self, must_update):
  423.         if not player.gun:
  424.             self.kill()
  425.         Ship_weapons.update(self, must_update)
  426.        
  427. gun = Gun(player.rect.x, player.rect.y)
  428.        
  429. class Double_gun(Ship_weapons):
  430.     def __init__(self, x, y):
  431.         Ship_weapons.__init__(self, x, y, double_gun0_im, list_of_double_guns)
  432.     def update(self, must_update):
  433.         if not player.double_gun:
  434.             self.kill()
  435.         Ship_weapons.update(self, must_update)
  436.        
  437.        
  438. class Polygun(Ship_weapons):
  439.     def __init__(self, x, y):
  440.         Ship_weapons.__init__(self, x, y, polygun0_im, list_of_polyguns)
  441.     def update(self, must_update):
  442.         if not player.polygun:
  443.             self.kill()
  444.         Ship_weapons.update(self, must_update)    
  445.        
  446.                
  447. class Flare_gun(Ship_weapons):
  448.     def __init__(self, x, y):
  449.         Ship_weapons.__init__(self, x, y, flare_gun0_im, list_of_flare_guns)
  450.     def update(self, must_update):
  451.         if not player.flare_gun:
  452.             self.kill()
  453.         Ship_weapons.update(self, must_update)        
  454.        
  455. class Extra_gun(Ship_weapons):
  456.     def __init__(self, x, y):
  457.         Ship_weapons.__init__(self, x, y, extra_gun0_im, list_of_extra_guns)
  458.     def update(self, must_update):
  459.         if not player.extra_gun:
  460.             self.kill()
  461.         Ship_weapons.update(self, must_update)
  462.        
  463.        
  464. class Lazer_gun(Ship_weapons):
  465.     def __init__(self, x, y):
  466.         Ship_weapons.__init__(self, x, y, extra_gun0_im, list_of_lazer_guns)
  467.     def update(self, must_update):
  468.         if not player.lazer_gun:
  469.             self.kill()
  470.         Ship_weapons.update(self, must_update)
  471.            
  472. class Bonus_type():
  473.     Double_gun = 1
  474.     Armor = 2
  475.     Flare_gun = 3
  476.     Polygun = 4
  477.     Extra_gun = 5
  478.     Repair_25 = 6
  479.     Lazer_gun = 7
  480.    
  481. picture = {Bonus_type.Double_gun :  bonus_for_double_gun_im, Bonus_type.Armor : bonus_for_armor_im, Bonus_type.Flare_gun : bonus_for_rocket_im,
  482.            Bonus_type.Polygun : bonus_for_polygun_im, Bonus_type.Extra_gun : bonus_for_extra_gun_im, Bonus_type.Repair_25 : bonus_for_25_repair_im,
  483.            Bonus_type.Lazer_gun : bonus_for_lazer_im}
  484.  
  485. fields_of_bonus_type = [Bonus_type.Double_gun, Bonus_type.Armor, Bonus_type.Flare_gun, Bonus_type.Polygun, Bonus_type.Extra_gun,
  486.                         Bonus_type.Repair_25, Bonus_type.Lazer_gun]
  487.    
  488.        
  489. class Bonus(pygame.sprite.Sprite):
  490.     def __init__(self, bonus_type):
  491.         pygame.sprite.Sprite.__init__(self)
  492.         self.image = picture[bonus_type]
  493.         self.rect = self.image.get_rect()
  494.         self.mask = pygame.mask.from_surface(self.image)
  495.         self.type = bonus_type
  496.         self.rect.x = width
  497.         self.rect.y = random.randrange(self.rect.height, height - self.rect.height)
  498.         self.speed = -3
  499.     def update(self):
  500.         if self.rect.x + self.rect.width <= 0:
  501.             self.kill()        
  502.         self.rect.x += self.speed
  503.  
  504.  
  505. def dist2(obj1, obj2):
  506.     return (obj1.rect.x - obj2.rect.x)**2 + (obj1.rect.y - obj2.rect.y)**2
  507.        
  508. class Ufos(pygame.sprite.Sprite):
  509.     def __init__(self, image):
  510.         pygame.sprite.Sprite.__init__(self)
  511.         self.image = image
  512.         self.rect = self.image.get_rect()
  513.         self.mask = pygame.mask.from_surface(self.image)
  514.         self.rect.x = width
  515.         self.rect.y = random.randrange(height - self.rect.height)
  516.         self.speed = -2
  517.         self.shot = False
  518.         self.life = 0
  519.         self.score = 0
  520.         self.last_time_damaged = pygame.time.get_ticks() - time_shift
  521.         self.can_be_damaged = False      
  522.         self.was_damaged = False
  523.     def update(self):
  524.         if self.rect.x + self.rect.width <= 0:
  525.             self.kill()
  526.         if pygame.time.get_ticks() - time_shift - self.last_time_damaged >= player.time_for_lazer:
  527.             self.can_be_damaged = True
  528.         self.rect.x += self.speed
  529.     def shoot(self):
  530.         if not self.shot and 4 * dist2(self, player) <= diagonal_2:
  531.             weapon = Ufo_weapon(self.rect.x + 5, self.rect.y + 23)
  532.             enemy_bullet_list.add(weapon)
  533.             self.shot = True    
  534.        
  535.        
  536. class Ufo(Ufos):
  537.     def __init__(self):
  538.         Ufos.__init__(self, ufo_im)
  539.         self.life = 1
  540.         self.score = 1
  541.    
  542.        
  543. class Armor_ufo(Ufos):
  544.     def __init__(self):
  545.         Ufos.__init__(self, armor_ufo_im)
  546.         self.life = 3
  547.         self.score = 5
  548.         self.state = 0
  549.     def update(self):
  550.         Ufos.update(self)
  551.         if self.state != 1 and self.life <= 1.5:
  552.             self.image = armor_ufo1_im
  553.             self.state = 1
  554.            
  555.            
  556. def dxdy(x, y):
  557.     ans = [-x + (player.rect.x + player.width * 1.0 / 2), -y + (player.rect.y + player.height * 1.0 / 2)]
  558.     return ans
  559.  
  560. def near_int(x):
  561.     return math.floor(x + 0.5)
  562.        
  563.        
  564. class Ufo_weapon(pygame.sprite.Sprite):
  565.     def __init__(self, x_center, y_center):
  566.         pygame.sprite.Sprite.__init__(self)
  567.         self.image = ufo_weapon_im
  568.         self.rect = self.image.get_rect()
  569.         self.mask = pygame.mask.from_surface(self.image)
  570.         self.rect.x = x_center
  571.         self.rect.y = y_center
  572.         self.speed = 4
  573.         angle = dxdy(x_center, y_center)
  574.         self.angle = math.atan2(angle[1], angle[0])
  575.         self.x_speed = self.speed * math.cos(self.angle)
  576.         self.y_speed = self.speed * math.sin(self.angle)
  577.         self.damage = 2
  578.         self.step = 1
  579.         play_an_effect(muse_ufo_weapon)
  580.     def update(self):
  581.         if self.rect.x + self.rect.width <= 0 or self.rect.x - 10 >= width or self.rect.y >= height or self.rect.y + self.rect.height <= 0:
  582.             self.kill()
  583.         if self.step == 2:
  584.             self.rect.x += near_int(self.step * self.x_speed)
  585.             self.rect.y += near_int(self.step * self.y_speed)
  586.             self.step = 0
  587.         self.step += 1
  588.        
  589. class Bird_ship(pygame.sprite.Sprite):
  590.     def __init__(self):
  591.         pygame.sprite.Sprite.__init__(self)
  592.         self.image = bird_ship_im
  593.         self.rect = self.image.get_rect()
  594.         self.mask = pygame.mask.from_surface(self.image)
  595.         self.rect.x = width
  596.         self.rect.y = random.randrange(height - self.rect.height)
  597.         self.speed = -1
  598.         self.shot = False
  599.         self.life = 12
  600.         self.score = 15
  601.         self.prev_time = -time_shift
  602.         self.state = 0
  603.         self.last_time_damaged = pygame.time.get_ticks() - time_shift
  604.         self.can_be_damaged = False
  605.         self.was_damaged = False
  606.     def update(self):
  607.         if self.rect.x + self.rect.width <= 0:
  608.             self.kill()
  609.         if pygame.time.get_ticks() - time_shift - self.last_time_damaged >= player.time_for_lazer:
  610.             self.can_be_damaged = True        
  611.         self.rect.x += self.speed
  612.         if self.shot and pygame.time.get_ticks() - self.prev_time - time_shift >= 2000:
  613.             self.shot = False
  614.         if self.state != 1 and self.life <= 8 and self.life > 6:
  615.             self.image = bird_ship1_im
  616.             self.state = 1
  617.         if self.state != 2 and self.life <= 6 and self.life > 4:
  618.             self.image = bird_ship2_im
  619.             self.state = 2
  620.         if self.state != 3 and self.life <= 3:
  621.             self.image = bird_ship3_im
  622.             self.state = 3
  623.     def shoot(self):
  624.         if not self.shot and 4 * dist2(self, player) <= diagonal_2:
  625.             weapon = Bird_ship_weapon(self.rect.x + 28, self.rect.y + 10)
  626.             enemy_bullet_list.add(weapon)
  627.             self.shot = True  
  628.             self.prev_time = pygame.time.get_ticks() - time_shift        
  629.            
  630.            
  631. class Enemy_blaster(pygame.sprite.Sprite):
  632.     def __init__(self, x_center, y_center, image):
  633.         pygame.sprite.Sprite.__init__(self)
  634.         self.image = image
  635.         angle = dxdy(x_center, y_center)
  636.         self.image = pygame.transform.rotate(self.image, degree(math.atan2(-angle[1], angle[0])))
  637.         self.rect = self.image.get_rect()
  638.         self.mask = pygame.mask.from_surface(self.image)
  639.         self.rect.x = x_center - self.rect.width / 2
  640.         self.rect.y = y_center - self.rect.height / 2
  641.         self.angle = math.atan2(angle[1], angle[0])
  642.         self.speed = 0
  643.         self.x_speed = 0
  644.         self.y_speed = 0
  645.         self.damage = 0
  646.         self.step = 1
  647.         play_an_effect(muse_enemy_blaster)
  648.     def count_x_y_speed(self):
  649.         self.x_speed = self.speed * math.cos(self.angle)
  650.         self.y_speed = self.speed * math.sin(self.angle)        
  651.     def update(self):
  652.         if self.rect.x + self.rect.width <= 0 or self.rect.x >= width or self.rect.y >= height or self.rect.y + self.rect.height <= 0:
  653.             self.kill()    
  654.         if self.step == 2:
  655.             self.rect.x += near_int(self.step * self.x_speed)
  656.             self.rect.y += near_int(self.step * self.y_speed)
  657.             self.step = 0
  658.         self.step += 1
  659.            
  660.            
  661. class Bird_ship_weapon(Enemy_blaster):
  662.     def __init__(self, x_center, y_center):
  663.         Enemy_blaster.__init__(self, x_center, y_center, bird_ship_weapon_im)
  664.         self.speed = 5.5
  665.         self.damage = 5  
  666.         self.count_x_y_speed()
  667.        
  668.              
  669. class Cosmo_ship(pygame.sprite.Sprite):
  670.     def __init__(self):
  671.         pygame.sprite.Sprite.__init__(self)
  672.         self.image = cosmo_ship_im
  673.         self.rect = self.image.get_rect()
  674.         self.mask = pygame.mask.from_surface(self.image)
  675.         self.rect.x = width
  676.         self.rect.y = random.randrange(height - self.rect.height)
  677.         self.speed = -0.5
  678.         self.shot_weapon_1 = False
  679.         self.shot_weapon_2 = False
  680.         self.life = 30
  681.         self.score = 35
  682.         self.prev_time_weapon_1 = -time_shift
  683.         self.prev_time_weapon_2 = -time_shift
  684.         self.state = 0
  685.         self.move_x = 0
  686.         self.last_time_damaged = pygame.time.get_ticks() - time_shift
  687.         self.can_be_damaged = False    
  688.         self.was_damaged = False
  689.     def update(self):
  690.         if self.rect.x + self.rect.width <= 0:
  691.             self.kill()
  692.         if pygame.time.get_ticks() - time_shift - self.last_time_damaged >= player.time_for_lazer:
  693.             self.can_be_damaged = True        
  694.         self.move_x += self.speed
  695.         if self.move_x == -1:
  696.             self.rect.x += self.move_x;
  697.             self.move_x = 0
  698.         if self.shot_weapon_1 and pygame.time.get_ticks() - self.prev_time_weapon_1 - time_shift >= 2000:
  699.             self.shot_weapon_1 = False
  700.         if self.shot_weapon_2 and pygame.time.get_ticks() - self.prev_time_weapon_2 - time_shift >= 1500:
  701.             self.shot_weapon_2 = False
  702.         if self.state != 1 and self.life <= 24 and self.life > 15:
  703.             self.image = cosmo_ship1_im
  704.             self.state = 1
  705.         if self.state != 2 and self.life <= 15 and self.life > 6:
  706.             self.image = cosmo_ship2_im
  707.             self.state = 2
  708.         if self.state != 3 and self.life <= 6:
  709.             self.image = cosmo_ship3_im
  710.             self.state = 3
  711.     def shoot(self):
  712.         if not self.shot_weapon_1 and 4 * dist2(self, player) <= diagonal_2:
  713.             weapon = Bird_ship_weapon(self.rect.x + 52, self.rect.y + 7)
  714.             enemy_bullet_list.add(weapon)
  715.             weapon = Bird_ship_weapon(self.rect.x + 52, self.rect.y + 25)
  716.             enemy_bullet_list.add(weapon)          
  717.             self.shot_weapon_1 = True  
  718.             self.prev_time_weapon_1 = pygame.time.get_ticks() - time_shift  
  719.         if not self.shot_weapon_2 and 7 * dist2(self, player) <= diagonal_2:
  720.             weapon = Cosmo_ship_weapon(self.rect.x, self.rect.y + 25)
  721.             enemy_bullet_list.add(weapon)
  722.             self.shot_weapon_2 = True  
  723.             self.prev_time_weapon_2 = pygame.time.get_ticks() - time_shift        
  724.        
  725.        
  726. class Cosmo_ship_weapon(Enemy_blaster):
  727.     def __init__(self, x_center, y_center):
  728.         Enemy_blaster.__init__(self, x_center, y_center, cosmo_ship_weapon_im)
  729.         self.speed = 7
  730.         self.damage = 10  
  731.         self.count_x_y_speed()
  732.        
  733.        
  734. class Aero_ship(pygame.sprite.Sprite):
  735.     def __init__(self):
  736.         pygame.sprite.Sprite.__init__(self)
  737.         self.image = aero_ship_im
  738.         self.rect = self.image.get_rect()
  739.         self.mask = pygame.mask.from_surface(self.image)
  740.         self.rect.x = width
  741.         self.rect.y = random.randrange(height - self.rect.height)
  742.         self.speed = -1
  743.         self.shot_weapon_1 = False
  744.         self.shot_weapon_2 = False
  745.         self.cur_gun = 0
  746.         self.life = 25
  747.         self.score = 50
  748.         self.prev_time_weapon_1 = -time_shift
  749.         self.prev_time_weapon_2 = -time_shift
  750.         self.state = 0
  751.         self.move_x = 0
  752.         self.last_time_damaged = pygame.time.get_ticks() - time_shift
  753.         self.can_be_damaged = False
  754.         self.was_damaged = False
  755.     def update(self):
  756.         if self.rect.x + self.rect.width <= 0:
  757.             self.kill()
  758.         if pygame.time.get_ticks() - time_shift - self.last_time_damaged >= player.time_for_lazer:
  759.             self.can_be_damaged = True        
  760.         self.rect.x += self.speed
  761.         if self.shot_weapon_1 and pygame.time.get_ticks() - self.prev_time_weapon_1 - time_shift >= 750:
  762.             self.shot_weapon_1 = False
  763.             self.cur_gun = (self.cur_gun + 1) % 3
  764.         if self.shot_weapon_2 and pygame.time.get_ticks() - self.prev_time_weapon_2 - time_shift >= 3000:
  765.             self.shot_weapon_2 = False
  766.         if self.state != 1 and self.life <= 20 and self.life > 14:
  767.             self.image = aero_ship1_im
  768.             self.state = 1
  769.         if self.state != 2 and self.life <= 14 and self.life > 6:
  770.             self.image = aero_ship2_im
  771.             self.state = 2
  772.         if self.state != 3 and self.life <= 6:
  773.             self.image = aero_ship3_im
  774.             self.state = 3
  775.     def shoot(self):
  776.         if not self.shot_weapon_1 and 8.5 * dist2(self, player) <= diagonal_2:
  777.             weapon = Cosmo_ship_weapon(self.rect.x + 15 + 26 * self.cur_gun, self.rect.y + 43)
  778.             enemy_bullet_list.add(weapon)      
  779.             self.shot_weapon_1 = True
  780.             self.prev_time_weapon_1 = pygame.time.get_ticks() - time_shift
  781.         if not self.shot_weapon_2 and 2 * dist2(self, player) <= diagonal_2:
  782.             weapon = Aero_ship_weapon(self.rect.x, self.rect.y + 33)
  783.             enemy_bullet_list.add(weapon)
  784.             self.shot_weapon_2 = True  
  785.             self.prev_time_weapon_2= pygame.time.get_ticks() - time_shift        
  786.        
  787.  
  788. class Aero_ship_weapon(Enemy_blaster):
  789.     def __init__(self, x_center, y_center):
  790.         Enemy_blaster.__init__(self, x_center, y_center, aero_ship_weapon_im)
  791.         self.speed = 5.5
  792.         self.damage = 20  
  793.         self.count_x_y_speed()
  794.        
  795.  
  796. green = (0, 255, 0)
  797. white = (255, 255, 255)
  798. black = (0, 0, 0)
  799. red = (255, 0, 0)
  800. blue = (0, 0, 255)
  801. grey = (183, 183, 183)
  802. color_of_sound_button = menu_im.get_at((100, 100))
  803. font = pygame.font.Font(None, 25)
  804. done = False
  805. clock = pygame.time.Clock()
  806.        
  807. star_list = pygame.sprite.Group()
  808. ship_bullet_list = pygame.sprite.Group() # the shoted weapon form ship
  809. ship_list = pygame.sprite.Group() #the player
  810. ship_weapon_list = pygame.sprite.Group() #the weapon that ship has
  811. enemy_list = pygame.sprite.Group() #the list of enemies
  812. enemy_bullet_list = pygame.sprite.Group() #the shoted weapon from enemies
  813. bonus_list = pygame.sprite.Group()
  814. ufo_random_list = [0 for i in range(150)] + [1]
  815. bonus_random_list = [0 for i in range(500)] + [1]
  816. bird_ship_random_list = [0 for i in range(550)] + [1]
  817. cosmo_ship_random_list = [0 for i in range(1400)] + [1]
  818. aero_ship_random_list = [0 for i in range(1600)] + [1]
  819.  
  820. time_begin_up = 0
  821. time_begin_down = 0
  822. up = False
  823. down = False
  824. must_update = True
  825. pause = False
  826. begin_pause = 0
  827. end_pause = 0
  828. play_music = True
  829. play_effects = True
  830. ship_list.add(player)
  831. ship_weapon_list.add(gun)
  832.  
  833. def play_a_music(music, cnt = 0):
  834.     if play_music:
  835.         music.play(cnt)
  836.  
  837. def play_an_effect(effect, cnt = 0):
  838.     if play_effects:
  839.         effect.play(cnt)
  840.  
  841. muse_ship = pygame.mixer.Sound("muse_ship.ogg")
  842. play_a_music(muse_ship, -1)
  843.  
  844. for i in range(400):
  845.     star = Star()
  846.     star.rect.x = random.randrange(width)
  847.     star.rect.y = random.randrange(height)
  848.     star_list.add(star)
  849.    
  850.    
  851. cnt = 0
  852.  
  853. while not done:
  854.     for event in pygame.event.get():
  855.         if event.type == pygame.QUIT:
  856.             done = True
  857.         if pause and event.type == pygame.MOUSEBUTTONDOWN:
  858.             if event.button == 1:
  859.                 mouse_pos = pygame.mouse.get_pos()
  860.                 if mouse_pos[0] >= 250 + 18 and mouse_pos[0] <= 250 + 292 and mouse_pos[1] >= 100 + 14 and mouse_pos[1] <= 100 + 109:
  861.                     play_music ^= 1
  862.                 if mouse_pos[0] >= 250 + 18 and mouse_pos[0] <= 250 + 292 and mouse_pos[1] >= 100 + 112 and mouse_pos[1] <= 100 + 207:
  863.                     play_effects ^= 1
  864.         if event.type == pygame.KEYDOWN:
  865.             if event.key == pygame.K_p:
  866.                 if not pause:
  867.                     pause = True
  868.                     up = False
  869.                     down = False
  870.                     player.x_speed = 0
  871.                     player.y_speed = 0
  872.                     begin_pause = pygame.time.get_ticks()
  873.                 else:
  874.                     pause = False
  875.                     end_pause = pygame.time.get_ticks()
  876.                     time_shift += end_pause - begin_pause
  877.                     if play_music:
  878.                         pygame.mixer.music.unpause()
  879.                     for bullet in ship_bullet_list:
  880.                         if bullet.type == 'Lazer':
  881.                             play_an_effect(muse_lazer, -1)
  882.                     play_an_effect(muse_ship, -1)
  883.                 break
  884.             if pause:
  885.                 break
  886.             if event.key == pygame.K_RIGHT:
  887.                 player.x_speed += player.speed
  888.             if event.key == pygame.K_LEFT:
  889.                 player.x_speed -= player.speed
  890.             if event.key == pygame.K_UP:
  891.                 player.y_speed -= player.speed
  892.                 time_begin_up = pygame.time.get_ticks() - time_shift
  893.                 up = True
  894.             if event.key == pygame.K_DOWN:
  895.                 player.y_speed += player.speed
  896.                 time_begin_down = pygame.time.get_ticks() - time_shift
  897.                 down = True
  898.             if event.key == pygame.K_SPACE:
  899.                 if player.double_gun and player.can_fire_blaster:
  900.                     blaster = Blaster(player.rect.x + player.width, player.rect.y + 22)
  901.                     ship_bullet_list.add(blaster)
  902.                     blaster = Blaster(player.rect.x + player.width, player.rect.y + 5)
  903.                     ship_bullet_list.add(blaster)
  904.                     if player.extra_gun:
  905.                         blaster = Blaster(player.rect.x + 20, player.rect.y - 13)
  906.                         ship_bullet_list.add(blaster)
  907.                         blaster = Blaster(player.rect.x + 20, player.rect.y - 4)
  908.                         ship_bullet_list.add(blaster)
  909.                         blaster = Blaster(player.rect.x + 20, player.rect.y + 30)
  910.                         ship_bullet_list.add(blaster)
  911.                         blaster = Blaster(player.rect.x + 20, player.rect.y + 39)
  912.                         ship_bullet_list.add(blaster)  
  913.                     player.time_last_blaster = pygame.time.get_ticks() - time_shift
  914.                     player.can_fire_blaster = False
  915.                 elif player.flare_gun and player.can_fire_rocket:
  916.                     rocket = Rocket(player.rect.x + 41, player.rect.y + 5)
  917.                     ship_bullet_list.add(rocket)
  918.                     rocket = Rocket(player.rect.x + 41, player.rect.y + 27)
  919.                     ship_bullet_list.add(rocket)
  920.                     if player.extra_gun:
  921.                         rocket = Rocket(player.rect.x + 20, player.rect.y - 10)
  922.                         ship_bullet_list.add(rocket)
  923.                         rocket = Rocket(player.rect.x + 20, player.rect.y + 40)
  924.                         ship_bullet_list.add(rocket)
  925.                     player.time_last_rocket = pygame.time.get_ticks() - time_shift
  926.                     player.can_fire_rocket = False                    
  927.                 elif player.polygun and player.can_fire_blaster:
  928.                     blaster = Blaster(player.rect.x + 41, player.rect.y - 10, 45)
  929.                     ship_bullet_list.add(blaster)
  930.                     blaster = Blaster(player.rect.x + 48, player.rect.y - 6, 16)
  931.                     ship_bullet_list.add(blaster)
  932.                     blaster = Blaster(player.rect.x + player.width + 2, player.rect.y + 14)
  933.                     ship_bullet_list.add(blaster)
  934.                     blaster = Blaster(player.rect.x + 48, player.rect.y + 24, -22)
  935.                     ship_bullet_list.add(blaster)
  936.                     blaster = Blaster(player.rect.x + 45, player.rect.y + 25, -45)
  937.                     ship_bullet_list.add(blaster)
  938.                     if player.extra_gun:
  939.                         blaster = Blaster(player.rect.x + 20, player.rect.y + 10, 30)
  940.                         ship_bullet_list.add(blaster)
  941.                         blaster = Blaster(player.rect.x + 20, player.rect.y + 10, 8.2)
  942.                         ship_bullet_list.add(blaster)
  943.                         blaster = Blaster(player.rect.x + 20, player.rect.y + 10, -33)
  944.                         ship_bullet_list.add(blaster)
  945.                         blaster = Blaster(player.rect.x + 20, player.rect.y + 10, -11)
  946.                         ship_bullet_list.add(blaster)
  947.                     player.time_last_blaster = pygame.time.get_ticks() - time_shift
  948.                     player.can_fire_blaster = False
  949.                 elif player.gun and player.can_fire_blaster:
  950.                     blaster = Blaster(player.rect.x + player.width, player.rect.y + 22)
  951.                     ship_bullet_list.add(blaster)
  952.                     if player.extra_gun:
  953.                         blaster = Blaster(player.rect.x + 20, player.rect.y + 10)
  954.                         ship_bullet_list.add(blaster)    
  955.                         blaster = Blaster(player.rect.x + 20, player.rect.y + 35)
  956.                         ship_bullet_list.add(blaster)
  957.                     player.time_last_blaster = pygame.time.get_ticks() - time_shift
  958.                     player.can_fire_blaster = False
  959.         if event.type == pygame.KEYUP:
  960.             if pause:
  961.                 break
  962.             if event.key == pygame.K_RIGHT:
  963.                 player.x_speed -= player.speed
  964.             if event.key == pygame.K_LEFT:
  965.                 player.x_speed += player.speed
  966.             if event.key == pygame.K_UP:
  967.                 player.y_speed += player.speed
  968.                 up = False
  969.             if event.key == pygame.K_DOWN:
  970.                 player.y_speed -= player.speed
  971.                 down = False
  972.     if not pause:
  973.         list_of_keys = pygame.key.get_pressed()
  974.         if list_of_keys[pygame.K_SPACE] and player.lazer_gun:
  975.             if not player.has_one_lazer:
  976.                 lazer = Lazer(player.rect.x, player.rect.y)
  977.                 ship_bullet_list.add(lazer)
  978.                 player.has_one_lazer = True
  979.             if player.extra_gun and not player.has_three_lazer:
  980.                 lazer = Lazer(player.rect.x - 5, player.rect.y + 25)
  981.                 ship_bullet_list.add(lazer)
  982.                 lazer = Lazer(player.rect.x - 5, player.rect.y - 25)
  983.                 ship_bullet_list.add(lazer)
  984.                 player.has_three_lazer = True
  985.             player.has_lazer = True
  986.         if not list_of_keys[pygame.K_SPACE] and player.lazer_gun and player.has_lazer:
  987.             player.has_lazer = False
  988.     if pause:
  989.         screen.blit(menu_im, (250, 100))
  990.         if play_music:
  991.             pygame.mixer.music.pause()
  992.         else:
  993.             screen.blit(cross_im, (250, 100))
  994.         if play_effects:
  995.             muse_ship.stop()
  996.             muse_lazer.stop()
  997.         else:
  998.             screen.blit(cross_im, (250, 198))
  999.         pygame.display.flip()
  1000.         continue
  1001.     if not pygame.mixer.music.get_busy():
  1002.         pygame.mixer.music.load(muse_dir + author[my_music[cur]] + '\\' + my_music[cur])
  1003.         pygame.mixer.music.set_volume(0.5)
  1004.         pygame.mixer.music.play()
  1005.         cur += 1
  1006.     must_update = True
  1007.     cnt += 1
  1008.     if player.rect.x + player.x_speed < 0 or player.rect.x + player.width + player.x_speed > width or player.rect.y + player.y_speed <= 0 or player.rect.y + player.height + player.y_speed > height:
  1009.         must_update = False
  1010.     if player.state == 2 and up and player.rect.y + player.height > height:
  1011.         must_update = True
  1012.     star_list.update()
  1013.     ship_list.update(must_update)
  1014.     ship_weapon_list.update(must_update)
  1015.     ship_bullet_list.update(must_update)
  1016.     appear_bonus = random.choice(bonus_random_list)
  1017.     if appear_bonus:
  1018.         bonus_type = random.choice(fields_of_bonus_type)
  1019.         bonus = Bonus(bonus_type)
  1020.         bonus_list.add(bonus)
  1021.     for bonus in bonus_list:
  1022.         if pygame.sprite.collide_rect(player, bonus) and pygame.sprite.collide_mask(player, bonus):
  1023.             if bonus.type == Bonus_type.Double_gun:
  1024.                 double_gun = Double_gun(player.rect.x, player.rect.y)
  1025.                 ship_weapon_list.add(double_gun)
  1026.                 if not player.has_weapon:
  1027.                     player.begin_weapon = pygame.time.get_ticks() - time_shift
  1028.                     player.has_weapon = True
  1029.                 player.double_gun = True
  1030.                 player.flare_gun = False
  1031.                 player.polygun = False
  1032.                 player.gun = False
  1033.                 player.lazer_gun = False
  1034.                 player.time_for_weapon += 11000
  1035.             elif bonus.type == Bonus_type.Armor:
  1036.                 if not player.armor:
  1037.                     player.begin_armor = pygame.time.get_ticks() - time_shift
  1038.                 player.armor = True
  1039.                 player.time_for_armor += 11000
  1040.             elif bonus.type == Bonus_type.Flare_gun:
  1041.                 flare_gun = Flare_gun(player.rect.x, player.rect.y)
  1042.                 ship_weapon_list.add(flare_gun)
  1043.                 if not player.has_weapon:
  1044.                     player.begin_weapon = pygame.time.get_ticks() - time_shift
  1045.                     player.has_weapon = True
  1046.                 player.gun = False
  1047.                 player.double_gun = False
  1048.                 player.flare_gun = True
  1049.                 player.polygun = False
  1050.                 player.lazer_gun = False
  1051.                 player.time_for_weapon += 11000
  1052.             elif bonus.type == Bonus_type.Polygun:
  1053.                 polygun = Polygun(player.rect.x, player.rect.y)
  1054.                 ship_weapon_list.add(polygun)
  1055.                 if not player.has_weapon:
  1056.                     player.begin_weapon = pygame.time.get_ticks() - time_shift
  1057.                     player.has_weapon = True
  1058.                 player.gun = False
  1059.                 player.double_gun = False
  1060.                 player.flare_gun = False
  1061.                 player.polygun = True
  1062.                 player.lazer_gun = False
  1063.                 player.time_for_weapon += 11000
  1064.             elif bonus.type == Bonus_type.Extra_gun:
  1065.                 if not player.extra_gun:
  1066.                     extra_gun = Extra_gun(player.rect.x, player.rect.y)
  1067.                     ship_weapon_list.add(extra_gun)
  1068.                     player.extra_gun = True
  1069.             elif bonus.type == Bonus_type.Repair_25:
  1070.                 player.health = min(50, player.health + 25)
  1071.             elif bonus.type == Bonus_type.Lazer_gun:
  1072.                 lazer_gun = Lazer_gun(player.rect.x, player.rect.y)
  1073.                 ship_weapon_list.add(lazer_gun)
  1074.                 if not player.has_weapon:
  1075.                     player.begin_weapon = pygame.time.get_ticks() - time_shift
  1076.                     player.has_weapon = True
  1077.                 player.gun = False
  1078.                 player.double_gun = False
  1079.                 player.flare_gun = False
  1080.                 player.polygun = False
  1081.                 player.lazer_gun = True
  1082.                 player.time_for_weapon += 11000
  1083.             bonus.kill()
  1084.     bonus_list.update()
  1085.     appear_ufo = random.choice(ufo_random_list)
  1086.     if appear_ufo:
  1087.         ufo_type = random.randrange(1, 3)
  1088.         if ufo_type == 1:
  1089.             ufo = Ufo()
  1090.         else:
  1091.             ufo = Armor_ufo()
  1092.         enemy_list.add(ufo)
  1093.     appear_bird_ship = random.choice(bird_ship_random_list)
  1094.     if appear_bird_ship:
  1095.         enemy_list.add(Bird_ship())
  1096.     appear_cosmo_ship = random.choice(cosmo_ship_random_list)
  1097.     if appear_cosmo_ship:
  1098.         enemy_list.add(Cosmo_ship())
  1099.     appear_aero_ship = random.choice(aero_ship_random_list)
  1100.     if appear_aero_ship:
  1101.         enemy_list.add(Aero_ship())
  1102.     enemy_list.update()
  1103.     for enemy in enemy_list:
  1104.         for weapon in ship_bullet_list:
  1105.             if pygame.sprite.collide_rect(enemy, weapon) and pygame.sprite.collide_mask(enemy, weapon):
  1106.                 if weapon.type == 'Lazer' and enemy.can_be_damaged:
  1107.                     enemy.life -= weapon.damage
  1108.                     enemy.was_damaged = True
  1109.                     play_an_effect(muse_aimed)
  1110.                 if weapon.type != 'Lazer':
  1111.                     enemy.life -= weapon.damage
  1112.                     weapon.kill()
  1113.                     play_an_effect(muse_aimed)
  1114.                 if enemy.life <= 0:
  1115.                     play_an_effect(muse_small_bah)
  1116.                     score += enemy.score
  1117.                     if score // 500 > (score - enemy.score) // 500:
  1118.                         player.life += 1
  1119.                     enemy.kill()
  1120.                     break
  1121.         if enemy.was_damaged:
  1122.             enemy.last_time_damaged = pygame.time.get_ticks() - time_shift
  1123.             enemy.can_be_damaged = False
  1124.             enemy.was_damaged = False
  1125.                
  1126.     was_crush = False
  1127.     if not player.armor:
  1128.         for enemy in enemy_list:
  1129.             if pygame.sprite.collide_rect(player, enemy) and pygame.sprite.collide_mask(player, enemy):
  1130.                 enemy.life -= player.damage
  1131.                 was_crush = True
  1132.                 if enemy.life <= 0:
  1133.                     score += enemy.score
  1134.                     if score // 500 > (score - enemy.score) // 500:
  1135.                         player.life += 1                    
  1136.                     enemy.kill()
  1137.                 break
  1138.     if was_crush:
  1139.         player.new_life()
  1140.     for enemy in enemy_list:
  1141.         enemy.shoot()
  1142.     enemy_bullet_list.update()
  1143.     if not player.armor:
  1144.         for enemy_bullet in enemy_bullet_list:
  1145.             if pygame.sprite.collide_rect(player, enemy_bullet) and pygame.sprite.collide_mask(player, enemy_bullet):
  1146.                 player.health -= enemy_bullet.damage
  1147.                 enemy_bullet.kill()
  1148.                 if player.health > 0:
  1149.                     play_an_effect(muse_aimed)
  1150.                 else:
  1151.                     break
  1152.     if player.health <= 0:
  1153.         player.new_life()    
  1154.     #screen.fill(black)
  1155.     screen.blit(galaxy_im, (0, 0))
  1156.     star_list.draw(screen)
  1157.     ship_list.draw(screen)
  1158.     ship_weapon_list.draw(screen)
  1159.     ship_bullet_list.draw(screen)
  1160.     for bullet in ship_bullet_list:
  1161.         if bullet.type == 'Lazer':
  1162.             bullet.draw_anim()
  1163.     bonus_list.draw(screen)
  1164.     enemy_list.draw(screen)
  1165.     enemy_bullet_list.draw(screen)
  1166.     txt_score = font.render("Score: " + str(score), True, white)
  1167.     txt_life = font.render("Life: " + str(player.life), True, white)
  1168.     txt_health = font.render("Health: " + str(player.health), True, white)
  1169.     if play_music:
  1170.         txt_music = font.render("Music track: " + my_music[cur - 1][:-4], True, white)
  1171.         txt_author = font.render("Author is: " + author[my_music[cur - 1]], True, white)
  1172.         screen.blit(txt_music, (0, 560))
  1173.         screen.blit(txt_author, (0, 580))
  1174.     else:
  1175.         txt_music = font.render("No music is playing now", True, white)
  1176.         screen.blit(txt_music, (0, 580))
  1177.     screen.blit(txt_score, (0, 0))
  1178.     screen.blit(txt_life, (150, 0))
  1179.     screen.blit(txt_health, (150, 20))
  1180.     pygame.draw.rect(screen, grey, (300, 20, 100, 15), 0)
  1181.     pygame.draw.rect(screen, green, (300, 20, player.health * 2, 15), 0)
  1182.     if player.double_gun:
  1183.         txt_time = font.render("Double gun: " + str(player.weapon_print), True, white)
  1184.         screen.blit(txt_time, (300, 0))
  1185.     if player.flare_gun:
  1186.         txt_time = font.render("Rocket: " + str(player.weapon_print), True, white)
  1187.         screen.blit(txt_time, (300, 0))  
  1188.     if player.polygun:
  1189.         txt_time = font.render("Polygun: " + str(player.weapon_print), True, white)
  1190.         screen.blit(txt_time, (300, 0))
  1191.     if player.lazer_gun:
  1192.         txt_time = font.render("Lazer: " + str(player.weapon_print), True, white)
  1193.         screen.blit(txt_time, (300, 0))        
  1194.     if player.armor:
  1195.         txt_armor = font.render("Armor: " + str(player.armor_print), True, white)
  1196.         screen.blit(txt_armor, (450, 0))
  1197.     pygame.display.flip()
  1198.     if player.life < 0:
  1199.         break
  1200.     clock.tick(80)
  1201.  
  1202. pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement