Advertisement
Guest User

Space Invaders REEEEE

a guest
Dec 12th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.28 KB | None | 0 0
  1. import pygame
  2. import random
  3. import math
  4.  
  5. # initialize pygame
  6. pygame.init()
  7.  
  8. # create the screen (width, height)
  9. screen = pygame.display.set_mode((800, 600))
  10.  
  11. # Background
  12. background = pygame.image.load('background.jpg')
  13.  
  14. # Caption and Icon
  15. pygame.display.set_caption("Space Invaders")
  16. icon = pygame.image.load('ufo.png')
  17. pygame.display.set_icon(icon)
  18.  
  19. # Player
  20. playerImg = pygame.image.load('player_ship.png')
  21. playerX = 368
  22. playerY = 500
  23. playerX_change = 0
  24.  
  25. # Enemy
  26. enemyImg = []
  27. enemyX = []
  28. enemyY = []
  29. enemyX_change = []
  30. enemyY_change = []
  31. num_of_enemies = 2
  32.  
  33. for i in range(num_of_enemies):
  34.     enemyImg.append(pygame.image.load('ufo.png'))
  35.     enemyX.append(random.randint(0, 776))
  36.     enemyY.append(random.randint(50, 100))
  37.     enemyX_change.append(1)
  38.     enemyY_change.append(0)
  39.  
  40. # Bullet
  41.  
  42. # Ready - You can't see the bullet on the screen
  43. # Fire - The bullet is currently moving
  44.  
  45. bulletImg = pygame.image.load('missile.png')
  46. bulletX = 0
  47. bulletY = 480
  48. bulletY_change = -8
  49. bullet_state = "ready"
  50.  
  51. # Players current score (will increment +1 for every regular enemy killed)
  52. score = 0
  53. scoretick = 2
  54.  
  55.  
  56. def player(x, y):
  57.     screen.blit(playerImg, (x, y))
  58.  
  59.  
  60. def enemy(x, y, i):
  61.     screen.blit(enemyImg[i], (x, y))
  62.  
  63.  
  64. def fire_bullet(x, y):
  65.     global bullet_state
  66.     bullet_state = "fire"
  67.     screen.blit(bulletImg, (x + 24, y + 10))
  68.  
  69.  
  70. def isCollision(enemyX, enemyY, bulletX, bulletY):
  71.     distance = math.sqrt(math.pow(enemyX - bulletX, 2) + math.pow((enemyY - bulletY), 2))
  72.     if distance < 27 and bullet_state == "fire":
  73.         return True
  74.     else:
  75.         return False
  76.  
  77.  
  78. # Game Loop
  79. running = True
  80. while running:
  81.  
  82.     # RGB - Red, Green, Blue
  83.     screen.fill((0, 0, 0))
  84.     # Background Image
  85.     screen.blit(background, (0, 0))
  86.  
  87.     for event in pygame.event.get():
  88.         if event.type == pygame.QUIT:
  89.             running = False
  90.  
  91.     # Function to increase amount of enemies whenever score hits a factor of 2
  92.     if score == (2 or 4 or 16 or 32 or 64 or 128 or 256) and scoretick == score:
  93.         num_of_enemies += 1
  94.         scoretick = math.pow(scoretick, 2)
  95.     elif score == 512:
  96.         num_of_enemies = 0
  97.  
  98.  
  99.     # if keystroke is pressed, check whether it is right or left
  100.     if event.type == pygame.KEYDOWN:
  101.         if event.key == pygame.K_LEFT:
  102.             playerX_change = -5
  103.         if event.key == pygame.K_RIGHT:
  104.             playerX_change = 5
  105.         if event.key == pygame.K_SPACE:
  106.             if bullet_state == "ready":
  107.                 bulletX = playerX
  108.                 fire_bullet(bulletX, bulletY)
  109.  
  110.  
  111.     if event.type == pygame.KEYUP:
  112.         # if either key is released, also check to make sure the key released is the same as the key causing the movement. If check passes, stop movement.
  113.         if (event.key == pygame.K_LEFT and playerX_change - 5) or (event.key == pygame.K_RIGHT and playerX_change == 5):
  114.             playerX_change = 0
  115.  
  116.     playerX += playerX_change
  117.  
  118.     # enemy movement clauses
  119.     for i in range(num_of_enemies):
  120.         enemyX[i] += enemyX_change[i]
  121.         if enemyX[i] <= 0:
  122.             enemyX[i] = 0
  123.             enemyY[i] += 16
  124.             enemyX_change[i] = 1
  125.         elif enemyX[i] >= 766:
  126.             enemyX[i] = 766
  127.             enemyY[i] += 16
  128.             enemyX_change[i] = -1
  129.  
  130.         # Collision
  131.         collision = isCollision(enemyX[i], enemyY[i], bulletX, bulletY)
  132.         if collision:
  133.             bulletY = 480
  134.             bullet_state = "ready"
  135.             score += 1
  136.             print(score)
  137.             enemyX[i] = random.randint(0, 776)
  138.             enemyY[i] = random.randint(50, 100)
  139.  
  140.         # display the enemy
  141.         enemy(enemyX[i], enemyY[i], i)
  142.  
  143.         # enemy wall collision clause
  144.         enemyX[i] += enemyX_change[i]
  145.         enemyY[i] += enemyY_change[i]
  146.         enemyY_change[i] = 0
  147.  
  148.     # player movement clauses
  149.     if playerX <= 0:
  150.         playerX = 0
  151.     elif playerX >= 736:
  152.         playerX = 736
  153.  
  154.     # bullet movement clauses
  155.     if bulletY <= -16:
  156.         bulletY = 480
  157.         bullet_state = "ready"
  158.  
  159.     if bullet_state == "fire":
  160.         fire_bullet(bulletX, bulletY)
  161.         bulletY += bulletY_change
  162.  
  163.     # display the player
  164.     player(playerX, playerY)
  165.  
  166.     # update the display
  167.     pygame.display.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement