Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # ---------------------------------------------------------------------
- # pygame (simple) template with classes (by furas)
- # ---------------------------------------------------------------------
- import pygame
- #import random
- # === CONSTANTS ===
- BLACK = ( 0, 0, 0)
- WHITE = (255, 255, 255)
- RED = (255, 0, 0)
- GREEN = ( 0, 255, 0)
- BLUE = ( 0, 0, 255)
- SCREEN_WIDTH = 800
- SCREEN_HEIGHT = 600
- BLOCK_SIZE = 50
- # === CLASSES ===
- class StartState():
- def __init__(self, screen):
- self.screen = screen
- self.screen_rect = self.screen.get_rect()
- self.font_30 = pygame.font.SysFont(None, 30)
- self.font_50 = pygame.font.SysFont(None, 50)
- self.text_start = self.font_50.render("START", True, GREEN)
- self.text_start_rect = self.text_start.get_rect()
- # center on screen
- self.text_start_rect.center = self.screen_rect.center
- self.text_press = self.font_30.render("PRESS ANY KEY", True, WHITE)
- self.text_press_rect = self.text_press.get_rect()
- # middle bottom screen
- self.text_press_rect.midbottom = self.screen_rect.midbottom
- def draw(self):
- self.screen.fill(BLACK)
- self.screen.blit(self.text_start, self.text_start_rect)
- self.screen.blit(self.text_press, self.text_press_rect)
- def update(self):
- # TODO: move object, etc. (without drawing)
- pass
- def event_handle(self, event):
- # press any key
- if event.type == pygame.KEYDOWN:
- self.running = False
- def mainloop(self):
- self.clock = pygame.time.Clock()
- self.running = True
- while self.running:
- # --- events ---
- for event in pygame.event.get():
- # --- global events ---
- if event.type == pygame.QUIT:
- self.running = False
- elif event.type == pygame.KEYDOWN:
- if event.key == pygame.K_ESCAPE:
- self.running = False
- # --- local events ---
- self.event_handle(event)
- # --- updates ---
- self.update()
- # --- draws ---
- self.draw()
- pygame.display.flip()
- # --- FPS ---
- self.clock.tick(25)
- return True
- class EndState():
- def __init__(self, screen):
- self.screen = screen
- self.screen_rect = self.screen.get_rect()
- self.font_30 = pygame.font.SysFont(None, 30)
- self.font_50 = pygame.font.SysFont(None, 50)
- self.text = self.font_50.render("END", True, RED)
- self.text_rect = self.text.get_rect()
- # center on screen
- self.text_rect.center = self.screen_rect.center
- self.text_press = self.font_30.render("PRESS ANY KEY", True, WHITE)
- self.text_press_rect = self.text_press.get_rect()
- # middle bottom screen
- self.text_press_rect.midbottom = self.screen_rect.midbottom
- def draw(self):
- self.screen.fill(BLACK)
- self.screen.blit(self.text, self.text_rect)
- self.screen.blit(self.text_press, self.text_press_rect)
- def update(self):
- # TODO: move object, etc. (without drawing)
- pass
- def event_handle(self, event):
- if event.type == pygame.KEYDOWN:
- self.running = False
- def mainloop(self):
- self.clock = pygame.time.Clock()
- self.running = True
- while self.running:
- # --- events ---
- for event in pygame.event.get():
- # --- global events ---
- if event.type == pygame.QUIT:
- self.running = False
- elif event.type == pygame.KEYDOWN:
- if event.key == pygame.K_ESCAPE:
- self.running = False
- # --- local events ---
- self.event_handle(event)
- # --- updates ---
- self.update()
- # --- draws ---
- self.draw()
- pygame.display.flip()
- # --- FPS ---
- self.clock.tick(25)
- return True
- class GameState():
- def __init__(self, screen):
- self.screen = screen
- self.screen_rect = self.screen.get_rect()
- self.player = pygame.Surface((BLOCK_SIZE, BLOCK_SIZE))
- self.player.fill(GREEN)
- self.player_rect = self.player.get_rect()
- self.player_rect.center = self.screen_rect.center
- self.player_move_x = 0
- self.player_move_y = 0
- self.font_30 = pygame.font.SysFont(None, 30)
- self.text_press = self.font_30.render("PRESS 'ESCAPE' TO EXIT", True, WHITE)
- self.text_press_rect = self.text_press.get_rect()
- # middle bottom screen
- self.text_press_rect.midbottom = self.screen_rect.midbottom
- self.text_arrows = self.font_30.render("USE 'ARROWS' TO MOVE OBJECT", True, WHITE)
- self.text_arrows_rect = self.text_arrows.get_rect()
- # middle top screen
- self.text_arrows_rect.midtop = self.screen_rect.midtop
- def draw(self):
- self.screen.fill(BLACK)
- self.screen.blit(self.player, self.player_rect)
- self.screen.blit(self.text_press, self.text_press_rect)
- self.screen.blit(self.text_arrows, self.text_arrows_rect)
- def update(self):
- # --- updates ---
- self.player_rect.x += self.player_move_x
- self.player_rect.y += self.player_move_y
- self.player_rect.clamp_ip(self.screen_rect)
- def event_handle(self, event):
- # --- player events ---
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_LEFT:
- self.player_move_x -= 10
- elif event.key == pygame.K_RIGHT:
- self.player_move_x += 10
- elif event.key == pygame.K_UP:
- self.player_move_y -= 10
- elif event.key == pygame.K_DOWN:
- self.player_move_y += 10
- elif event.type == pygame.KEYUP:
- if event.key == pygame.K_LEFT:
- self.player_move_x += 10
- elif event.key == pygame.K_RIGHT:
- self.player_move_x -= 10
- elif event.key == pygame.K_UP:
- self.player_move_y += 10
- elif event.key == pygame.K_DOWN:
- self.player_move_y -= 10
- def mainloop(self):
- self.clock = pygame.time.Clock()
- self.running = True
- while self.running:
- # --- events ---
- for event in pygame.event.get():
- # --- global events ---
- if event.type == pygame.QUIT:
- self.running = False
- elif event.type == pygame.KEYDOWN:
- if event.key == pygame.K_ESCAPE:
- self.running = False
- # --- local events ---
- self.event_handle(event)
- # --- updates ---
- self.update()
- # --- draws ---
- self.draw()
- pygame.display.flip()
- # --- FPS ---
- self.clock.tick(25)
- return True
- # === FUNCTIONS ===
- # empty
- # === MAIN ===
- # --- init (only once for all classes) ---
- pygame.init()
- screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
- # --- states (almost "finite states machine" [FSM])---
- result = StartState(screen).mainloop()
- if result:
- result = GameState(screen).mainloop()
- if result:
- result = EndState(screen).mainloop()
- # --- the end (only once for all classes) ---
- pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement