Cleaned up code, added doc files
This commit is contained in:
parent
81eb059d5d
commit
936edddd2e
5 changed files with 85 additions and 22 deletions
|
@ -6,6 +6,16 @@ from pygame import mixer
|
|||
|
||||
class Bomb(BoundedTurtle):
|
||||
def __init__(self, init_heading, speed, x_min, x_max, y_min, y_max, scoreboard):
|
||||
"""
|
||||
Initialize the bomb.
|
||||
:param init_heading: Heading bomb should travel towards.
|
||||
:param speed: Speed of bomb.
|
||||
:param x_min: Minimum x coordinate of the screen.
|
||||
:param x_max: Maximum x coordinate of the screen.
|
||||
:param y_min: Minimum y coordinate of the screen.
|
||||
:param y_max: Maximum y coordinate of the screen.
|
||||
:param scoreboard: Scoreboard object.
|
||||
"""
|
||||
pass
|
||||
|
||||
def move(self):
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
from abc import abstractmethod
|
||||
from turtle import Turtle
|
||||
|
||||
|
||||
class BoundedTurtle(Turtle):
|
||||
def __init__(self, speed, x_min, x_max, y_min, y_max):
|
||||
"""
|
||||
Initialize the bounded turtle.
|
||||
:param speed: Speed of the turtle.
|
||||
:param x_min: Minimum x coordinate of the screen.
|
||||
:param x_max: Maximum x coordinate of the screen.
|
||||
:param y_min: Minimum y coordinate of the screen.
|
||||
:param y_max: Maximum y coordinate of the screen.
|
||||
"""
|
||||
super().__init__()
|
||||
self.__x_min = x_min
|
||||
self.__x_max = x_max
|
||||
|
@ -47,4 +56,4 @@ class BoundedTurtle(Turtle):
|
|||
|
||||
@abstractmethod
|
||||
def move(self):
|
||||
pass
|
||||
pass
|
||||
|
|
|
@ -4,11 +4,18 @@ from drone import Drone
|
|||
from rocket import Rocket
|
||||
from scoreboard import Scoreboard
|
||||
import time
|
||||
from sound_and_music import SoundAndMusic
|
||||
from audio import Audio
|
||||
|
||||
|
||||
class DroneInvaders:
|
||||
def __init__(self, x_min, x_max, y_min, y_max):
|
||||
"""
|
||||
Initialize the game.
|
||||
:param x_min: Minimum x coordinate of the screen.
|
||||
:param x_max: Maximum x coordinate of the screen.
|
||||
:param y_min: Minimum y coordinate of the screen.
|
||||
:param y_max: Maximum y coordinate of the screen.
|
||||
"""
|
||||
self.done = None
|
||||
self.x_min = x_min
|
||||
self.x_max = x_max
|
||||
|
@ -31,6 +38,10 @@ class DroneInvaders:
|
|||
self.PAUSE_FONT = ('Arial', 24, 'bold')
|
||||
|
||||
def play(self):
|
||||
"""
|
||||
Play the game.
|
||||
:return: None
|
||||
"""
|
||||
self.scoreboard.draw_scoreboard()
|
||||
self.screen.ontimer(self.add_drone, self.scoreboard.spawn_time)
|
||||
|
||||
|
@ -100,10 +111,14 @@ class DroneInvaders:
|
|||
self.screen.ontimer(self.add_drone, self.scoreboard.spawn_time)
|
||||
|
||||
def pause(self):
|
||||
"""
|
||||
Does things when the game is paused.
|
||||
:return: None
|
||||
"""
|
||||
if self.game_state == self.game_states['Playing']:
|
||||
self.screen.ontimer(self.add_drone, 0)
|
||||
self.game_state = self.game_states['Pause']
|
||||
SoundAndMusic.pause_music()
|
||||
Audio.pause_music()
|
||||
# Write to screen
|
||||
# self.pause_screen.bgcolor('light blue')
|
||||
self.rocket.hideturtle()
|
||||
|
@ -114,22 +129,26 @@ class DroneInvaders:
|
|||
else:
|
||||
self.screen.ontimer(self.add_drone, self.scoreboard.spawn_time)
|
||||
self.game_state = self.game_states['Playing']
|
||||
SoundAndMusic.unpause_music()
|
||||
Audio.unpause_music()
|
||||
self.rocket.showturtle()
|
||||
for drone in Drone.get_drones():
|
||||
drone.showturtle()
|
||||
self.pause_turtle.clear()
|
||||
|
||||
def draw_pause_message(self):
|
||||
"""
|
||||
Draws the pause message to the screen.
|
||||
:return: None
|
||||
"""
|
||||
self.pause_turtle.clear()
|
||||
up = '⇑'
|
||||
down = '⇓'
|
||||
self.pause_turtle.color('black')
|
||||
self.pause_turtle.goto(-0.5, 0.3)
|
||||
self.pause_turtle.write(f'Music volume: {SoundAndMusic.music_volume} of 100', align='left',
|
||||
self.pause_turtle.write(f'Music volume: {Audio.music_volume} of 100', align='left',
|
||||
font=self.PAUSE_FONT)
|
||||
self.pause_turtle.goto(-0.5, 0.2)
|
||||
self.pause_turtle.write(f'Sfx volume: {SoundAndMusic.sfx_volume} of 100', align='left', font=self.PAUSE_FONT)
|
||||
self.pause_turtle.write(f'Sfx volume: {Audio.sfx_volume} of 100', align='left', font=self.PAUSE_FONT)
|
||||
self.pause_turtle.goto(-0.5, 0)
|
||||
self.pause_turtle.write(f'Music up {up}', align='left', font=self.PAUSE_FONT)
|
||||
self.pause_turtle.goto(-0.5, -0.1)
|
||||
|
@ -140,21 +159,41 @@ class DroneInvaders:
|
|||
self.pause_turtle.write(f'Sfx down -', align='left', font=self.PAUSE_FONT)
|
||||
|
||||
def music_up(self):
|
||||
SoundAndMusic.change_music_volume(1)
|
||||
"""
|
||||
Increases the music volume.
|
||||
:return: None
|
||||
"""
|
||||
Audio.change_music_volume(1)
|
||||
self.draw_pause_message()
|
||||
|
||||
def music_down(self):
|
||||
SoundAndMusic.change_music_volume(-1)
|
||||
"""
|
||||
Decreases the music volume.
|
||||
:return: None
|
||||
"""
|
||||
Audio.change_music_volume(-1)
|
||||
self.draw_pause_message()
|
||||
|
||||
def sfx_up(self):
|
||||
SoundAndMusic.change_sfx_volume(1)
|
||||
"""
|
||||
Increases the sfx volume.
|
||||
:return: None
|
||||
"""
|
||||
Audio.change_sfx_volume(1)
|
||||
self.draw_pause_message()
|
||||
|
||||
def sfx_down(self):
|
||||
SoundAndMusic.change_music_volume(-1)
|
||||
"""
|
||||
Decreases the sfx volume.
|
||||
:return: None
|
||||
"""
|
||||
Audio.change_music_volume(-1)
|
||||
self.draw_pause_message()
|
||||
|
||||
def quit(self):
|
||||
"""
|
||||
Quits the game.
|
||||
:return: None
|
||||
"""
|
||||
self.screen.bye()
|
||||
exit(0)
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
from droneinvaders import DroneInvaders
|
||||
from sound_and_music import SoundAndMusic
|
||||
from audio import Audio
|
||||
|
||||
SoundAndMusic.start_pygame()
|
||||
SoundAndMusic.load_music()
|
||||
SoundAndMusic.play_music()
|
||||
SoundAndMusic.load_sounds()
|
||||
Audio.start_pygame()
|
||||
Audio.load_music()
|
||||
Audio.play_music()
|
||||
Audio.load_sounds()
|
||||
|
||||
if __name__ == '__main__':
|
||||
di = DroneInvaders(-1, 1, -1, 1)
|
||||
|
|
|
@ -1,12 +1,17 @@
|
|||
from turtle import Turtle
|
||||
import json
|
||||
from sound_and_music import SoundAndMusic
|
||||
from audio import Audio
|
||||
import time
|
||||
|
||||
|
||||
class Scoreboard(Turtle):
|
||||
|
||||
def __init__(self, x, y):
|
||||
"""
|
||||
Initialize the scoreboard.
|
||||
:param x: X coordinate of the scoreboard.
|
||||
:param y: Y coordinate of the scoreboard.
|
||||
"""
|
||||
super().__init__()
|
||||
self.score = 0
|
||||
|
||||
|
@ -75,7 +80,7 @@ class Scoreboard(Turtle):
|
|||
self.draw_scoreboard()
|
||||
|
||||
def game_over(self):
|
||||
SoundAndMusic.stop_music()
|
||||
Audio.stop_music()
|
||||
if self.score > self.high_score:
|
||||
with open('data.txt', 'w') as file:
|
||||
file.write(str(self.score))
|
||||
|
@ -92,7 +97,7 @@ class Scoreboard(Turtle):
|
|||
self.write('The world has been destroyed', align=self.CENTER_ALIGN, font=self.GAME_OVER_FONT)
|
||||
if not self.gameover_sound_played:
|
||||
self.gameover_sound_played = True
|
||||
SoundAndMusic.play_game_lost_sound()
|
||||
Audio.play_game_lost_sound()
|
||||
|
||||
def game_over_won(self):
|
||||
self.goto(0, 0.15)
|
||||
|
@ -105,7 +110,7 @@ class Scoreboard(Turtle):
|
|||
self.write('Grand Poobah!', align=self.CENTER_ALIGN, font=self.GAME_OVER_FONT)
|
||||
if not self.gameover_sound_played:
|
||||
self.gameover_sound_played = True
|
||||
SoundAndMusic.play_game_won_sound()
|
||||
Audio.play_game_won_sound()
|
||||
|
||||
def increment(self, amount, droneLost=True):
|
||||
self.score += amount
|
||||
|
@ -120,19 +125,19 @@ class Scoreboard(Turtle):
|
|||
self.__max_drones = self.level_data[self.levels[self.current_level]]['MaxDrones']
|
||||
self.__drone_speed = self.level_data[self.levels[self.current_level]]['DroneSpeed']
|
||||
self.__spawn_time = self.level_data[self.levels[self.current_level]]['SpawnTime']
|
||||
SoundAndMusic.play_change_level_sound()
|
||||
Audio.play_change_level_sound()
|
||||
count = 5
|
||||
count_down = Turtle()
|
||||
count_down.hideturtle()
|
||||
count_down.penup()
|
||||
count_down.goto(0, 0)
|
||||
SoundAndMusic.pause_music()
|
||||
Audio.pause_music()
|
||||
while count >= 0:
|
||||
count_down.write(f'{count}', align=self.CENTER_ALIGN, font=self.GAME_OVER_FONT)
|
||||
time.sleep(1.0)
|
||||
count_down.clear()
|
||||
count -= 1
|
||||
SoundAndMusic.unpause_music()
|
||||
Audio.unpause_music()
|
||||
self.draw_scoreboard()
|
||||
return True
|
||||
else:
|
||||
|
|
Loading…
Reference in a new issue