changeset 0:f9b4d22a39f0

Simple walking and jumping
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Thu, 16 Feb 2012 22:28:42 +0100
parents
children 807e74767ddd
files ziew.png ziew.py
diffstat 2 files changed, 82 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
Binary file ziew.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ziew.py	Thu Feb 16 22:28:42 2012 +0100
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import pygame
+from pygame import locals as pg
+
+def load_tiles(filename, width, height):
+    image = pygame.image.load(filename).convert()
+    image_width, image_height = image.get_size()
+    tiles = []
+    for y in range(image_height/height):
+        for x in range(image_width/width):
+            rect = (x * width, y * height, width, height)
+            tiles.append(image.subsurface(rect))
+    return tiles
+
+
+class PlayerCharacter(pygame.sprite.Sprite):
+
+    frames = [0, 0, 1, 1, 0, 0, 2, 2]
+
+    def __init__(self):
+        super(PlayerCharacter, self).__init__()
+        self.images = load_tiles('ziew.png', 64, 64)
+        self.image = self.images[0]
+        self.rect = self.image.get_rect()
+        self.frame = 0
+        self.dx = 3
+        self.dy = 0
+
+    def update(self):
+        if self.dx:
+            self.frame = (self.frame + 1) % len(self.frames)
+        else:
+            self.frame = 0
+        if self.dy:
+            frame = 2
+        else:
+            frame = self.frames[self.frame]
+        if self.dx >= 0:
+            frame += 3
+        self.dy += 1
+        self.image = self.images[frame]
+        self.rect.move_ip(self.dx, self.dy)
+        if self.rect.bottom > 480:
+            self.dy = 0
+            self.rect.bottom = 480
+
+    def jump(self):
+        if self.dy != 0:
+            return
+        self.dy = -16
+
+
+if __name__ == '__main__':
+    pygame.display.init()
+    screen = pygame.display.set_mode((640, 480))
+    clock = pygame.time.Clock()
+    game_over = False
+    background = pygame.Surface(screen.get_size())
+    sprites = pygame.sprite.RenderUpdates()
+    pc = PlayerCharacter()
+    sprites.add(pc)
+    while not game_over:
+        sprites.clear(screen, background)
+        sprites.draw(screen)
+        pygame.display.flip()
+        sprites.update()
+        clock.tick(20)
+        keys = pygame.key.get_pressed()
+        if keys[pg.K_UP]:
+            pc.jump()
+        if keys[pg.K_RIGHT]:
+            pc.dx = 4
+        elif keys[pg.K_LEFT]:
+            pc.dx = -4
+        else:
+            pc.dx = 0
+        for event in pygame.event.get():
+            if event.type == pg.QUIT or (event.type == pg.KEYDOWN and
+                                         event.key == pg.K_ESCAPE):
+                game_over = True