Space Invaders

Space Invaders

Creating the Sprites

Pixel Art Website

Dimensions of Sprites

Background: 750 x 750

Ship: 50 x 25

Aliens: 25 x 25

Missile: 5 x 10

Bomb: 5 x 10

Bunker Pieces: 8 x 8

Code Parts

Template

import pygame


pygame.init()


win = pygame.display.set_mode((#width, #length))


pygame.display.set_caption(#title)


#Put colors here


class #name(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

#Call classes to create objects

#Where to draw objects

#Sprite groups


def redraw():

#Redraw background

#Redraw sprites

#Text title

pygame.display.update()

run = True


while run:


pygame.time.delay(100)

for event in pygame.event.get():

if event.type == pygame.QUIT:

run = False

key = pygame.key.get_pressed()

#What keys are you using


redraw()

pygame.quit()

Class with Image

class Ship(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('shipImg.png')

self.rect = self.image.get_rect()

Game Title

font = pygame.font.SysFont('Times New Roman', 30)

text = font.render('Py Invaders', False, white)

textRect = text.get_rect()

textRect.center = (750 // 2, 25)

win.blit(text, textRect)

Video Tutorial

Code From Part 1

import pygame


pygame.init()


win = pygame.display.set_mode((750, 750))


pygame.display.set_caption('Space Invaders')


white = (255, 255, 255)


black = (0, 0, 0)


green = (0, 255, 0)


red = (255, 0, 0)


class Ship(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([50, 25])

self.image.fill(green)

self.rect = self.image.get_rect()

self.live = 5

def draw(self):

win.blit(self.image, (self.rect.x, self.rect.y))

ship = Ship()

ship.rect.x = 375

ship.rect.y = 650



def redraw():

win.fill(black)

ship.draw()

pygame.display.update()


run = True


while run:

pygame.time.delay(100)

for event in pygame.event.get():

if event.type == pygame.QUIT:

run = False

key = pygame.key.get_pressed()

if key[pygame.K_LEFT]:

ship.rect.x += -10

if key[pygame.K_RIGHT]:

ship.rect.x += 10

redraw()


pygame.quit()

Code From Part 2

import pygame


pygame.init()


win = pygame.display.set_mode((750, 750))


pygame.display.set_caption('Space Invaders')


white = (255, 255, 255)


black = (0, 0, 0)


green = (0, 255, 0)


red = (255, 0, 0)


class Ship(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([50, 25])

self.image.fill(green)

self.rect = self.image.get_rect()

self.live = 5

def draw(self):

win.blit(self.image, (self.rect.x, self.rect.y))

class Enemy(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([25, 25])

self.image.fill(white)

self.rect = self.image.get_rect()

class Bunker(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([8, 8])

self.image.fill(green)

self.rect = self.image.get_rect()

ship = Ship()

ship.rect.x = 375

ship.rect.y = 650


enemy_list = pygame.sprite.Group()

bunker_list = pygame.sprite.Group()


for row in range(1, 6):

for column in range(1, 11):

enemy = Enemy()

enemy.rect.x = 80 + (50 * column)

enemy.rect.y = 25 + (50 * row)

enemy_list.add(enemy)

for bunk in range(3):

for row in range(5):

for column in range(10):

bunker = Bunker()

bunker.rect.x = (50 + (275 * bunk)) + (10 * column)

bunker.rect.y = 500 + (10 * row)

bunker_list.add(bunker)

def redraw():

win.fill(black)

ship.draw()

enemy_list.draw(win)

bunker_list.draw(win)

pygame.display.update()


run = True


while run:

pygame.time.delay(100)

for event in pygame.event.get():

if event.type == pygame.QUIT:

run = False

key = pygame.key.get_pressed()

if key[pygame.K_LEFT]:

ship.rect.x += -10

if key[pygame.K_RIGHT]:

ship.rect.x += 10

redraw()


pygame.quit()

Code From Part 3

import pygame

import random


pygame.init()


win = pygame.display.set_mode((750, 750))


pygame.display.set_caption('Space Invaders')


white = (255, 255, 255)


black = (0, 0, 0)


green = (0, 255, 0)


red = (255, 0, 0)


class Ship(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([50, 25])

self.image.fill(green)

self.rect = self.image.get_rect()

self.lives = 5

def draw(self):

win.blit(self.image, (self.rect.x, self.rect.y))

class Enemy(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([25, 25])

self.image.fill(white)

self.rect = self.image.get_rect()

class Bunker(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([8, 8])

self.image.fill(green)

self.rect = self.image.get_rect()

class Missile(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([5, 10])

self.image.fill(green)

self.rect = self.image.get_rect()

def update(self):

self.rect.y += -10

class Bomb(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([5, 10])

self.image.fill(red)

self.rect = self.image.get_rect()

def update(self):

self.rect.y += 10

ship = Ship()

ship.rect.x = 375

ship.rect.y = 650


enemy_list = pygame.sprite.Group()

bunker_list = pygame.sprite.Group()

missile_list = pygame.sprite.Group()

bomb_list = pygame.sprite.Group()


for row in range(1, 6):

for column in range(1, 11):

enemy = Enemy()

enemy.rect.x = 80 + (50 * column)

enemy.rect.y = 25 + (50 * row)

enemy_list.add(enemy)

for bunk in range(3):

for row in range(5):

for column in range(10):

bunker = Bunker()

bunker.rect.x = (50 + (275 * bunk)) + (10 * column)

bunker.rect.y = 500 + (10 * row)

bunker_list.add(bunker)

def redraw():

win.fill(black)

ship.draw()

enemy_list.draw(win)

bunker_list.draw(win)

missile_list.update()

missile_list.draw(win)

bomb_list.update()

bomb_list.draw(win)

pygame.display.update()


run = True


while run:

pygame.time.delay(100)

for event in pygame.event.get():

if event.type == pygame.QUIT:

run = False

key = pygame.key.get_pressed()

if key[pygame.K_LEFT]:

ship.rect.x += -10

if key[pygame.K_RIGHT]:

ship.rect.x += 10

if key[pygame.K_SPACE]:

if len(missile_list) < 10:

missile = Missile()

missile.rect.x = ship.rect.x + 25

missile.rect.y = ship.rect.y

missile_list.add(missile)

shoot_chance = random.randint(1, 100)

if shoot_chance < 25:

if len(enemy_list) > 0:

random_enemy = random.choice(enemy_list.sprites())

bomb = Bomb()

bomb.rect.x = random_enemy.rect.x + 12

bomb.rect.y = random_enemy.rect.y + 25

bomb_list.add(bomb)

for missile in missile_list:

if missile.rect.y < -10:

missile_list.remove(missile)

for enemy in enemy_list:

if missile.rect.colliderect(enemy.rect):

missile_list.remove(missile)

enemy_list.remove(enemy)

for bunker in bunker_list:

if missile.rect.colliderect(bunker.rect):

missile_list.remove(missile)

bunker_list.remove(bunker)

for bomb in bomb_list:

if bomb.rect.colliderect(ship.rect):

bomb_list.remove(bomb)

ship.lives -= 1

for bunker in bunker_list:

if bomb.rect.colliderect(bunker.rect):

bomb_list.remove(bomb)

bunker_list.remove(bunker)

redraw()


pygame.quit()

Code From Part 4

import pygame

import random


pygame.init()


win = pygame.display.set_mode((750, 750))


pygame.display.set_caption('Space Invaders')


white = (255, 255, 255)


black = (0, 0, 0)


green = (0, 255, 0)


red = (255, 0, 0)


class Ship(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([50, 25])

self.image.fill(green)

self.rect = self.image.get_rect()

self.lives = 5

def draw(self):

win.blit(self.image, (self.rect.x, self.rect.y))


class Enemy(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([25, 25])

self.image.fill(white)

self.rect = self.image.get_rect()

self.group_rect = pygame.Rect(130, 75, 500, 250)

self.direction = 5

def update(self):

self.rect.x += self.direction

self.group_rect.x += self.direction

if self.group_rect.x + 500 >= 725:

self.direction = -self.direction

if self.group_rect.x <= 25:

self.direction = -self.direction

self.rect.y += 5





class Bunker(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([8, 8])

self.image.fill(green)

self.rect = self.image.get_rect()


class Missile(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([5, 10])

self.image.fill(green)

self.rect = self.image.get_rect()


def update(self):

self.rect.y += -10


class Bomb(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.Surface([5, 10])

self.image.fill(red)

self.rect = self.image.get_rect()


def update(self):

self.rect.y += 10



ship = Ship()

ship.rect.x = 375

ship.rect.y = 650


enemy_list = pygame.sprite.Group()

bunker_list = pygame.sprite.Group()

missile_list = pygame.sprite.Group()

bomb_list = pygame.sprite.Group()


for row in range(1, 6):

for column in range(1, 11):

enemy = Enemy()

enemy.rect.x = 80 + (50 * column)

enemy.rect.y = 25 + (50 * row)

enemy_list.add(enemy)


for bunk in range(3):

for row in range(5):

for column in range(10):

bunker = Bunker()

bunker.rect.x = (50 + (275 * bunk)) + (10 * column)

bunker.rect.y = 500 + (10 * row)

bunker_list.add(bunker)


def redraw():

win.fill(black)

bottom = pygame.draw.rect(win, green, (50, 700, 650, 5))

for i in range(ship.lives):

pygame.draw.rect(win, red, (50 + (i * 130), 715, 130, 15))

font = pygame.font.SysFont('Time New Roman', 30)

text = font.render('Py Invaders', False, white)

textRect = text.get_rect()

textRect.center = (750//2 , 25)

win.blit(text, textRect)

ship.draw()

enemy_list.update()

enemy_list.draw(win)

bunker_list.draw(win)

missile_list.update()

missile_list.draw(win)

bomb_list.update()

bomb_list.draw(win)

pygame.display.update()


run = True


while run:


pygame.time.delay(100)


for event in pygame.event.get():

if event.type == pygame.QUIT:

run = False


key = pygame.key.get_pressed()

if key[pygame.K_LEFT]:

ship.rect.x += -10

if key[pygame.K_RIGHT]:

ship.rect.x += 10

if key[pygame.K_SPACE]:

if len(missile_list) < 10:

missile = Missile()

missile.rect.x = ship.rect.x + 25

missile.rect.y = ship.rect.y

missile_list.add(missile)


shoot_chance = random.randint(1, 100)

if shoot_chance < 25:

if len(enemy_list) > 0:

random_enemy = random.choice(enemy_list.sprites())

bomb = Bomb()

bomb.rect.x = random_enemy.rect.x + 12

bomb.rect.y = random_enemy.rect.y + 25

bomb_list.add(bomb)


for missile in missile_list:

if missile.rect.y < -10:

missile_list.remove(missile)

for enemy in enemy_list:

if missile.rect.colliderect(enemy.rect):

missile_list.remove(missile)

enemy_list.remove(enemy)

for bunker in bunker_list:

if missile.rect.colliderect(bunker.rect):

missile_list.remove(missile)

bunker_list.remove(bunker)


for bomb in bomb_list:

if bomb.rect.y > 750:

bomb_list.remove(bomb)

if bomb.rect.colliderect(ship.rect):

bomb_list.remove(bomb)

ship.lives -= 1

for bunker in bunker_list:

if bomb.rect.colliderect(bunker.rect):

bomb_list.remove(bomb)

bunker_list.remove(bunker)


if ship.lives < 0 or len(enemy_list) == 0:

run = False

redraw()


pygame.quit()

Code From Part 5

import pygame

import random


pygame.init()


win = pygame.display.set_mode((750, 750))


pygame.display.set_caption('Space Invaders')


bg = pygame.image.load('bgImg.png')


white = (255, 255, 255)


black = (0, 0, 0)


green = (0, 255, 0)


red = (255, 0, 0)


class Ship(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('shipImg.png')

self.rect = self.image.get_rect()

self.lives = 5

def draw(self):

win.blit(self.image, (self.rect.x, self.rect.y))


class Enemy(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('enemyImg.png')

self.rect = self.image.get_rect()

self.group_rect = pygame.Rect(130, 75, 500, 250)

self.direction = 5

def update(self):

self.rect.x += self.direction

self.group_rect.x += self.direction

if self.group_rect.x + 500 >= 725:

self.direction = -self.direction

if self.group_rect.x <= 25:

self.direction = -self.direction

self.rect.y += 5





class Bunker(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('bunkerImg.png')

self.rect = self.image.get_rect()


class Missile(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('projectileImg.png')

self.rect = self.image.get_rect()


def update(self):

self.rect.y += -10


class Bomb(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('bombImg.png')

self.rect = self.image.get_rect()


def update(self):

self.rect.y += 10



ship = Ship()

ship.rect.x = 375

ship.rect.y = 650


enemy_list = pygame.sprite.Group()

bunker_list = pygame.sprite.Group()

missile_list = pygame.sprite.Group()

bomb_list = pygame.sprite.Group()


for row in range(1, 6):

for column in range(1, 11):

enemy = Enemy()

enemy.rect.x = 80 + (50 * column)

enemy.rect.y = 25 + (50 * row)

enemy_list.add(enemy)


for bunk in range(3):

for row in range(5):

for column in range(10):

bunker = Bunker()

bunker.rect.x = (50 + (275 * bunk)) + (10 * column)

bunker.rect.y = 500 + (10 * row)

bunker_list.add(bunker)


def redraw():

win.blit(bg, (0,0))

bottom = pygame.draw.rect(win, green, (50, 700, 650, 5))

for i in range(ship.lives):

pygame.draw.rect(win, red, (50 + (i * 130), 715, 130, 15))

font = pygame.font.SysFont('Time New Roman', 30)

text = font.render('Py Invaders', False, white)

textRect = text.get_rect()

textRect.center = (750//2 , 25)

win.blit(text, textRect)

ship.draw()

enemy_list.update()

enemy_list.draw(win)

bunker_list.draw(win)

missile_list.update()

missile_list.draw(win)

bomb_list.update()

bomb_list.draw(win)

pygame.display.update()


run = True


while run:


pygame.time.delay(100)


for event in pygame.event.get():

if event.type == pygame.QUIT:

run = False


key = pygame.key.get_pressed()

if key[pygame.K_LEFT]:

ship.rect.x += -10

if key[pygame.K_RIGHT]:

ship.rect.x += 10

if key[pygame.K_SPACE]:

if len(missile_list) < 10:

missile = Missile()

missile.rect.x = ship.rect.x + 25

missile.rect.y = ship.rect.y

missile_list.add(missile)


shoot_chance = random.randint(1, 100)

if shoot_chance < 25:

if len(enemy_list) > 0:

random_enemy = random.choice(enemy_list.sprites())

bomb = Bomb()

bomb.rect.x = random_enemy.rect.x + 12

bomb.rect.y = random_enemy.rect.y + 25

bomb_list.add(bomb)


for missile in missile_list:

if missile.rect.y < -10:

missile_list.remove(missile)

for enemy in enemy_list:

if missile.rect.colliderect(enemy.rect):

missile_list.remove(missile)

enemy_list.remove(enemy)

for bunker in bunker_list:

if missile.rect.colliderect(bunker.rect):

missile_list.remove(missile)

bunker_list.remove(bunker)


for bomb in bomb_list:

if bomb.rect.y > 750:

bomb_list.remove(bomb)

if bomb.rect.colliderect(ship.rect):

bomb_list.remove(bomb)

ship.lives -= 1

for bunker in bunker_list:

if bomb.rect.colliderect(bunker.rect):

bomb_list.remove(bomb)

bunker_list.remove(bunker)


if ship.lives < 0 or len(enemy_list) == 0:

run = False

redraw()


pygame.quit()

Code From Part 6

import pygame

import random


pygame.init()


# Window Setup

win = pygame.display.set_mode((750, 750))

pygame.display.set_caption('Space Invaders')



# Background Image

bg = pygame.image.load('bgImg.png')


# Colors

white = (255, 255, 255)

black = (0, 0, 0)

green = (0, 255, 0)

red = (255, 0, 0)




class Ship(pygame.sprite.Sprite):


def __init__(self):


pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('shipImg.png')

self.rect = self.image.get_rect()

self.lives = 5

self.score = 0

self.level = 3

self.highscore = 0


def draw(self):


win.blit(self.image, (self.rect.x, self.rect.y))




class Enemy(pygame.sprite.Sprite):


def __init__(self):


pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('enemyImg.png')

self.rect = self.image.get_rect()

self.group_rect = pygame.Rect(130, 75, 500, 250)

self.direction = ship.level * 2

self.lives = ship.level

def update(self):


self.rect.x += self.direction

self.group_rect.x += self.direction

if self.group_rect.x + 500 >= 725:

self.direction = -self.direction

if self.group_rect.x <= 25:

self.direction = -self.direction

self.rect.y += 5


class Bunker(pygame.sprite.Sprite):


def __init__(self):


pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('bunkerImg.png')

self.rect = self.image.get_rect()


class Missile(pygame.sprite.Sprite):


def __init__(self):


pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('projectileImg.png')

self.rect = self.image.get_rect()


def update(self):

self.rect.y += -10


class Bomb(pygame.sprite.Sprite):


def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('bombImg.png')

self.rect = self.image.get_rect()


def update(self):

self.rect.y += 10


# Create Ship

ship = Ship()

ship.rect.x = 375

ship.rect.y = 650



# Sprite Groups

enemy_list = pygame.sprite.Group()

bunker_list = pygame.sprite.Group()

missile_list = pygame.sprite.Group()

bomb_list = pygame.sprite.Group()



# Create Enemies

def make_enemies():

for row in range(1, 6):

for column in range(1, 11):

enemy = Enemy()

enemy.rect.x = 80 + (50 * column)

enemy.rect.y = 25 + (50 * row)

enemy_list.add(enemy)


make_enemies()


# Create Bunkers

def make_bunkers():

for bunk in range(3):

for row in range(5):

for column in range(10):

bunker = Bunker()

bunker.rect.x = (50 + (275 * bunk)) + (10 * column)

bunker.rect.y = 500 + (10 * row)

bunker_list.add(bunker)

make_bunkers()


def redraw():


win.blit(bg, (0,0))

if playing:

bottom = pygame.draw.rect(win, green, (50, 700, 650, 5))

# Ship Lives

for i in range(ship.lives):


pygame.draw.rect(win, red, (50 + (i * 130), 715, 130, 15))


# Game Title

font = pygame.font.SysFont('Courier New', 30)

text = font.render('Py Invaders', False, white)

textRect = text.get_rect()

textRect.center = (750//2 , 25)

win.blit(text, textRect)

# Level

text = font.render('Level: ' + str(ship.level), False, white)

textRect = text.get_rect()

textRect.center = (100 , 25)

win.blit(text, textRect)

#Score

text = font.render('Score: ' + str(ship.score), False, white)

textRect = text.get_rect()

textRect.center = (650 , 25)

win.blit(text, textRect)


# Draw Objects

ship.draw()

enemy_list.update()

enemy_list.draw(win)

bunker_list.draw(win)

missile_list.update()

missile_list.draw(win)

bomb_list.update()

bomb_list.draw(win)

else:

# Title

font = pygame.font.SysFont('Courier New', 60)

text = font.render('Py Invaders', False, green)

textRect = text.get_rect()

textRect.center = (750//2 , 50)

win.blit(text, textRect)

# Highscore

text = font.render('Highscore: ' + str(ship.highscore), False, white)

textRect = text.get_rect()

textRect.center = (750//2 , 750//2)

win.blit(text, textRect)

# Start Message

text = font.render('Press Space to Start', False, green)

textRect = text.get_rect()

textRect.center = (750//2 , 700)

win.blit(text, textRect)


#Update Display

pygame.display.update()



run = True


playing = False



while run:


pygame.time.delay(100)


for event in pygame.event.get():

if event.type == pygame.QUIT:

run = False

if playing:

# Movement Controls

key = pygame.key.get_pressed()


if key[pygame.K_LEFT]:

ship.rect.x += -10


if key[pygame.K_RIGHT]:

ship.rect.x += 10


if key[pygame.K_SPACE]:

if len(missile_list) < 500:

missile = Missile()

missile.rect.x = ship.rect.x + 25

missile.rect.y = ship.rect.y

missile_list.add(missile)


# Shooting Enemy Bombs

shoot_chance = random.randint(1, 100)

bomb_chance = ship.level * 10

if shoot_chance < bomb_chance:

if len(enemy_list) > 0:

random_enemy = random.choice(enemy_list.sprites())

bomb = Bomb()

bomb.rect.x = random_enemy.rect.x + 12

bomb.rect.y = random_enemy.rect.y + 25

bomb_list.add(bomb)


# Missile Hits

for missile in missile_list: