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()