Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| ef:pygame:2024:gruppenseiten:gruppe5:start [2025/02/02 14:53] – baechlern | ef:pygame:2024:gruppenseiten:gruppe5:start [2025/02/02 21:41] (aktuell) – baechlern | ||
|---|---|---|---|
| Zeile 4: | Zeile 4: | ||
| Ein Spiel bei dem man so zu sagen nach vorne fährt und über lücken springen muss \\ der spieler charakter ist ein mexikaner auf einem velo \\ | Ein Spiel bei dem man so zu sagen nach vorne fährt und über lücken springen muss \\ der spieler charakter ist ein mexikaner auf einem velo \\ | ||
| - | \\ Erweiterungen: | + | \\ Erweiterungen: |
| - | \\ Dokumentation: \\ Di. 3.12.2024: \\ - Eine Zeichnung vom Mexikaner auf dem Velo gemacht und eingefügt \\ - Der Mexikaner kann springen mit abbremsen \\ \\ Di. 10.12.2024 \\ - Ein Boden gemacht mit dem der Mexikaner kollidieren kann -> wurde entfernt \\ - Ein Kaktus Hindernis erstellt \\ \\ Di, 17.12.2024 \\ - Game Over Menu hinzugefügt \\ - Hintergrund erstellt \\ - Sprites für den Mexikaner gemacht \\ {{: | + | === Umfang fertiges Projekt === |
| + | - Das Spiel hat ein Main Menu bei dem man das Spiel starten oder beenden kann \\ | ||
| + | - Das Spiel hat 2 Game Modes, die man beim Start auswählen kann \\ | ||
| + | - 1. Game Modus: Verschiedene Kakteen kommen auf den Spieler zu, der über die Kakteen springen muss. Die Kakteen werden mit der Zeit schneller | ||
| + | - 2. Game Modus: Es hat kleine Plattformen und der Spieler muss so hoch wie möglich kommen \\ | ||
| + | - Wie gut man ist, wird durch ein Score System angezeigt \\ | ||
| + | - Das Spiel hat Musik \\ | ||
| + | - Das Spiel ist mit Escape pausierbar \\ | ||
| + | - Wenn man stirbt, hat man die Option, das Spiel zu beenden oder noch einmal zu versuchen \\ \\ | ||
| + | |||
| + | === Dokumentation === | ||
| + | Di. 3.12.2024: \\ - Eine Zeichnung vom Mexikaner auf dem Velo gemacht und eingefügt \\ - Der Mexikaner kann springen mit abbremsen \\ \\ Di. 10.12.2024 \\ - Ein Boden gemacht mit dem der Mexikaner kollidieren kann -> wurde entfernt \\ - Ein Kaktus Hindernis erstellt \\ \\ Di, 17.12.2024 \\ - Game Over Menu hinzugefügt \\ - Hintergrund erstellt \\ - Sprites für den Mexikaner gemacht \\ {{: | ||
| + | |||
| + | ==== ABGABE ==== | ||
| + | |||
| + | === Ordner === | ||
| + | {{nicole_-_el_mexicano_y_su_bicicleta.zip}} \\ \\ | ||
| + | |||
| + | === Quellen === | ||
| + | (Für genauere Details siehe '00 READ ME.txt' | ||
| + | Alle visuellen Assets wurden von mir gemacht, mit einigen Hilfen von heruntergeladenen Schriften \\ | ||
| + | Audio ist von YouTube \\ | ||
| + | Code wurde von mir gemacht mit einigen Tutorials (im txt Dokument '00 READ ME.txt' | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | === Code === | ||
| + | <code python> import pygame, sys | ||
| + | from pygame.locals import * | ||
| + | import random | ||
| + | |||
| + | pygame.init() | ||
| + | |||
| + | FPS = 60 | ||
| + | FramePerSec = pygame.time.Clock() | ||
| + | |||
| + | BLACK = (0, 0, 0) | ||
| + | WHITE = (255, 255, 255) | ||
| + | YELLOW = (255, 204, 0) | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # GAME MODES / GAME STATES / OTHER STUFF IN THAT DIRECTION | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | # game modes | ||
| + | MAIN_MENU : bool = True | ||
| + | DOODLE_JUMP : bool = False | ||
| + | GOOGLE_DINO : bool = False | ||
| + | |||
| + | HOME_SCREEN : bool = True | ||
| + | GAME_SELECTION : bool = False | ||
| + | |||
| + | # game states | ||
| + | GAME_RUNNING : bool = False | ||
| + | GAME_PAUSED : bool = False | ||
| + | GAME_OVER : bool = False | ||
| + | RESTARTING : bool = False | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # OTHER VARS | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | # Screen information | ||
| + | RES : tuple = 1100, 619 | ||
| + | |||
| + | # Game related | ||
| + | start_counter : int = 0 | ||
| + | stop_counter : bool = False | ||
| + | dino_is_scrolling : bool = False | ||
| + | scrollable : bool = True | ||
| + | IMMORTAL : bool = False | ||
| + | reset_player : bool = False | ||
| + | SCORE : int = 0 | ||
| + | |||
| + | # dino specific | ||
| + | cactus_type : int = 0 | ||
| + | |||
| + | # Velocities | ||
| + | JUMP_SPEED : int = 20 | ||
| + | FALL_SPEED : int = 2 | ||
| + | DOODLE_BASE_TILE_SPEED : float = 15.0 | ||
| + | |||
| + | #Setting up Fonts | ||
| + | font_score_in_game = pygame.font.SysFont(" | ||
| + | font_score_game_over = pygame.font.SysFont(" | ||
| + | font_distance = font_score_in_game.render(" | ||
| + | font_score_str = font_score_game_over.render(" | ||
| + | font_restart_game = font_score_game_over.render(" | ||
| + | |||
| + | # setting up images | ||
| + | background_dino = pygame.image.load(" | ||
| + | background_doodle = pygame.image.load(" | ||
| + | background_dino_static = pygame.image.load(" | ||
| + | pause_screen = pygame.image.load(" | ||
| + | game_over_font = pygame.image.load(" | ||
| + | title_img = pygame.image.load(" | ||
| + | title_bg = pygame.image.load(" | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # MUSIC AND OTHER FUNCS | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | def play_music(): | ||
| + | pygame.mixer.music.load(" | ||
| + | pygame.mixer.music.play(-1) | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # BASIC GAME SETUP | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | DISPLAYSURF = pygame.display.set_mode(RES) | ||
| + | DISPLAYSURF.fill(WHITE) | ||
| + | pygame.display.set_caption(" | ||
| + | |||
| + | def load_image(name): | ||
| + | image = pygame.image.load(name) | ||
| + | return image | ||
| + | |||
| + | # | ||
| + | # CLASSES: BUTTON | ||
| + | # | ||
| + | |||
| + | button_entities = [] | ||
| + | button_entities_selection = [] | ||
| + | button_entities_in_game = [] | ||
| + | |||
| + | class Button(): | ||
| + | def __init__(self, | ||
| + | |||
| + | self.on_click_function = on_click_function | ||
| + | self.one_press = ONE_PRESS | ||
| + | |||
| + | self.sprites = [] | ||
| + | self.sprites.append(load_image(SPRITE_NORMAL)) | ||
| + | self.sprites.append(load_image(SPRITE_HOVER)) | ||
| + | self.sprites.append(load_image(SPRITE_PRESSED)) | ||
| + | |||
| + | self.index = 0 | ||
| + | self.image = self.sprites[self.index] | ||
| + | self.rect = self.image.get_rect() | ||
| + | |||
| + | self.rect.center = (POS_X_Y) | ||
| + | |||
| + | self.already_pressed : bool = False | ||
| + | if LIST_NUMBER == 1: | ||
| + | button_entities.append(self) | ||
| + | if LIST_NUMBER == 2: | ||
| + | button_entities_selection.append(self) | ||
| + | if LIST_NUMBER == 3: | ||
| + | button_entities_in_game.append(self) | ||
| + | |||
| + | |||
| + | def process(self): | ||
| + | self.image = self.sprites[self.index] | ||
| + | |||
| + | mousePos = pygame.mouse.get_pos() | ||
| + | if self.rect.collidepoint(mousePos): | ||
| + | self.index = 1 | ||
| + | if pygame.mouse.get_pressed(num_buttons=3)[0]: | ||
| + | self.index = 2 | ||
| + | if self.one_press: | ||
| + | self.on_click_function() | ||
| + | |||
| + | elif not self.already_pressed: | ||
| + | self.on_click_function() | ||
| + | self.already_pressed = True | ||
| + | |||
| + | else: | ||
| + | self.already_pressed = False | ||
| + | else: | ||
| + | self.index = 0 | ||
| + | |||
| + | def exit_button_func(): | ||
| + | pygame.quit() | ||
| + | sys.exit() | ||
| + | |||
| + | def exit_game_button_func(): | ||
| + | global GAME_RUNNING | ||
| + | global GAME_OVER | ||
| + | global MAIN_MENU | ||
| + | global GOOGLE_DINO | ||
| + | global DOODLE_JUMP | ||
| + | global HOME_SCREEN | ||
| + | global GAME_SELECTION | ||
| + | global RESTARTING | ||
| + | |||
| + | RESTARTING = True | ||
| + | GAME_OVER = False | ||
| + | GAME_RUNNING = False | ||
| + | GOOGLE_DINO = False | ||
| + | DOODLE_JUMP = False | ||
| + | MAIN_MENU = True | ||
| + | GAME_SELECTION = False | ||
| + | HOME_SCREEN = True | ||
| + | |||
| + | |||
| + | def start_button_func(): | ||
| + | global HOME_SCREEN | ||
| + | global GAME_SELECTION | ||
| + | |||
| + | HOME_SCREEN = False | ||
| + | GAME_SELECTION = True | ||
| + | |||
| + | def doodle_game_mode_func(): | ||
| + | global HOME_SCREEN | ||
| + | global GAME_SELECTION | ||
| + | global GAME_RUNNING | ||
| + | global MAIN_MENU | ||
| + | global GOOGLE_DINO | ||
| + | global DOODLE_JUMP | ||
| + | global RESTARTING | ||
| + | |||
| + | RESTARTING = True | ||
| + | HOME_SCREEN = True | ||
| + | GAME_SELECTION = False | ||
| + | MAIN_MENU = False | ||
| + | GAME_RUNNING = True | ||
| + | GOOGLE_DINO = False | ||
| + | DOODLE_JUMP = True | ||
| + | |||
| + | def dino_game_mode_func(): | ||
| + | global HOME_SCREEN | ||
| + | global GAME_SELECTION | ||
| + | global GAME_RUNNING | ||
| + | global MAIN_MENU | ||
| + | global GOOGLE_DINO | ||
| + | global DOODLE_JUMP | ||
| + | global RESTARTING | ||
| + | |||
| + | RESTARTING = True | ||
| + | HOME_SCREEN = True | ||
| + | GAME_SELECTION = False | ||
| + | MAIN_MENU = False | ||
| + | GAME_RUNNING = True | ||
| + | GOOGLE_DINO = True | ||
| + | DOODLE_JUMP = False | ||
| + | |||
| + | |||
| + | B_EXIT = Button((550, | ||
| + | B_START = Button((550, | ||
| + | B_EXIT_GAME = Button((323, | ||
| + | B_DOODLE = Button((800, | ||
| + | B_DINO = Button((300, | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # CLASSES: SCROLLABLE ELEMENTS | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | cactus_objects = [] | ||
| + | cactus_objects_hazards = [] | ||
| + | |||
| + | class Scrollable_Elements(pygame.sprite.Sprite): | ||
| + | def __init__(self, | ||
| + | super().__init__() | ||
| + | self.image = pygame.image.load(SPRITE_NAME) | ||
| + | self.rect = self.image.get_rect() | ||
| + | self.rect.center = (POS_X_Y) | ||
| + | if HAZARD == True: | ||
| + | self.rect.left = (1100) | ||
| + | cactus_objects_hazards.append(self) | ||
| + | else: | ||
| + | cactus_objects.append(self) | ||
| + | self.counter = 0 | ||
| + | self.scroll_speed : float = SPEED | ||
| + | self.starting_speed : float = SPEED | ||
| + | self.sprite : str = SPRITE_NAME | ||
| + | self.is_hazard : bool = HAZARD | ||
| + | self.wait_time = WAIT_TIME | ||
| + | |||
| + | def handle_reset_dino(self): | ||
| + | global SCORE | ||
| + | self.scroll_speed = self.starting_speed | ||
| + | SCORE = 0 | ||
| + | if self.is_hazard == True: | ||
| + | self.rect.left = 1100 | ||
| + | |||
| + | def handle_scroll_h(self): | ||
| + | global scrollable | ||
| + | self.counter += 1 | ||
| + | if self.counter >= self.wait_time: | ||
| + | self.counter = 0 | ||
| + | self.rect.move_ip(-self.scroll_speed, | ||
| + | if self.rect.right < 0: | ||
| + | self.rect.left = (1100) | ||
| + | scrollable = True | ||
| + | if self.is_hazard == True: | ||
| + | if self.scroll_speed < 20.0: | ||
| + | self.scroll_speed += 0.5 | ||
| + | print(self.scroll_speed) | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # CLASSES: DOODLE TILES | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | tile_moving_down : bool = False | ||
| + | tile_moving_up : bool = True | ||
| + | tile_colliding : bool = False | ||
| + | player_fall : bool = False | ||
| + | |||
| + | off_screen_counter : int = 0 | ||
| + | |||
| + | doodle_objects = [] | ||
| + | |||
| + | class Doodle_Tiles(pygame.sprite.Sprite): | ||
| + | def __init__(self, | ||
| + | super().__init__() | ||
| + | self.image = pygame.image.load(" | ||
| + | self.rect = self.image.get_rect() | ||
| + | self.rect.center = (POS_X_Y) | ||
| + | self.name : str = O_NAME | ||
| + | self.interactable : bool = COLLISION_TILE | ||
| + | if COLLISION_TILE == True: | ||
| + | doodle_objects.append(self) | ||
| + | self.jump_speed : float = SPEED | ||
| + | self.counter : int = 0 | ||
| + | |||
| + | def reset_speed(self): | ||
| + | self.jump_speed = 15.0 | ||
| + | |||
| + | def handle_move_tiles(self): | ||
| + | global tile_moving_down | ||
| + | global tile_moving_up | ||
| + | global tile_colliding | ||
| + | global off_screen_counter | ||
| + | global player_fall | ||
| + | global SCORE | ||
| + | |||
| + | if tile_moving_up == True: | ||
| + | tile_moving_down = False | ||
| + | self.rect.move_ip(0, | ||
| + | off_screen_counter += 1 | ||
| + | if self.jump_speed <= 20.0: | ||
| + | self.jump_speed *= 1.2 | ||
| + | |||
| + | if tile_moving_down == True: | ||
| + | if self.jump_speed > 1: | ||
| + | self.rect.move_ip(0, | ||
| + | self.jump_speed *= 0.93 | ||
| + | if self.jump_speed < 1: | ||
| + | self.jump_speed = 1 | ||
| + | tile_moving_up = True | ||
| + | tile_moving_down = False | ||
| + | |||
| + | if self.rect.top > 700: | ||
| + | self.rect.center = (550 + random.randint(-550, | ||
| + | SCORE += 5 | ||
| + | |||
| + | if off_screen_counter >= 550: | ||
| + | player_fall = True | ||
| + | |||
| + | def handle_reset_doodle(self): | ||
| + | if self.name == " | ||
| + | self.rect.center = (300, 500) | ||
| + | if self.name == " | ||
| + | self.rect.center = (800, 400) | ||
| + | if self.name == " | ||
| + | self.rect.center = (500, 300) | ||
| + | if self.name == " | ||
| + | self.rect.center = (700, 200) | ||
| + | if self.name == " | ||
| + | self.rect.center = (400, 100) | ||
| + | if self.name == " | ||
| + | self.rect.center = (300, 0) | ||
| + | if self.name == " | ||
| + | self.rect.center = (0, 600) | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # CLASSES: PLAYER | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | # states and what not | ||
| + | IS_JUMPING : bool = False | ||
| + | MOVE_UP : bool = False | ||
| + | MOVE_DOWN : bool = False | ||
| + | |||
| + | stop_game : bool = False | ||
| + | |||
| + | player = [] | ||
| + | |||
| + | class Player(pygame.sprite.Sprite): | ||
| + | def __init__(self): | ||
| + | super().__init__() | ||
| + | global GOOGLE_DINO | ||
| + | global DOODLE_JUMP | ||
| + | |||
| + | self.sprite = [] | ||
| + | self.sprite.append(load_image(" | ||
| + | self.sprite.append(load_image(" | ||
| + | self.sprite.append(load_image(" | ||
| + | self.sprite.append(load_image(" | ||
| + | self.counter = 0 | ||
| + | self.score_countdown = 0 | ||
| + | |||
| + | self.index = 0 | ||
| + | self.image = self.sprite[self.index] | ||
| + | self.rect = self.image.get_rect() | ||
| + | if GOOGLE_DINO == True: | ||
| + | self.hitbox = pygame.Rect(1, | ||
| + | self.hitbox.center = (-100, -100) | ||
| + | self.rect.center = (160, 380) | ||
| + | if DOODLE_JUMP == True: | ||
| + | self.hitbox = pygame.Rect(1, | ||
| + | self.rect.center = (500, 350) | ||
| + | |||
| + | player.append(self) | ||
| + | |||
| + | def handle_reset(self): | ||
| + | global GOOGLE_DINO | ||
| + | global DOODLE_JUMP | ||
| + | |||
| + | if GOOGLE_DINO == True: | ||
| + | self.rect.center = (160, 380) | ||
| + | if DOODLE_JUMP == True: | ||
| + | self.rect.center = (500, 350) | ||
| + | |||
| + | def handle_jump(self): | ||
| + | global reset_player | ||
| + | global IS_JUMPING | ||
| + | global JUMP_SPEED | ||
| + | global FALL_SPEED | ||
| + | if IS_JUMPING == False: | ||
| + | pressed_keys = pygame.key.get_pressed() | ||
| + | if pressed_keys [K_SPACE]: | ||
| + | if JUMP_SPEED > 1: | ||
| + | self.rect.move_ip(0, | ||
| + | JUMP_SPEED *= 0.93 | ||
| + | if JUMP_SPEED < 1: | ||
| + | IS_JUMPING = True | ||
| + | else: | ||
| + | IS_JUMPING = True | ||
| + | else: | ||
| + | if self.rect.bottom < 540: | ||
| + | self.rect.move_ip(0, | ||
| + | FALL_SPEED *= 1.1 | ||
| + | if self.rect.bottom > 539: | ||
| + | self.rect.center = (160, 380) | ||
| + | IS_JUMPING = False | ||
| + | JUMP_SPEED = 20 | ||
| + | FALL_SPEED = 2 | ||
| + | |||
| + | def handle_left_right(self, | ||
| + | pressed_keys = pygame.key.get_pressed() | ||
| + | if pressed_keys [K_a]: | ||
| + | self.rect.move_ip(-MOVE_SPEED, | ||
| + | if self.rect.right < (0): | ||
| + | self.rect.left = (1100) | ||
| + | if pressed_keys [K_d]: | ||
| + | self.rect.move_ip(MOVE_SPEED , 0) | ||
| + | if self.rect.left > (1100): | ||
| + | self.rect.right = (0) | ||
| + | |||
| + | def handle_animation(self): | ||
| + | self.counter += 1 | ||
| + | if self.counter >= 4: | ||
| + | self.counter = 0 | ||
| + | self.index += 1 | ||
| + | if self.index >= len(self.sprite): | ||
| + | self.index = 0 | ||
| + | self.image = self.sprite[self.index] | ||
| + | |||
| + | def handle_doodle_game_over(self): | ||
| + | global stop_game | ||
| + | self.rect.move_ip(0, | ||
| + | if self.rect.top >= 1200: | ||
| + | stop_game = True | ||
| + | |||
| + | def handle_score_dino(self): | ||
| + | global SCORE | ||
| + | self.score_countdown += 1 | ||
| + | if self.score_countdown >= 7: | ||
| + | SCORE += 1 | ||
| + | self.score_countdown = 0 | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # CREATING OBJECTS | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | HBG3_1 = Scrollable_Elements((1100, | ||
| + | HBG3_2 = Scrollable_Elements((1800, | ||
| + | HBG2_1 = Scrollable_Elements((1100, | ||
| + | HBG2_2 = Scrollable_Elements((1400, | ||
| + | HBG1_1 = Scrollable_Elements((1100, | ||
| + | BG_CLOUDS1 = Scrollable_Elements((550, | ||
| + | BG_CLOUDS2 = Scrollable_Elements((1650, | ||
| + | P1 = Player() | ||
| + | C1 = Scrollable_Elements((1100, | ||
| + | C2 = Scrollable_Elements((1100, | ||
| + | C3 = Scrollable_Elements((1100, | ||
| + | C4 = Scrollable_Elements((1100, | ||
| + | T1 = Doodle_Tiles((300, | ||
| + | T2 = Doodle_Tiles((800, | ||
| + | T3 = Doodle_Tiles((500, | ||
| + | T4 = Doodle_Tiles((700, | ||
| + | T5 = Doodle_Tiles((100, | ||
| + | T6 = Doodle_Tiles((100, | ||
| + | T7 = Doodle_Tiles((100, | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # GROUPS | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | players = pygame.sprite.Group() | ||
| + | players.add(P1) | ||
| + | |||
| + | # collision group | ||
| + | hazards = pygame.sprite.Group() | ||
| + | hazards.add(C1) | ||
| + | hazards.add(C2) | ||
| + | hazards.add(C3) | ||
| + | hazards.add(C4) | ||
| + | |||
| + | # draw group | ||
| + | bg_objects = pygame.sprite.Group() | ||
| + | bg_objects.add(BG_CLOUDS1) | ||
| + | bg_objects.add(BG_CLOUDS2) | ||
| + | |||
| + | # draw and collision group | ||
| + | doodle_tile = pygame.sprite.Group() | ||
| + | doodle_tile.add(T1) | ||
| + | doodle_tile.add(T2) | ||
| + | doodle_tile.add(T3) | ||
| + | doodle_tile.add(T4) | ||
| + | doodle_tile.add(T5) | ||
| + | doodle_tile.add(T6) | ||
| + | doodle_tile.add(T7) | ||
| + | |||
| + | # draw group | ||
| + | main_menu_background = pygame.sprite.Group() | ||
| + | main_menu_background.add(HBG3_1) | ||
| + | main_menu_background.add(HBG3_2) | ||
| + | main_menu_background.add(HBG2_1) | ||
| + | main_menu_background.add(HBG2_2) | ||
| + | main_menu_background.add(HBG1_1) | ||
| + | |||
| + | # draw group | ||
| + | dino_sprites = pygame.sprite.Group() | ||
| + | dino_sprites.add(HBG3_1) | ||
| + | dino_sprites.add(HBG3_2) | ||
| + | dino_sprites.add(HBG2_1) | ||
| + | dino_sprites.add(HBG2_2) | ||
| + | dino_sprites.add(HBG1_1) | ||
| + | dino_sprites.add(C1) | ||
| + | dino_sprites.add(C2) | ||
| + | dino_sprites.add(C3) | ||
| + | dino_sprites.add(C4) | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # GENERAL FUNCS | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | def reset_doodle_speed_all(): | ||
| + | for entity in doodle_objects: | ||
| + | entity.reset_speed() | ||
| + | |||
| + | if RESTARTING == True: | ||
| + | for entity in doodle_objects: | ||
| + | entity.handle_reset_doodle() | ||
| + | |||
| + | def handle_collision_detection(): | ||
| + | global tile_colliding | ||
| + | global tile_moving_down | ||
| + | global tile_moving_up | ||
| + | global off_screen_counter | ||
| + | |||
| + | if tile_moving_up == True: | ||
| + | if pygame.sprite.spritecollideany(P1, | ||
| + | tile_colliding = True | ||
| + | reset_doodle_speed_all() | ||
| + | tile_moving_down = True | ||
| + | tile_moving_up = False | ||
| + | off_screen_counter = 0 | ||
| + | |||
| + | def handle_invulnerability(): | ||
| + | global IMMORTAL | ||
| + | pressed_keys = pygame.key.get_pressed() | ||
| + | if IMMORTAL == False: | ||
| + | if pressed_keys [K_1]: | ||
| + | IMMORTAL = True | ||
| + | print(" | ||
| + | if IMMORTAL == True: | ||
| + | if pressed_keys [K_2]: | ||
| + | IMMORTAL = False | ||
| + | print(" | ||
| + | |||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # GAME PROCESS GENERAL | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | play_music() | ||
| + | while True: | ||
| + | pressed_keys = pygame.key.get_pressed() | ||
| + | handle_invulnerability() | ||
| + | for event in pygame.event.get(): | ||
| + | if event.type == QUIT: | ||
| + | pygame.quit() | ||
| + | sys.exit() | ||
| + | |||
| + | if MAIN_MENU == True: | ||
| + | DISPLAYSURF.blit(background_dino, | ||
| + | for entity in bg_objects: | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | DISPLAYSURF.blit(title_bg, | ||
| + | for entity in cactus_objects: | ||
| + | entity.handle_scroll_h() | ||
| + | for entity in main_menu_background: | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | if HOME_SCREEN == True: | ||
| + | DISPLAYSURF.blit(title_img, | ||
| + | for entity in button_entities: | ||
| + | entity.process() | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | if GAME_SELECTION == True: | ||
| + | for entity in button_entities_selection: | ||
| + | entity.process() | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | |||
| + | if GAME_OVER == True: | ||
| + | font_score_num_game_over = font_score_game_over.render(str(SCORE), | ||
| + | DISPLAYSURF.fill(YELLOW) | ||
| + | DISPLAYSURF.blit(game_over_font, | ||
| + | DISPLAYSURF.blit(font_score_str, | ||
| + | DISPLAYSURF.blit(font_restart_game, | ||
| + | DISPLAYSURF.blit(font_score_num_game_over, | ||
| + | for entity in button_entities_in_game: | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | entity.process() | ||
| + | |||
| + | pygame.display.update() | ||
| + | if pressed_keys [K_r]: | ||
| + | GAME_RUNNING = True | ||
| + | GAME_OVER = False | ||
| + | RESTARTING = True | ||
| + | |||
| + | if GAME_PAUSED == True: | ||
| + | GAME_RUNNING = False | ||
| + | DISPLAYSURF.blit(pause_screen, | ||
| + | if pressed_keys [K_e]: | ||
| + | GAME_PAUSED = False | ||
| + | GAME_RUNNING = True | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # GAME RUNNING | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | if GAME_RUNNING == True: | ||
| + | if pressed_keys [K_ESCAPE]: | ||
| + | GAME_PAUSED = True | ||
| + | |||
| + | if RESTARTING == True: | ||
| + | start_counter = 0 | ||
| + | stop_counter = False | ||
| + | dino_is_scrolling = False | ||
| + | scrollable = False | ||
| + | |||
| + | stop_game = False | ||
| + | player_fall = False | ||
| + | off_screen_counter = 0 | ||
| + | SCORE = 0 | ||
| + | P1.handle_reset() | ||
| + | if GOOGLE_DINO == True: | ||
| + | for entity in cactus_objects_hazards: | ||
| + | entity.handle_reset_dino() | ||
| + | |||
| + | if DOODLE_JUMP == True: | ||
| + | reset_doodle_speed_all() | ||
| + | RESTARTING = False | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # DOODLE JUMP GAME | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | if DOODLE_JUMP == True: | ||
| + | score_number = font_score_in_game.render(str(SCORE), | ||
| + | DISPLAYSURF.blit(background_doodle, | ||
| + | for entity in doodle_tile: | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | |||
| + | DISPLAYSURF.blit(score_number, | ||
| + | DISPLAYSURF.blit(font_distance, | ||
| + | handle_collision_detection() | ||
| + | for entity in player: | ||
| + | entity.handle_left_right(15) | ||
| + | entity.handle_animation() | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | |||
| + | for entity in doodle_objects: | ||
| + | entity.handle_move_tiles() | ||
| + | |||
| + | |||
| + | if player_fall == True: | ||
| + | P1.handle_doodle_game_over() | ||
| + | if stop_game == True: | ||
| + | GAME_RUNNING = False | ||
| + | GAME_OVER = True | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # GOOGLE DINO GAME | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | if GOOGLE_DINO == True: | ||
| + | score_number = font_score_in_game.render(str(SCORE), | ||
| + | if scrollable == True: | ||
| + | cactus_type = random.randint(1, | ||
| + | |||
| + | for entity in cactus_objects: | ||
| + | entity.handle_scroll_h() | ||
| + | |||
| + | P1.handle_jump() | ||
| + | P1.handle_score_dino() | ||
| + | |||
| + | if stop_counter == False: | ||
| + | if start_counter < 80: | ||
| + | start_counter += 1 | ||
| + | if start_counter >= 80: | ||
| + | dino_is_scrolling = True | ||
| + | stop_counter = True | ||
| + | scrollable = True | ||
| + | if dino_is_scrolling == True: | ||
| + | if cactus_type == 1: | ||
| + | scrollable = False | ||
| + | C1.handle_scroll_h() | ||
| + | if cactus_type == 2: | ||
| + | scrollable = False | ||
| + | C2.handle_scroll_h() | ||
| + | if cactus_type == 3: | ||
| + | scrollable = False | ||
| + | C3.handle_scroll_h() | ||
| + | if cactus_type == 4: | ||
| + | scrollable = False | ||
| + | C4.handle_scroll_h() | ||
| + | |||
| + | DISPLAYSURF.blit(background_dino, | ||
| + | for entity in bg_objects: | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | DISPLAYSURF.blit(background_dino_static, | ||
| + | for entity in dino_sprites: | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | |||
| + | for entity in players: | ||
| + | DISPLAYSURF.blit(entity.image, | ||
| + | |||
| + | DISPLAYSURF.blit(score_number, | ||
| + | DISPLAYSURF.blit(font_distance, | ||
| + | |||
| + | P1.handle_animation() | ||
| + | if IMMORTAL == False: | ||
| + | if pygame.sprite.spritecollideany(P1, | ||
| + | reset_player = True | ||
| + | GAME_OVER = True | ||
| + | GAME_RUNNING = False | ||
| + | |||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | # -------------------------------------------------------------------------------------------- | ||
| + | |||
| + | pygame.display.update() | ||
| + | FramePerSec.tick(FPS) | ||
| + | |||
| + | # .\virt_env\Scripts\activate </ | ||