From 6f756326948f7a1feb4861c726a4e58925db2810 Mon Sep 17 00:00:00 2001 From: konstanzer Date: Sat, 12 Mar 2022 21:11:09 -0500 Subject: [PATCH] scripts --- img/img.jpg | 0 img/ship.bmp | Bin 0 -> 8694 bytes src/alieninvasion.py | 62 ++++++++++++++++++++++++++++++++++++------- src/bullet.py | 19 +++++++++++++ src/settings.py | 15 +++++++++++ src/ship.py | 40 ++++++++++++++++++++++++++++ 6 files changed, 126 insertions(+), 10 deletions(-) delete mode 100644 img/img.jpg create mode 100644 img/ship.bmp create mode 100644 src/bullet.py create mode 100644 src/ship.py diff --git a/img/img.jpg b/img/img.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/img/ship.bmp b/img/ship.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9a94402a63dc937a1b6531c937cde4e254db31f1 GIT binary patch literal 8694 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 Ostv5N`pV)t0{$Os)sF7~ literal 0 HcmV?d00001 diff --git a/src/alieninvasion.py b/src/alieninvasion.py index 97c7b2c..2406bb6 100644 --- a/src/alieninvasion.py +++ b/src/alieninvasion.py @@ -1,27 +1,69 @@ +import sys import pygame +from settings import Settings +from ship import Ship class AlienInvasion: - + """Parent class to manage game behavior""" + def __init__(self): + pygame.init() - self.screen = pygame.display.set_mode((1200, 800)) - pygame.display.set_caption("Alien Invasion") + self.settings = Settings() + + self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) + self.settings.screen_width = self.screen.get_rect().width + self.settings.screen_height = self.screen.get_rect().height + self.bg_color = (230, 230, 230) + pygame.display.set_caption("Alien Invasion") + self.ship = Ship(self) + def run_game(self): while True: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - sys.exit() - - #Update screen - self.screen.fill(self.bg_color) - pygame.display.flip() + self._check_events() + self.ship.update() + self._update_screen() + + + def _check_events(self): + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + sys.exit() + elif event.type == pygame.KEYDOWN: + self._check_keydown_events(event) + elif event.type == pygame.KEYUP: + self._check_keyup_events(event) + + + def _check_keydown_events(self, event): + if event.key == pygame.K_RIGHT: + self.ship.moving_right = True + elif event.key == pygame.K_LEFT: + self.ship.moving_left = True + elif event.key == pygame.K_q: + sys.exit() + + + def _check_keyup_events(self, event): + if event.key == pygame.K_RIGHT: + self.ship.moving_right = False + elif event.key == pygame.K_LEFT: + self.ship.moving_left = False + + + def _update_screen(self): + self.screen.fill(self.settings.bg_color) + self.ship.blitme() + pygame.display.flip() if __name__ == "__main__": + ai = AlienInvasion() ai.run_game() \ No newline at end of file diff --git a/src/bullet.py b/src/bullet.py new file mode 100644 index 0000000..208dd90 --- /dev/null +++ b/src/bullet.py @@ -0,0 +1,19 @@ +import pygame +from pygame.sprite import Sprite + + +class Bullet(Sprite): + """Projectiles fired from ship. The Bullet class inherits from Sprite, which we import from the pygame .sprite module. When you use sprites, you can group related elements in your game and act on all the grouped elements at once. To create a bullet instance, __init__() needs the current instance of AlienInvasion, and we call super() to inherit properly from Sprite.""" + + def __init__(self, ai_game): + + super().__init__() + self.screen = ai_game.screen + self.settings = ai_game.settings + self.color = self.settings.bullet_color + + self.rect = pygame.Rect(0, 0, + self.settings.bullet_width, self.settings.bullet_height) + self.rect.midtop = ai_game.ship.rect.midtop + + self.y = float(self.rect.y) \ No newline at end of file diff --git a/src/settings.py b/src/settings.py index e69de29..9eb174d 100644 --- a/src/settings.py +++ b/src/settings.py @@ -0,0 +1,15 @@ +class Settings: + """Settings for Alien Invasion""" + + def __init__(self): + + self.screen_width = 1200 + self.screen_height = 800 + self.bg_color = (230, 230, 230) + #Ship + self.ship_speed = 1.5 + #Bullets + self.bullet_speed = 1. + self.bullet_width = 3 + self.bullet_height = 15 + self.bullet_color = (60, 60, 60) \ No newline at end of file diff --git a/src/ship.py b/src/ship.py new file mode 100644 index 0000000..51d312d --- /dev/null +++ b/src/ship.py @@ -0,0 +1,40 @@ +import pygame +from os.path import dirname, abspath, join + +#Parent directory +path = dirname(dirname(abspath(__file__))) + +class Ship: + """The player's ship""" + + def __init__(self, ai_game): + + self.screen = ai_game.screen + self.settings = ai_game.settings + self.screen_rect = ai_game.screen.get_rect() + + self.image = pygame.image.load(join(path, "img", "ship.bmp")) + self.rect = self.image.get_rect() + self.rect.midbottom = self.screen_rect.midbottom + + #Decimal value for ship's horizontal position + self.x = float(self.rect.x) + + # Movement flags + self.moving_right = False + self.moving_left = False + + + def update(self): + + if self.moving_right and self.rect.right < self.screen_rect.right: + self.x += self.settings.ship_speed + if self.moving_left and self.rect.left > 0: + self.x -= self.settings.ship_speed + + self.rect.x = self.x + + + def blitme(self): + """Draw ship at new loaction""" + self.screen.blit(self.image, self.rect) \ No newline at end of file