1
Fork 0

REmoved possible bugs, and tabs vs spaces

This commit is contained in:
unknown 2015-05-12 12:58:22 +01:00
parent 00f6fd2e5e
commit c627f7f13b

422
game.py
View file

@ -1,212 +1,212 @@
import pygame, logging import pygame, logging
from time import time, sleep from time import time, sleep
from random import randint from random import randint
import eggs import eggs
from bullet import Bullet from bullet import Bullet
from player import Shooter from player import Shooter
from assets import * from assets import *
from target import Target from target import Target
PLAYING_GAME = False PLAYING_GAME = False
WINDOW_SIZE = (640,480) WINDOW_SIZE = (640,480)
FPS = 120 FPS = 120
def update_score(window, score): def update_score(window, score):
font = pygame.font.SysFont(None, 30, bold=False) font = pygame.font.SysFont(None, 30, bold=False)
window.blit(font.render("Score: {}".format(int(score)), True, (255,0,0)), (25, WINDOW_SIZE[1] - 30)) window.blit(font.render("Score: {}".format(int(score)), True, (255,0,0)), (25, WINDOW_SIZE[1] - 30))
def update_level(window, level): def update_level(window, level):
font = pygame.font.SysFont(None, 25, bold=True) font = pygame.font.SysFont(None, 25, bold=True)
window.blit(font.render("Level: {}".format(int(level)+1), True, (0,255,0)), (8.7*WINDOW_SIZE[0]/10, WINDOW_SIZE[1] - 30)) window.blit(font.render("Level: {}".format(int(level)+1), True, (0,255,0)), (8.7*WINDOW_SIZE[0]/10, WINDOW_SIZE[1] - 30))
def update_lives(window, lives): def update_lives(window, lives):
font = pygame.font.SysFont(None, 30, bold=False) font = pygame.font.SysFont(None, 30, bold=False)
window.blit(font.render("Lives Remaining: {}".format(int(lives)), True, (0,0,255)), (4.5*WINDOW_SIZE[0]/10, WINDOW_SIZE[1] - 30)) window.blit(font.render("Lives Remaining: {}".format(int(lives)), True, (0,0,255)), (4.5*WINDOW_SIZE[0]/10, WINDOW_SIZE[1] - 30))
def initialise(menu, options): def initialise(menu, options):
pygame.mixer.pre_init(44100, -16, 2, 2048) pygame.mixer.pre_init(44100, -16, 2, 2048)
pygame.init() pygame.init()
init_sounds() init_sounds()
options["Difficulty"] = FPS options["Difficulty"] = FPS
window = pygame.display.set_mode(WINDOW_SIZE) window = pygame.display.set_mode(WINDOW_SIZE)
exit_code = play(window, options) # Run main game loop exit_code = play(window, options) # Run main game loop
for key, value in Sounds.items(): for key, value in Sounds.items():
value.stop() value.stop()
logging.debug("Game Exited with code {}".format(exit_code)) logging.debug("Game Exited with code {}".format(exit_code))
if exit_code != "QUIT": sleep(1) if exit_code != "QUIT": sleep(1)
pygame.quit() pygame.quit()
menu.deiconify() menu.deiconify()
return exit_code return exit_code
def generate_targets(player): def generate_targets(player):
sprite_list = [] sprite_list = []
group = pygame.sprite.Group() group = pygame.sprite.Group()
if player.level > len(Levels)-1: if player.level > len(Levels)-1:
level = generate_random_level() level = generate_random_level()
else: level = Levels[player.level] else: level = Levels[player.level]
logging.debug("Generating Level: " + str(level)) logging.debug("Generating Level: " + str(level))
for i in range(level.rows): for i in range(level.rows):
i *= level.padding + 8 i *= level.padding + 8
for j in range(40, WINDOW_SIZE[0] - 40, level.padding + 8): for j in range(40, WINDOW_SIZE[0] - 40, level.padding + 8):
temp = Target(x=j,y=i, textures=player.options["Textures"]) temp = Target(x=j,y=i, textures=player.options["Textures"])
sprite_list.append(temp) sprite_list.append(temp)
del temp del temp
for i in range(level.firebacks): for i in range(level.firebacks):
changed = False changed = False
while not changed: while not changed:
index = randint(0, len(sprite_list)-1) if len(sprite_list) - 1 != 0 else 0 index = randint(0, len(sprite_list)-1) if (len(sprite_list) - 1 != 0) else 0
if sprite_list[index].type != "SHOOTER": if sprite_list[index].type != "SHOOTER":
sprite_list[index].type = "SHOOTER" sprite_list[index].type = "SHOOTER"
sprite_list[index].image = pygame.transform.scale(player.options["Textures"].get_texture("SHOOTER"), (sprite_list[index].width, sprite_list[index].height)) sprite_list[index].image = pygame.transform.scale(player.options["Textures"].get_texture("SHOOTER"), (sprite_list[index].width, sprite_list[index].height))
x,y = sprite_list[index].rect.x, sprite_list[index].rect.y x,y = sprite_list[index].rect.x, sprite_list[index].rect.y
sprite_list[index].rect = sprite_list[index].image.get_rect() sprite_list[index].rect = sprite_list[index].image.get_rect()
sprite_list[index].set_position(x,y, center=False) #Already Centered! sprite_list[index].set_position(x,y, center=False) #Already Centered!
changed = True changed = True
for sprite in sprite_list: #Because sprite groups dont support indexing! for sprite in sprite_list: #Because sprite groups dont support indexing!
group.add(sprite) group.add(sprite)
return group return group
def play(window, options): def play(window, options):
window_rect = window.get_rect() window_rect = window.get_rect()
options["Textures"].load_texture_pack(options["Textures"].pack) options["Textures"].load_texture_pack(options["Textures"].pack)
player = Shooter(window=window, texture=options["Textures"]) player = Shooter(window=window, texture=options["Textures"])
player.set_position(WINDOW_SIZE[0]/2, WINDOW_SIZE[1]*0.83) player.set_position(WINDOW_SIZE[0]/2, WINDOW_SIZE[1]*0.83)
player.options = options player.options = options
player_group = pygame.sprite.Group() player_group = pygame.sprite.Group()
player_group.add(player) player_group.add(player)
target_group = generate_targets(player) target_group = generate_targets(player)
bullet_group = pygame.sprite.Group() bullet_group = pygame.sprite.Group()
clock = pygame.time.Clock() clock = pygame.time.Clock()
timeouts = { timeouts = {
"Target Movement":[FPS*0.5,FPS*0.5], "Target Movement":[FPS*0.5,FPS*0.5],
"Powerup":[FPS*100, FPS*100] "Powerup":[FPS*100, FPS*100]
} }
init_sounds() init_sounds()
Sounds["main"].play(loops=-1) #Start background music Sounds["main"].play(loops=-1) #Start background music
logging.info("Game Started.") logging.info("Game Started.")
PLAYING_GAME = True PLAYING_GAME = True
while PLAYING_GAME: while PLAYING_GAME:
window.fill((0,0,0)) window.fill((0,0,0))
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
logging.critical("Exiting Game...") logging.critical("Exiting Game...")
PLAYING_GAME = False PLAYING_GAME = False
return "QUIT" return "QUIT"
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
temp = Bullet(player, player.options["Textures"]) temp = Bullet(player, player.options["Textures"])
Sounds["shot"].play() Sounds["shot"].play()
bullet_group.add(temp) bullet_group.add(temp)
if event.type == pygame.KEYDOWN and event.key == pygame.K_KP_PLUS: if event.type == pygame.KEYDOWN and event.key == pygame.K_KP_PLUS:
player.OP = True player.OP = True
Sounds["main"].stop() Sounds["main"].stop()
Sounds["OP"].play(loops=-1) Sounds["OP"].play(loops=-1)
keys = pygame.key.get_pressed() keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT] or keys[pygame.K_d]: if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
if player.powerup == "SPEED": player.move(player.speed * 1.5) if player.powerup == "SPEED": player.move(player.speed * 1.5)
else: player.move(player.speed) else: player.move(player.speed)
if keys[pygame.K_LEFT] or keys[pygame.K_a]: if keys[pygame.K_LEFT] or keys[pygame.K_a]:
if player.powerup == "SPEED": player.move(-player.speed*1.5) if player.powerup == "SPEED": player.move(-player.speed*1.5)
else: player.move(-player.speed) else: player.move(-player.speed)
if keys[pygame.K_KP4] and keys[pygame.K_KP5] and keys[pygame.K_KP6] and player.OP: if keys[pygame.K_KP4] and keys[pygame.K_KP5] and keys[pygame.K_KP6] and player.OP:
temp = Bullet(player, player.options["Textures"]) temp = Bullet(player, player.options["Textures"])
bullet_group.add(temp) bullet_group.add(temp)
if keys[pygame.K_r] and [pygame.K_9] and [pygame.K_k] and player.OP: if keys[pygame.K_r] and [pygame.K_9] and [pygame.K_k] and player.OP:
eggs.r9k(window) eggs.r9k(window)
for sprite in bullet_group: for sprite in bullet_group:
sprite.update() sprite.update()
if sprite.rect.y < 0 or (sprite.rect.y > player.rect.y and sprite.type == "TARGET"): if sprite.rect.y < 0 or (sprite.rect.y > player.rect.y and sprite.type == "TARGET"):
bullet_group.remove(sprite) bullet_group.remove(sprite)
for bullet in bullet_group: for bullet in bullet_group:
hit_list = pygame.sprite.spritecollide(bullet, target_group, False) hit_list = pygame.sprite.spritecollide(bullet, target_group, False)
for target in hit_list: for target in hit_list:
if bullet.type != "TARGET": if bullet.type != "TARGET":
target_group.remove(target) target_group.remove(target)
bullet_group.remove(bullet) bullet_group.remove(bullet)
player.score += 1 player.score += 1
hit_list = pygame.sprite.spritecollide(bullet, player_group, False) hit_list = pygame.sprite.spritecollide(bullet, player_group, False)
for player in hit_list: for player in hit_list:
if bullet.type == "TARGET": if bullet.type == "TARGET":
bullet_group.remove(bullet) bullet_group.remove(bullet)
logging.info("You were hit by a target's bullet!") logging.info("You were hit by a target's bullet!")
if not player.OP: player.lives -= 1 if not player.OP: player.lives -= 1
if player.lives <= 0: if player.lives <= 0:
return "LIVES" return "LIVES"
if timeouts["Target Movement"][0] <=0: if timeouts["Target Movement"][0] <=0:
drop_targets = False drop_targets = False
for target in target_group: for target in target_group:
target.move() target.move()
if target.rect.x <= 30 or target.rect.x >=WINDOW_SIZE[0] - 30: if target.rect.x <= 30 or target.rect.x >=WINDOW_SIZE[0] - 30:
drop_targets = True drop_targets = True
if target.rect.y >= player.rect.y + 35: if target.rect.y >= player.rect.y + 35:
PLAYING_GAME = False PLAYING_GAME = False
return "PLAYER COLLISION" return "PLAYER COLLISION"
if drop_targets: if drop_targets:
logging.debug("The targets are moving down a level!") logging.debug("The targets are moving down a level!")
for target in target_group: for target in target_group:
target.drop() target.drop()
timeouts["Target Movement"][0] = timeouts["Target Movement"][1] timeouts["Target Movement"][0] = timeouts["Target Movement"][1]
for target in target_group: for target in target_group:
if target.type == "SHOOTER": if target.type == "SHOOTER":
if randint(0,375) > 1: continue if randint(0,375) > 1: continue
temp = Bullet(target, player.options["Textures"]) temp = Bullet(target, player.options["Textures"])
temp.type="TARGET" temp.type="TARGET"
temp.image = pygame.transform.scale(player.options["Textures"].get_texture("TARGET_BULLET"), (temp.width, temp.height)) temp.image = pygame.transform.scale(player.options["Textures"].get_texture("TARGET_BULLET"), (temp.width, temp.height))
x,y = temp.rect.x, temp.rect.y x,y = temp.rect.x, temp.rect.y
temp.rect = temp.image.get_rect() temp.rect = temp.image.get_rect()
temp.set_position(x,y) temp.set_position(x,y)
temp.speed = -3 #So it shoots down! temp.speed = -3 #So it shoots down!
bullet_group.add(temp) bullet_group.add(temp)
if len(target_group) == 0: #If all current players are gone. if len(target_group) == 0: #If all current players are gone.
player.level += 1 player.level += 1
target_group = generate_targets(player) target_group = generate_targets(player)
target_group.draw(window) target_group.draw(window)
bullet_group.empty() bullet_group.empty()
pygame.display.update() pygame.display.update()
sleep(1.5) sleep(1.5)
if player.OP: if player.OP:
player.change_colour((255,96,0)) #override colour change if changed before player.change_colour((255,96,0)) #override colour change if changed before
update_score(window, player.score) update_score(window, player.score)
update_level(window, player.level) update_level(window, player.level)
update_lives(window, player.lives) update_lives(window, player.lives)
bullet_group.draw(window) bullet_group.draw(window)
target_group.draw(window) target_group.draw(window)
player_group.draw(window) player_group.draw(window)
for key, value in timeouts.items(): for key, value in timeouts.items():
value[0] -= 1 value[0] -= 1
pygame.display.update() pygame.display.update()
clock.tick(FPS) clock.tick(FPS)