Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- import random
- import math
- # initialize pygame
- pygame.init()
- # create the screen (width, height)
- screen = pygame.display.set_mode((800, 600))
- # Background
- background = pygame.image.load('background.jpg')
- # Caption and Icon
- pygame.display.set_caption("Space Invaders")
- icon = pygame.image.load('ufo.png')
- pygame.display.set_icon(icon)
- # Player
- playerImg = pygame.image.load('player_ship.png')
- playerX = 368
- playerY = 500
- playerX_change = 0
- # Enemy
- enemyImg = []
- enemyX = []
- enemyY = []
- enemyX_change = []
- enemyY_change = []
- num_of_enemies = 2
- for i in range(num_of_enemies):
- enemyImg.append(pygame.image.load('ufo.png'))
- enemyX.append(random.randint(0, 776))
- enemyY.append(random.randint(50, 100))
- enemyX_change.append(1)
- enemyY_change.append(0)
- # Bullet
- # Ready - You can't see the bullet on the screen
- # Fire - The bullet is currently moving
- bulletImg = pygame.image.load('missile.png')
- bulletX = 0
- bulletY = 480
- bulletY_change = -8
- bullet_state = "ready"
- # Players current score (will increment +1 for every regular enemy killed)
- score = 0
- scoretick = 2
- def player(x, y):
- screen.blit(playerImg, (x, y))
- def enemy(x, y, i):
- screen.blit(enemyImg[i], (x, y))
- def fire_bullet(x, y):
- global bullet_state
- bullet_state = "fire"
- screen.blit(bulletImg, (x + 24, y + 10))
- def isCollision(enemyX, enemyY, bulletX, bulletY):
- distance = math.sqrt(math.pow(enemyX - bulletX, 2) + math.pow((enemyY - bulletY), 2))
- if distance < 27 and bullet_state == "fire":
- return True
- else:
- return False
- # Game Loop
- running = True
- while running:
- # RGB - Red, Green, Blue
- screen.fill((0, 0, 0))
- # Background Image
- screen.blit(background, (0, 0))
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
- # Function to increase amount of enemies whenever score hits a factor of 2
- if score == (2 or 4 or 16 or 32 or 64 or 128 or 256) and scoretick == score:
- num_of_enemies += 1
- scoretick = math.pow(scoretick, 2)
- elif score == 512:
- num_of_enemies = 0
- # if keystroke is pressed, check whether it is right or left
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_LEFT:
- playerX_change = -5
- if event.key == pygame.K_RIGHT:
- playerX_change = 5
- if event.key == pygame.K_SPACE:
- if bullet_state == "ready":
- bulletX = playerX
- fire_bullet(bulletX, bulletY)
- if event.type == pygame.KEYUP:
- # 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.
- if (event.key == pygame.K_LEFT and playerX_change - 5) or (event.key == pygame.K_RIGHT and playerX_change == 5):
- playerX_change = 0
- playerX += playerX_change
- # enemy movement clauses
- for i in range(num_of_enemies):
- enemyX[i] += enemyX_change[i]
- if enemyX[i] <= 0:
- enemyX[i] = 0
- enemyY[i] += 16
- enemyX_change[i] = 1
- elif enemyX[i] >= 766:
- enemyX[i] = 766
- enemyY[i] += 16
- enemyX_change[i] = -1
- # Collision
- collision = isCollision(enemyX[i], enemyY[i], bulletX, bulletY)
- if collision:
- bulletY = 480
- bullet_state = "ready"
- score += 1
- print(score)
- enemyX[i] = random.randint(0, 776)
- enemyY[i] = random.randint(50, 100)
- # display the enemy
- enemy(enemyX[i], enemyY[i], i)
- # enemy wall collision clause
- enemyX[i] += enemyX_change[i]
- enemyY[i] += enemyY_change[i]
- enemyY_change[i] = 0
- # player movement clauses
- if playerX <= 0:
- playerX = 0
- elif playerX >= 736:
- playerX = 736
- # bullet movement clauses
- if bulletY <= -16:
- bulletY = 480
- bullet_state = "ready"
- if bullet_state == "fire":
- fire_bullet(bulletX, bulletY)
- bulletY += bulletY_change
- # display the player
- player(playerX, playerY)
- # update the display
- pygame.display.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement