Advertisement
Guest User

Space Invaders

a guest
Jun 3rd, 2021
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.80 KB | None | 0 0
  1. import pygame
  2. import random
  3.  
  4. pygame.init()
  5.  
  6. window_height = 600
  7. window_width = 800
  8. rows = 3
  9. cols = 10
  10. game_over = 0
  11.  
  12. clock = pygame.time.Clock()
  13. timer = pygame.time.get_ticks()
  14.  
  15. screen = pygame.display.set_mode((window_width, window_height))
  16. pygame.display.set_caption("Space Invaders")
  17.  
  18. background = pygame.image.load("images/background.jpg")
  19.  
  20. invaders_group = pygame.sprite.Group()
  21. player_group = pygame.sprite.Group()
  22. playerBullet_group = pygame.sprite.Group()
  23. invaderBullet_group = pygame.sprite.Group()
  24.  
  25. class player_bullet(pygame.sprite.Sprite):
  26.     def __init__(self, x, y):
  27.         pygame.sprite.Sprite.__init__(self)
  28.         self.image = pygame.image.load("images/user_bullet.png")
  29.         self.rect = self.image.get_rect()
  30.         self.rect.center = [x, y]
  31.    
  32.     def update(self):
  33.         self.rect.y -= 5
  34.         if pygame.sprite.spritecollide(self, invaders_group, True):
  35.             self.kill()
  36.  
  37.  
  38. class invader_bullet(pygame.sprite.Sprite):
  39.     def __init__(self, x ,y):
  40.         pygame.sprite.Sprite.__init__(self)
  41.         self.image = pygame.image.load("images/invader_bullet.png")
  42.         self.rect = self.image.get_rect()
  43.         self.rect.center = [x, y]
  44.  
  45.     def update(self):
  46.         self.rect.y += 2
  47.  
  48.         if pygame.sprite.spritecollide(self, player_group, False):
  49.             self.kill()
  50.             player.health_remaining -= 10
  51.  
  52.  
  53. class Invader(pygame.sprite.Sprite):
  54.     def __init__(self, x, y):
  55.         pygame.sprite.Sprite.__init__(self)
  56.         self.image = pygame.image.load("images/spaceInvaders.png")
  57.         self.rect = self.image.get_rect()
  58.         self.rect.center = [x, y]
  59.         self.move_direction = 1
  60.         self.move_counter = 0
  61.    
  62.     def update(self):
  63.         self.rect.x += self.move_direction
  64.         self.move_counter += 1
  65.  
  66.         if self.move_counter > 75:
  67.             self.move_direction *= -1
  68.             self.move_counter *= -1
  69.  
  70.  
  71.  
  72. class Player(pygame.sprite.Sprite):
  73.     def __init__(self, x, y):
  74.         pygame.sprite.Sprite.__init__(self)
  75.         self.image = pygame.image.load("images/user.png")
  76.         self.rect = self.image.get_rect()
  77.         self.rect.center = [x, y]
  78.         self.last_shot = pygame.time.get_ticks()
  79.         self.health_start = 50
  80.         self.health_remaining = 50
  81.        
  82.     def update(self):
  83.         speed = 3
  84.         cooldown = 100
  85.         current_time = pygame.time.get_ticks()
  86.         key = pygame.key.get_pressed()
  87.         gameover = 0
  88.  
  89.         pygame.draw.rect(screen, (0,0,0), (self.rect.x, self.rect.bottom, self.rect.width, 10))
  90.  
  91.         if self.health_remaining > 0:
  92.             pygame.draw.rect(screen, (0,255,0), (self.rect.x, self.rect.bottom, int(self.rect.width * (self.health_remaining/ self.health_start)), 10))
  93.         elif self.health_remaining == 0:
  94.             self.kill()
  95.             gameover = 1
  96.  
  97.         if key[pygame.K_LEFT] and self.rect.left > 0:
  98.             self.rect.x -= speed
  99.  
  100.         if key[pygame.K_RIGHT] and self.rect.right < window_width:
  101.             self.rect.x += speed
  102.        
  103.         if key[pygame.K_SPACE] and current_time - self.last_shot > cooldown:
  104.             bullet = player_bullet(self.rect.centerx, self.rect.top)
  105.             playerBullet_group.add(bullet)
  106.             self.last_shot = pygame.time.get_ticks()
  107.  
  108.         return gameover
  109.  
  110. def create_invader_bullet():
  111.     attacking_invader = random.choice(invaders_group.sprite())
  112.     invaderBullet = invader_bullet(attacking_invader.rect.centerx, attacking_invader.rect.centery)
  113.     invaderBullet_group.add(invaderBullet)
  114.  
  115. def create_invaders():
  116.     for row in range(rows):
  117.         for col in range(cols):
  118.             invader = Invader(100 + col * 65, 80 + row * 50)
  119.             invaders_group.add(invader)
  120.  
  121. create_invaders()
  122.  
  123. player = Player(int(window_width/2), window_height - 100)
  124. player_group.add(player)
  125.  
  126. game = True
  127. while game:
  128.     clock.tick(60)
  129.     screen.blit(background, (0,0))
  130.     if len(invaders_group) == 0:
  131.         game_over = 1
  132.  
  133.     if game_over == 0:
  134.             seconds = (pygame.time.get_ticks() - timer) / 1000
  135.             if(seconds> 5):
  136.                 create_invader_bullet()
  137.                 timer = pygame.time.get_ticks()
  138.  
  139.             invaders_group.update()
  140.             player_group.update()
  141.             invaderBullet_group.update()
  142.             playerBullet_group.update()
  143.  
  144.             invaders_group.draw(screen)
  145.             player_group.draw(screen)
  146.             invaderBullet_group.draw(screen)
  147.             playerBullet_group.draw(screen)
  148.             game_over = player.update()
  149.  
  150.     elif game_over == 1:
  151.         background = pygame.image.load("images/gamemover_background.jpg")
  152.  
  153.     for event in pygame.event.get():
  154.             if event.type == pygame.QUIT:
  155.                 game = False
  156.  
  157.     pygame.display.update()
  158.  
  159. pygame.quit()
  160.              
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement