From 1d4c22a77e52e783a524dff6f99cf85ad54c18a5 Mon Sep 17 00:00:00 2001 From: mstogovs2 Date: Fri, 22 Dec 2023 23:29:28 +0200 Subject: [PATCH] =?UTF-8?q?Rename=20folders=20Add=20Spraitu=20att=C4=93li?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {pygame_pamati => 1. pygame_pamati}/main.py | 0 .../enemy.py | 0 {spraiti => 2. spraiti}/main.py | 0 .../player.py | 0 .../settings.py | 0 .../enemy.py | 0 .../main.py | 0 .../player.py | 0 .../settings.py | 0 .../enemy.py | 0 .../main.py | 0 .../player.py | 0 .../settings.py | 0 5. spraitu_atteli/enemy.py | 26 +++++ 5. spraitu_atteli/main.py | 91 ++++++++++++++++++ 5. spraitu_atteli/player.py | 36 +++++++ 5. spraitu_atteli/settings.py | 3 + sprites/bat.png | Bin 0 -> 632 bytes sprites/jetfighter.png | Bin 0 -> 17471 bytes 19 files changed, 156 insertions(+) rename {pygame_pamati => 1. pygame_pamati}/main.py (100%) rename {lietotaja_defineti_notikumi => 2. spraiti}/enemy.py (100%) rename {spraiti => 2. spraiti}/main.py (100%) rename {lietotaja_defineti_notikumi => 2. spraiti}/player.py (100%) rename {lietotaja_defineti_notikumi => 2. spraiti}/settings.py (100%) rename {sadursmes_noteiksana => 3. sadursmes_noteiksana}/enemy.py (100%) rename {sadursmes_noteiksana => 3. sadursmes_noteiksana}/main.py (100%) rename {sadursmes_noteiksana => 3. sadursmes_noteiksana}/player.py (100%) rename {sadursmes_noteiksana => 3. sadursmes_noteiksana}/settings.py (100%) rename {spraiti => 4. lietotaja_defineti_notikumi}/enemy.py (100%) rename {lietotaja_defineti_notikumi => 4. lietotaja_defineti_notikumi}/main.py (100%) rename {spraiti => 4. lietotaja_defineti_notikumi}/player.py (100%) rename {spraiti => 4. lietotaja_defineti_notikumi}/settings.py (100%) create mode 100644 5. spraitu_atteli/enemy.py create mode 100644 5. spraitu_atteli/main.py create mode 100644 5. spraitu_atteli/player.py create mode 100644 5. spraitu_atteli/settings.py create mode 100644 sprites/bat.png create mode 100644 sprites/jetfighter.png diff --git a/pygame_pamati/main.py b/1. pygame_pamati/main.py similarity index 100% rename from pygame_pamati/main.py rename to 1. pygame_pamati/main.py diff --git a/lietotaja_defineti_notikumi/enemy.py b/2. spraiti/enemy.py similarity index 100% rename from lietotaja_defineti_notikumi/enemy.py rename to 2. spraiti/enemy.py diff --git a/spraiti/main.py b/2. spraiti/main.py similarity index 100% rename from spraiti/main.py rename to 2. spraiti/main.py diff --git a/lietotaja_defineti_notikumi/player.py b/2. spraiti/player.py similarity index 100% rename from lietotaja_defineti_notikumi/player.py rename to 2. spraiti/player.py diff --git a/lietotaja_defineti_notikumi/settings.py b/2. spraiti/settings.py similarity index 100% rename from lietotaja_defineti_notikumi/settings.py rename to 2. spraiti/settings.py diff --git a/sadursmes_noteiksana/enemy.py b/3. sadursmes_noteiksana/enemy.py similarity index 100% rename from sadursmes_noteiksana/enemy.py rename to 3. sadursmes_noteiksana/enemy.py diff --git a/sadursmes_noteiksana/main.py b/3. sadursmes_noteiksana/main.py similarity index 100% rename from sadursmes_noteiksana/main.py rename to 3. sadursmes_noteiksana/main.py diff --git a/sadursmes_noteiksana/player.py b/3. sadursmes_noteiksana/player.py similarity index 100% rename from sadursmes_noteiksana/player.py rename to 3. sadursmes_noteiksana/player.py diff --git a/sadursmes_noteiksana/settings.py b/3. sadursmes_noteiksana/settings.py similarity index 100% rename from sadursmes_noteiksana/settings.py rename to 3. sadursmes_noteiksana/settings.py diff --git a/spraiti/enemy.py b/4. lietotaja_defineti_notikumi/enemy.py similarity index 100% rename from spraiti/enemy.py rename to 4. lietotaja_defineti_notikumi/enemy.py diff --git a/lietotaja_defineti_notikumi/main.py b/4. lietotaja_defineti_notikumi/main.py similarity index 100% rename from lietotaja_defineti_notikumi/main.py rename to 4. lietotaja_defineti_notikumi/main.py diff --git a/spraiti/player.py b/4. lietotaja_defineti_notikumi/player.py similarity index 100% rename from spraiti/player.py rename to 4. lietotaja_defineti_notikumi/player.py diff --git a/spraiti/settings.py b/4. lietotaja_defineti_notikumi/settings.py similarity index 100% rename from spraiti/settings.py rename to 4. lietotaja_defineti_notikumi/settings.py diff --git a/5. spraitu_atteli/enemy.py b/5. spraitu_atteli/enemy.py new file mode 100644 index 0000000..6c1f1fe --- /dev/null +++ b/5. spraitu_atteli/enemy.py @@ -0,0 +1,26 @@ +from settings import SCREEN_HEIGHT, SCREEN_WIDTH +from pygame.locals import (RLEACCEL,K_UP,K_DOWN,K_LEFT,K_RIGHT,K_ESCAPE,KEYDOWN,QUIT) +import random +import pygame + +# Define the enemy object by extending pygame.sprite.Sprite +# The surface you draw on the screen is now an attribute of 'enemy' +class Enemy(pygame.sprite.Sprite): + def __init__(self): + super().__init__() + self.surf = pygame.image.load("sprites/bat.png").convert() + self.surf.set_colorkey((0, 0, 0), RLEACCEL) + self.rect = self.surf.get_rect( + center=( + random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100), + random.randint(0, SCREEN_HEIGHT), + ) + ) + self.speed = random.randint(1, 3) + + # Move the sprite based on speed + # Remove the sprite when it passes the left edge of the screen + def update(self): + self.rect.move_ip(-self.speed, 0) + if self.rect.right < 0: + self.kill() \ No newline at end of file diff --git a/5. spraitu_atteli/main.py b/5. spraitu_atteli/main.py new file mode 100644 index 0000000..8e75f90 --- /dev/null +++ b/5. spraitu_atteli/main.py @@ -0,0 +1,91 @@ +# Code is taken from https://realpython.com/pygame-a-primer/ + +# Import and initialize the pygame library +import pygame +from player import Player +from enemy import Enemy +from settings import SCREEN_HEIGHT, SCREEN_WIDTH + +from pygame.locals import ( + K_UP, + K_DOWN, + K_LEFT, + K_RIGHT, + K_ESCAPE, + KEYDOWN, + QUIT, +) + +pygame.init() + + +# Create the screen object +# The size is determined by the constant SCREEN_WIDTH and SCREEN_HEIGHT +screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) + +# Create a custom event for adding a new enemy +ADDENEMY = pygame.USEREVENT + 1 +pygame.time.set_timer(ADDENEMY, 250) + + +# Variable to keep the main loop running +running = True + +player = Player() + +# Create groups to hold enemy sprites and all sprites +# - enemies is used for collision detection and position updates +# - all_sprites is used for rendering +enemies = pygame.sprite.Group() +all_sprites = pygame.sprite.Group() +all_sprites.add(player) + +# Main loop +while running: + # Look at every event in the queue + for event in pygame.event.get(): + # Did the user hit a key? + if event.type == KEYDOWN: + # Was it the Escape key? If so, stop the loop. + if event.key == K_ESCAPE: + running = False + + # Did the user click the window close button? If so, stop the loop. + elif event.type == QUIT: + running = False + + # Add a new enemy? + elif event.type == ADDENEMY: + # Create the new enemy and add it to sprite groups + new_enemy = Enemy() + enemies.add(new_enemy) + all_sprites.add(new_enemy) + + # Fill the background with white + screen.fill((255, 255, 255)) + + # Get all the keys currently pressed + pressed_keys = pygame.key.get_pressed() + + # Update the player sprite based on user keypresses + player.update(pressed_keys) + + # Update enemy position + enemies.update() + + # Draw all sprites + for entity in all_sprites: + screen.blit(entity.surf, entity.rect) + + # Check if any enemies have collided with the player + if pygame.sprite.spritecollideany(player, enemies): + # If so, then remove the player and stop the loop + player.kill() + running = False + + + # Flip the display + pygame.display.flip() + +# Done! Time to quit. +pygame.quit() \ No newline at end of file diff --git a/5. spraitu_atteli/player.py b/5. spraitu_atteli/player.py new file mode 100644 index 0000000..e28dd09 --- /dev/null +++ b/5. spraitu_atteli/player.py @@ -0,0 +1,36 @@ +import pygame +from settings import SCREEN_HEIGHT, SCREEN_WIDTH +from pygame.locals import (RLEACCEL,K_UP,K_DOWN,K_LEFT,K_RIGHT,K_ESCAPE,KEYDOWN,QUIT) + + +# Define a Player object by extending pygame.sprite.Sprite +# The surface drawn on the screen is now an attribute of 'player' +class Player(pygame.sprite.Sprite): + def __init__(self): + super(Player, self).__init__() + self.surf = pygame.transform.scale( + pygame.image.load("sprites/jetfighter.png").convert(), + (50, 36) + ) + self.surf.set_colorkey((0, 0, 0), RLEACCEL) + self.rect = self.surf.get_rect() + + def update(self, pressed_keys): + if pressed_keys[K_UP]: + self.rect.move_ip(0, -5) + if pressed_keys[K_DOWN]: + self.rect.move_ip(0, 5) + if pressed_keys[K_LEFT]: + self.rect.move_ip(-5, 0) + if pressed_keys[K_RIGHT]: + self.rect.move_ip(5, 0) + + # Keep player on the screen + if self.rect.left < 0: + self.rect.left = 0 + if self.rect.right > SCREEN_WIDTH: + self.rect.right = SCREEN_WIDTH + if self.rect.top <= 0: + self.rect.top = 0 + if self.rect.bottom >= SCREEN_HEIGHT: + self.rect.bottom = SCREEN_HEIGHT diff --git a/5. spraitu_atteli/settings.py b/5. spraitu_atteli/settings.py new file mode 100644 index 0000000..71e30e2 --- /dev/null +++ b/5. spraitu_atteli/settings.py @@ -0,0 +1,3 @@ +# Define constants for the screen width and height +SCREEN_WIDTH = 800 +SCREEN_HEIGHT = 600 \ No newline at end of file diff --git a/sprites/bat.png b/sprites/bat.png new file mode 100644 index 0000000000000000000000000000000000000000..3cf611a532e8b164481dafe9f6ff7ea8534a9a41 GIT binary patch literal 632 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGx) z>Fdh=gjtTATdO;L{RN=VH%}MG5Rc<;ryLYLq#(e`K0lo60-HtyTgHKTx(7rYm=`vP zG_W6F+00V(@riwF>(4juq8Gh5aqN?+X6FA}&Ud9cCY{~NtA3?E>892-F|T8>t$C>x zVUa7u&RzfOnHb(O=_AvuQ)(Q&BGnHJB|pha>pv=(IQzxtyQ!h;cS~N0TypC0PfHCk z-7gzjLXTG*Ul98v!sBMivpsIi+$TR-&N#{%cVN;()%NLvWw%`#qzleJtlYsr+u7`z+T{sH)A*Ln z@%1P>>}s;*U+@24ui2}Zl`n=&Pk(mmJ1_+5N?apKlJj$OQ}ap~oQqNuOHxx5k}4H^ z^E0!3Q*&|>GZZv3N=gc>^!0OrLb+fez5JqdO)j6zxXJ=ifO5I>b zU1L21E|>iByqx^R6orzE%wmPaycC7p{GwEaw4(f61^1SU1Ng~19K}wLn~ubZ36=<1B2olinb^ka`RI%(<*Um UU}~M&2-Lvf>FVdQ&MBb@0A8r$c>n+a literal 0 HcmV?d00001 diff --git a/sprites/jetfighter.png b/sprites/jetfighter.png new file mode 100644 index 0000000000000000000000000000000000000000..cc48516673b48e459d168671fb4fcddbe65cc614 GIT binary patch literal 17471 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 Re}e!3002ovPDHLkV1l!LfCm5o literal 0 HcmV?d00001