Advertisement
Windspar

Example: Image 4 way direction by key.

Jan 11th, 2025
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.97 KB | Gaming | 0 0
  1. import pygame
  2.  
  3. class Scene:
  4.     def __init__(self, control):
  5.         self.control = control
  6.  
  7.     def on_draw(self, surface):
  8.         pass
  9.  
  10.     def on_event(self, event):
  11.         pass
  12.  
  13.     def on_update(self, delta):
  14.         pass
  15.  
  16. class Control:
  17.     def __init__(self, caption, size, flags=0, fps=60):
  18.         pygame.display.set_caption(caption)
  19.         self.display = pygame.display.set_mode(size, flags)
  20.         self.rect = self.display.get_rect()
  21.         self.clock = pygame.time.Clock()
  22.         self.running = True
  23.         self.delta = 0
  24.         self.fps = fps
  25.  
  26.         self.scene = None
  27.  
  28.     def run(self, scene):
  29.         self.scene = scene
  30.         while self.running:
  31.             for event in pygame.event.get():
  32.                 if event.type != pygame.QUIT:
  33.                     self.scene.on_event(event)
  34.                 else:
  35.                     self.running = False
  36.  
  37.             self.scene.on_update(self.delta)
  38.             self.scene.on_draw(self.display)
  39.             pygame.display.flip()
  40.             self.delta = self.clock.tick(self.fps) / 1000
  41.  
  42. class ImageHandler:
  43.     def __init__(self):
  44.         self.frog = self.create_frog((30, 26), 'lawngreen')
  45.  
  46.     def create_frog(self, size, color):
  47.         rect = pygame.Rect((0, 0), size)
  48.         points = rect.midright, rect.bottomleft, rect.topleft
  49.         surface = pygame.Surface(size, pygame.SRCALPHA)
  50.         surface.fill((0, 0, 0, 0))
  51.         pygame.draw.polygon(surface, color, points)
  52.  
  53.         image_right = surface
  54.         image_left = pygame.transform.rotate(surface, 180)
  55.         image_up = pygame.transform.rotate(surface, 90)
  56.         image_down = pygame.transform.rotate(surface, -90)
  57.  
  58.         return {
  59.             pygame.K_RIGHT: image_right,
  60.             pygame.K_d: image_right,
  61.             pygame.K_LEFT: image_left,
  62.             pygame.K_a: image_left,
  63.             pygame.K_UP: image_up,
  64.             pygame.K_w: image_up,
  65.             pygame.K_DOWN: image_down,
  66.             pygame.K_s: image_down
  67.         }
  68.  
  69. class Player:
  70.     def __init__(self, frames, position, anchor):
  71.         self.frames = frames
  72.         self.image = frames[pygame.K_UP]
  73.         self.rect = self.image.get_rect(**{anchor: position})
  74.  
  75.     def draw(self, surface):
  76.         surface.blit(self.image, self.rect)
  77.  
  78.     def keydown(self, key):
  79.         if key in self.frames:
  80.             self.image = self.frames[key]
  81.             self.rect = self.image.get_rect(center=self.rect.center)
  82.  
  83. class Example(Scene):
  84.     def __init__(self, control):
  85.         super().__init__(control)
  86.         self.image = ImageHandler()
  87.         self.player = Player(self.image.frog, self.control.rect.center, 'center')
  88.  
  89.     def on_draw(self, surface):
  90.         surface.fill('black')
  91.         self.player.draw(surface)
  92.  
  93.     def on_event(self, event):
  94.         if event.type == pygame.KEYDOWN:
  95.             self.player.keydown(event.key)
  96.  
  97. pygame.init()
  98. control = Control("Example", (800, 600))
  99. control.run(Example(control))
  100. pygame.quit()
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement