-
Notifications
You must be signed in to change notification settings - Fork 0
/
space_invaders.py
107 lines (81 loc) · 3.77 KB
/
space_invaders.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# =================================== #
# Space Invaders Clone #
# Based off of SNES game: #
# Space Invaders: The Original Game #
# =================================== #
# Created by Hlynur Stefánsson #
# ~ github.com/hlynurstef ~ #
# ~ hlynurstef@gmail.com ~ #
# =================================== #
import pygame
import ctypes
import game_functions as func
from game_settings import Settings
from player import Player
from game_stats import GameStats
from scoreboard import ScoreBoard
from pygame.sprite import Group
class Game():
"""A class representing the game."""
def __init__(self):
"""Initialize game."""
pygame.mixer.pre_init(44100, -16, 1, 512)
pygame.init()
# Ensure correct screen size to be displayed.
ctypes.windll.user32.SetProcessDPIAware()
# Make settings object.
self.settings = Settings()
# Set screensize and caption.
self.screen = pygame.display.set_mode((
self.settings.screen_width,
self.settings.screen_height))
pygame.display.set_caption(self.settings.caption)
# Screen flags.
self.main_menu = True
self.play_game = False
# TODO: Implement Main Menu screen.
# Make a clock object to set fps limit.
self.clock = pygame.time.Clock()
# Make player object.
self.player = Player(self.settings, self.screen)
# Make Invader Fleet.
self.invaders = Group()
func.create_fleet(self.settings, self.screen, self.invaders)
# Make GameStats object.
self.game_stats = GameStats(self.settings)
# Make ScoreBoard object.
self.scoreboard = ScoreBoard(self.settings, self.screen, self.game_stats)
# Make player shot object Group.
self.player_shots = Group()
self.invader_shots = Group()
# Make group for ground and initialise it.
self.ground_blocks = func.create_ground(self.settings, self.screen)
# Make list of shield groups.
self.shields = [func.create_shield(self.settings, self.screen, number) for number in range(4)]
# Make group for lives and initialise it.
#self.remaining_lives = func.create_lives(self.settings, self.screen, self.player)
self.frame_count = 0
def run_game(self):
"""Main function for Space Invaders."""
# Start the main loop for Space Invaders.
while True:
func.check_events(self.settings, self.screen, self.player, self.player_shots)
self.player.update()
# Only update shot when there is a shot on the screen.
if self.player.has_active_shot:
func.update_player_shots(self.settings, self.game_stats, self.player, self.player_shots, self.shields,
self.invaders, self.invader_shots)
self.frame_count = func.update_invader_shots(self.settings, self.invader_shots, self.ground_blocks,
self.shields, self.frame_count, self.player, self.game_stats)
func.update_invaders(self.settings, self.screen, self.invaders, self.shields, self.invader_shots,
self.player, self.game_stats)
func.update_screen(self.settings, self.screen, self.scoreboard, self.player, self.player_shots,
self.ground_blocks, self.shields, self.invaders,
self.invader_shots, self.game_stats)
# Set max fps.
self.clock.tick(self.settings.fps)
#self.clock.tick(10)
# Prints fps to console for debugging reasons
#print("FPS:", self.clock.get_fps())
if __name__ == '__main__':
Game().run_game()