From 468c81f118a4162321caa660a4cdb645e8008821 Mon Sep 17 00:00:00 2001 From: konstanzer Date: Sat, 12 Mar 2022 22:01:34 -0500 Subject: [PATCH] scripts --- img/alien.bmp | Bin 0 -> 10494 bytes src/alien.py | 22 ++++++++++++++++ src/alieninvasion.py | 61 +++++++++++++++++++++++++++++++++++++++++++ src/bullet.py | 15 +++++++++-- src/settings.py | 5 ++-- src/ship.py | 3 +-- 6 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 img/alien.bmp create mode 100644 src/alien.py diff --git a/img/alien.bmp b/img/alien.bmp new file mode 100644 index 0000000000000000000000000000000000000000..dbe01a05de0f6f904459b92fd2d99193aea0bbad GIT binary patch literal 10494 zcmdU!y-piJ5P+Qui3kc(kVi-hMFdd_paP*(JPSRdMNlJX;RUb|FF=tpT|$xqTi!fI zln*8ujb``u?)J{cL1$}jc6R35+1Ve9oln2t4W9qr^Zg`#@EJbF22U zKx_zYDi9RUI#eY>fzP-L&T&P_#Z7HBr{PrbY)Vzx7cPnVpi?<_?pVHVMc{o94>JZ-1xEPMl+=iMvO0pRuJD2Ch1m^upH#ow7W07wn60 z;i430AO^;>q$tj_1SNW$!@LGO2Q04z*h%18W(??Vg|!bnHE%$3s#EGxGI0HC)NXI%S=H`tuRT3T_d zgRLqa7ad4Y?Y7_y3SRLEd_!P2d(~zq~={}L&S@V%CGW2ZCV=_avrM@ zIR=&@aXVEPRA!v%E~}y#y9(IVb`xOPC2qpa)@aM_6|zgfygk~sdbPwL&ZN^Ej1QK- zFQdedvSox}7&;I7N;nCPkY57YB^Kyt{lo^M!7Kx5o05BogdlIloEb3Ok_SS>Hnmj& zx!ZFfB9e^BRKMS!3^&vds6=R)EjLIgg#t47PM^NLxi> zfkh_giX;LWPKV4%3i)-oW`4C}awSR`W0qNfcwj{K%q1b}Rs?6@iVYip?YKA>s)moN z+i)vjbhN#Y=}40`a3uQbI`XPb4FyP?6LOyEt7&wpKAao^oarb{B*cZ&B-Hk`25v5D zonUYu?(txw$1`X{SebAb^TbtZ&88vWg}X_Z2(}xhodO7_5xv%@X2$J%@_XlKa%4TY zA3?KEroh-5aMdnNIu^I0?RIU)H3Qk*leKiU2G}PBgBj5Qs@V((lOY_o*eD*tOVw?X zR+SV0spAnmO|p<@F8u1@Wd&OUn(g9ZVAJN3%oUounY}HmtW8{riw90t71auE)2sCl z17KArZ?d~|NnSgX_M&vPZJCi9ViUAW(wJyGEIlk`IJF5R2N}QCV(*XlbMyn z=q1pmnk+RWjLq`l`f4S~654J@$-OZqbQ(MGzVMQMSScF13wHA}E{V}rX@A1lTJ0X@GI;3) L9{J~)(n;|LYGj&< literal 0 HcmV?d00001 diff --git a/src/alien.py b/src/alien.py new file mode 100644 index 0000000..2512b89 --- /dev/null +++ b/src/alien.py @@ -0,0 +1,22 @@ +import pygame +from pygame.sprite import Sprite +from os.path import dirname, abspath, join +path = dirname(dirname(abspath(__file__))) + +class Alien(Sprite): + """A single alien""" + + def __init__(self, ai_game): + + super().__init__() + self.screen = ai_game.screen + + self.image = pygame.image.load(join(path, "img", "alien.bmp")) + self.rect = self.image.get_rect() + + #Start position + self.rect.x = self.rect.width + self.rect.y = self.rect.height + + #Decimal value for horizontal position + self.x = float(self.rect.x) \ No newline at end of file diff --git a/src/alieninvasion.py b/src/alieninvasion.py index 2406bb6..241867b 100644 --- a/src/alieninvasion.py +++ b/src/alieninvasion.py @@ -2,6 +2,8 @@ import pygame from settings import Settings from ship import Ship +from bullet import Bullet +from alien import Alien class AlienInvasion: @@ -19,7 +21,38 @@ def __init__(self): self.bg_color = (230, 230, 230) pygame.display.set_caption("Alien Invasion") + self.ship = Ship(self) + self.bullets = pygame.sprite.Group() + self.aliens = pygame.sprite.Group() + + self._create_fleet() + + + def _create_fleet(self): + + alien = Alien(self) + alien_width, alien_height = alien.rect.size + available_space_x = self.settings.screen_width - (2*alien_width) + n_aliens_x = available_space_x // (2*alien_width) + + ship_height = self.ship.rect.height + available_space_y = self.settings.screen_height - 3*alien_height - ship_height + n_rows = available_space_y // (2*alien_height) + + for row in range(n_rows): + for col in range(n_aliens_x): + self._create_alien(col, row) + + + def _create_alien(self, col, row): + + alien = Alien(self) + alien_width, alien_height = alien.rect.size + alien.x = alien_width + 2*alien_width*col + alien.rect.x = alien.x + alien.rect.y = alien_height + 2*alien_height*row + self.aliens.add(alien) def run_game(self): @@ -27,6 +60,7 @@ def run_game(self): while True: self._check_events() self.ship.update() + self._update_bullets() self._update_screen() @@ -42,24 +76,51 @@ def _check_events(self): 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() + elif event.key == pygame.K_SPACE: + self._fire_bullet() 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 _fire_bullet(self): + + if len(self.bullets) < self.settings.bullet_limit: + new_bullet = Bullet(self) + self.bullets.add(new_bullet) #add bullet to to bullets group + + + def _update_bullets(self): + + self.bullets.update() + + #Delete bullets off screen + for bullet in self.bullets.copy(): + if bullet.rect.bottom <= 0: + self.bullets.remove(bullet) + + def _update_screen(self): + self.screen.fill(self.settings.bg_color) self.ship.blitme() + for bullet in self.bullets.sprites(): + bullet.draw_bullet() + #Draw each alien in the group + self.aliens.draw(self.screen) + pygame.display.flip() diff --git a/src/bullet.py b/src/bullet.py index 208dd90..8ade74a 100644 --- a/src/bullet.py +++ b/src/bullet.py @@ -13,7 +13,18 @@ def __init__(self, ai_game): self.color = self.settings.bullet_color self.rect = pygame.Rect(0, 0, - self.settings.bullet_width, self.settings.bullet_height) + 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 + self.y = float(self.rect.y) + + + def update(self): + """Move bullet up""" + self.y -= self.settings.bullet_speed + self.rect.y = self.y + + + def draw_bullet(self): + pygame.draw.rect(self.screen, self.color, self.rect) \ No newline at end of file diff --git a/src/settings.py b/src/settings.py index 9eb174d..80081da 100644 --- a/src/settings.py +++ b/src/settings.py @@ -11,5 +11,6 @@ def __init__(self): #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 + self.bullet_height = 12 + self.bullet_color = (60, 60, 60) + self.bullet_limit = 3 \ No newline at end of file diff --git a/src/ship.py b/src/ship.py index 51d312d..577742d 100644 --- a/src/ship.py +++ b/src/ship.py @@ -1,6 +1,5 @@ import pygame from os.path import dirname, abspath, join - #Parent directory path = dirname(dirname(abspath(__file__))) @@ -36,5 +35,5 @@ def update(self): def blitme(self): - """Draw ship at new loaction""" + """Draw ship at new location""" self.screen.blit(self.image, self.rect) \ No newline at end of file