Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Quarantine-game/first.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
195 lines (154 sloc)
5.43 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pygame | |
import random | |
import math | |
from pygame import mixer | |
# initialize pygame | |
pygame.init() | |
# screen resolutions | |
width = 800 | |
height = 425 | |
screen = pygame.display.set_mode((width, height)) # create screen | |
# Background | |
background = pygame.image.load('img/background.jpg') | |
# Soundtrack | |
mixer.music.load('31 Flashback.mp3') | |
mixer.music.play(-1) | |
# Title and Icon | |
pygame.display.set_caption("You should be in quarantine!") | |
icon = pygame.image.load('img/icon.png') | |
pygame.display.set_icon(icon) | |
# Player | |
playerImg = pygame.image.load('img/player.png') | |
playerX = 100 | |
playerY = 360 | |
playerX_change, playerY_change = 0, 0 | |
score = 0 | |
# Enemy | |
enemyImg = [] | |
enemyX = [] | |
enemyY = [] | |
enemyX_change = [] | |
enemyY_change = [] | |
num_of_enemies = 6 | |
for i in range(num_of_enemies): | |
enemyImg.append(pygame.image.load('img/enemy.png')) | |
enemyX.append(random.randint(150, width - 32)) | |
enemyY.append(360) | |
enemyX_change.append(-0.7) | |
enemyY_change.append(0) | |
# Player spray Attack: Ready - spray attack isn't being seen / Fire - spray is moving | |
sprayImg = pygame.image.load('img/spray.png') | |
sprayX = 0 | |
sprayY = 360 | |
sprayX_change = 2 | |
spray_state = "ready" | |
# Score text | |
score_value = 0 | |
font = pygame.font.Font('8-BIT WONDER.ttf', 18) | |
textX, textY = 10, 10 | |
# Game Over text | |
over_font = pygame.font.Font('8-BIT WONDER.ttf', 36) | |
game_over = False # game_over remains False until player loses the game | |
def show_score(x, y): | |
score = font.render("Score " + str(score_value), True, (245, 194, 66)) | |
screen.blit(score, (x, y)) | |
def game_over_text(): | |
over_text = over_font.render("GAME OVER", True, (0, 0, 0)) | |
screen.blit(over_text, (int(width / 2) - 160, int(height / 2) - 20)) | |
def player(x, y): | |
screen.blit(playerImg, (x, y)) | |
def enemy(x, y, i): | |
screen.blit(enemyImg[i], (x, y)) | |
def player_attack(x, y): | |
global spray_state | |
spray_state = "fire" | |
screen.blit(sprayImg, (x + 10, y + 10)) | |
def isCollision(x1, y1, x2, y2): | |
distance = math.sqrt((math.pow(x1 - x2, 2)) + (math.pow(y1 - y2, 2))) | |
if distance < 27: | |
return True | |
return False | |
# Game loop | |
running = True | |
while running: # leaves window opened | |
screen.fill((250, 152, 3)) # note: things appear on top of the things above it in the code | |
# background image | |
screen.blit(background, (0, 0)) | |
for event in pygame.event.get(): | |
if event.type == pygame.QUIT: | |
running = False | |
# when key is being pressed, below are all the game keys | |
if event.type == pygame.KEYDOWN and game_over is False: | |
if event.key == pygame.K_LEFT: | |
playerX_change = -1 | |
if event.key == pygame.K_RIGHT: | |
playerX_change = 1 | |
if event.key == pygame.K_UP: | |
playerY_change = -1 | |
if event.key == pygame.K_DOWN: | |
playerY_change = 1 | |
if event.key == pygame.K_z: | |
if spray_state is "ready": | |
# spray_sound = mixer.Sound('quickfart.wav') #later change .wav to the spray sound | |
# spray_sound.play() | |
# get's current x, y coordinate of the player | |
sprayX = playerX | |
sprayY = playerY | |
player_attack(sprayX, sprayY) | |
if event.type == pygame.KEYUP: | |
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: | |
playerX_change = 0 | |
if event.key == pygame.K_UP or event.key == pygame.K_DOWN: | |
playerY_change = 0 | |
if event.type == pygame.KEYDOWN: | |
if event.key == pygame.K_SPACE: | |
game_over = False | |
playerX += playerX_change | |
playerY += playerY_change | |
# set boundaries so player doesn't leave the screen | |
if playerX <= 0: | |
playerX = 0 | |
elif playerX >= width - 32: | |
playerX = width - 32 | |
if playerY <= 0: | |
playerY = 0 | |
elif playerY >= height - 32: | |
playerY = height - 32 | |
# Enemy movement patterns | |
for i in range(num_of_enemies): | |
# Game over | |
player_collision = isCollision(playerX, playerY, enemyX[i], enemyY[i]) | |
if player_collision: | |
score_value = 0 | |
game_over = True | |
enemyX[i] += enemyX_change[i] | |
# set boundaries to define enemy movement | |
if enemyX[i] <= 0: # later change this value to any left boundary, like a wall on it's left | |
enemyX_change[i] = 0.7 | |
elif enemyX[i] >= width - 32: # later change this value to any right boundary, like a wall on it's right | |
enemyX_change[i] = -0.7 | |
# Collision between attack and enemy | |
attack_collision = isCollision(enemyX[i], enemyY[i], sprayX, sprayY) | |
if attack_collision: | |
sprayY = height | |
spray_state = "ready" | |
score_value += 1 | |
enemyX[i] = random.randint(120, width - 32) | |
enemyY[i] = 360 | |
enemydeath_sound = mixer.Sound('quickfart.wav') # later change .wav to the player being attacked sound | |
enemydeath_sound.play() | |
enemy(enemyX[i], enemyY[i], i) | |
# Spray attack movement | |
if sprayX >= width: | |
sprayX = 0 | |
spray_state = "ready" | |
if spray_state is "fire": | |
sprayX += sprayX_change | |
player_attack(sprayX, sprayY) | |
# When player loses the game: | |
if game_over: | |
game_over_text() | |
player(playerX, playerY) | |
show_score(textX, textY) | |
# note: things appear on top of the things above it in the code | |
pygame.display.update() |