Original project can be found here.
packages = ["pygame"]
import pygame as pg
import random as rdm
import math
from time import sleep
from pygame import mixer
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
images = {
'bullet': pg.image.load('bullet.png'),
'enemy': pg.image.load('ufo.png'),
'player': pg.image.load('space-invaders.png'),
'background': pg.image.load('background (1).jpeg')
}
#set up player
playerImg = images['player']
pX = 368
pY = 500
pX_change = 0
#set up bullet
bulletImg = images['bullet']
bX = pX
bY = 536
bY_change = -10
bState = 'ready'
#set up enemy
numOfEnemies = 10
enemyImgs = []
eX = []
eY = []
eX_change = []
for i in range(numOfEnemies):
enemyImgs.append(images['enemy'])
eX.append(rdm.randint(0, 736))
eY.append(rdm.randint(0, 150))
eX_change.append(0.4)
#set up background
x = images['background']
#set up functions
def player(x, y):
wn.blit(playerImg, (x, y))
def enemy(x, y, i):
wn.blit(enemyImgs[i], (x[i], y[i]))
def bullet(x, y):
global bState
wn.blit(bulletImg, (x, y))
bState = 'fire'
def collision(x1, y1, x2, y2):
distance = math.sqrt((math.pow(x1 - x2, 2)) + (math.pow(y1 - y2, 2)))
if distance <= 32:
return True
else:
return False
pg.init()
wn = pg.display.set_mode((800, 600))
mixer.music.load('bgMusic.mp3')
mixer.music.play(-1)
pg.display.set_caption('Space Invaders')
while True:
bg = images['background']
wn.blit(bg, (0, 0))
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
if event.type == pg.KEYDOWN:
if event.key == pg.K_LEFT:
pX_change = -0.5
if event.key == pg.K_RIGHT:
pX_change = 0.5
if event.key == pg.K_SPACE:
if bState == 'ready':
bState = 'fire'
bX = pX + 25
mixer.Sound('shoot.wav')
if event.type == pg.KEYUP:
if event.key == pg.K_LEFT:
pX_change = 0
if event.key == pg.K_RIGHT:
pX_change = 0
player(pX, pY)
pX += pX_change
if pX <= 0:
pX = 0
elif pX >= 736:
pX = 736
if bState == 'fire':
bullet(bX, bY)
bY += bY_change
if bY <= 0:
bState = 'ready'
bY = 536
for i in range(numOfEnemies):
if collision(bX, bY, eX[i], eY[i]) == True:
mixer.Sound('kill.wav')
eX[i] = rdm.randint(0, 736)
eY[i] = rdm.randint(50, 150)
bState = 'ready'
bY = 536
if eY[i] >= 440:
for y in range(numOfEnemies):
eY[y] = 2000
mixer.music.pause()
font = pg.font.Font('Robot Rebels.ttf', 64)
text = font.render('GAME OVER', True, white)
wn.blit(text, (400, 300))
sleep(5)
break
enemy(eX, eY, i)
eX[i] += eX_change[i]
if eX[i] <= 0:
eX_change[i] = 0.5
eY[i] += 40
elif eX[i] >= 736:
eX_change[i] = -0.5
eY[i] += 40
pg.display.update()
pg.quit()