changeset 4:bc3b371cb5c4

shadows and message window
author Radomir Dopieralski <moindev@sheep.art.pl>
date Sat, 23 Aug 2008 02:35:05 +0200
parents 5d282bc9a98c
children 22fd63214aed
files MgOpenModataBold.ttf qq.py shadow.png
diffstat 3 files changed, 55 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
Binary file MgOpenModataBold.ttf has changed
--- a/qq.py	Sat Aug 23 01:21:34 2008 +0200
+++ b/qq.py	Sat Aug 23 02:35:05 2008 +0200
@@ -6,6 +6,7 @@
 
 pygame.init()
 pygame.display.set_mode((360, 240))
+font = pygame.font.Font("MgOpenModataBold.ttf", 11)
 
 # Motion offsets for particular directions
 #     N  E  S   W
@@ -25,6 +26,37 @@
             line.append(image.subsurface((x*width, y*height, width, height)))
     return tiles
 
+class Message:
+    image = pygame.image.load("dialog.png").convert()
+    image.set_alpha(192)
+
+    def __init__(self, text):
+        self.screen = pygame.display.get_surface()
+        self.text = text
+        self.rect = self.image.get_rect()
+        self.rect.midtop = self.screen.get_rect().midtop
+        self.rect.move_ip(0, 8)
+
+    def show(self):
+        self.screen.blit(self.image, self.rect)
+        for lineno, line in enumerate(self.text.split('\n')):
+            image = font.render(line, True, (0xFF, 0xFF, 0xFF))
+            shadow = font.render(line, True, (0x22, 0x22, 0x66))
+            rect = image.get_rect()
+            rect.topleft = self.rect.topleft
+            rect.move_ip(8, 8+lineno*font.get_linesize())
+            shadow_rect = rect.move(2, 2)
+            self.screen.blit(shadow, shadow_rect)
+            self.screen.blit(image, rect)
+        pygame.display.flip()
+        while True:
+            event = pygame.event.wait()
+            if event.type == QUIT:
+                return
+            elif event.type == KEYDOWN:
+                return
+
+
 
 class SortedUpdates(pygame.sprite.RenderUpdates):
     def sprites(self):
@@ -32,6 +64,17 @@
         sprites.sort(lambda a, b: a.depth - b.depth)
         return sprites
 
+class Shadow(pygame.sprite.Sprite):
+    image = pygame.image.load("shadow.png").convert()
+    image.set_alpha(64)
+
+    def __init__(self, sprite):
+        pygame.sprite.Sprite.__init__(self)
+        self.rect = self.image.get_rect()
+        self.sprite = sprite
+
+    def update(self):
+        self.rect.midbottom = self.sprite.rect.midbottom
 
 class Sprite(pygame.sprite.Sprite):
     def __init__(self):
@@ -115,17 +158,22 @@
             except StopIteration:
                 self.animation = None
 
+
 class Game:
     def __init__(self):
         self.screen = pygame.display.get_surface()
         self.pressed_key = None
         self.game_over = False
+        self.shadows = pygame.sprite.RenderUpdates()
         self.sprites = SortedUpdates()
         self.level = Level()
         self.background = self.level.image.copy()
         self.player = Player()
         self.sprites.add(self.player)
-        self.sprites.add(Skeleton())
+        self.shadows.add(Shadow(self.player))
+        skeleton = Skeleton()
+        self.sprites.add(skeleton)
+        self.shadows.add(Shadow(skeleton))
 
     def control(self):
         keys = pygame.key.get_pressed()
@@ -150,11 +198,14 @@
         pygame.display.flip()
         while not self.game_over:
             self.sprites.clear(self.screen, self.background)
+            self.shadows.clear(self.screen, self.background)
             self.sprites.update()
             if self.player.animation is None:
                 self.control()
                 self.player.update()
-            dirty = self.sprites.draw(self.screen)
+            self.shadows.update()
+            dirty = self.shadows.draw(self.screen)
+            dirty += self.sprites.draw(self.screen)
             pygame.display.update(dirty)
             clock.tick(15)
             for event in pygame.event.get():
@@ -163,5 +214,7 @@
                 elif event.type == KEYDOWN:
                     self.pressed_key = event.key
 
+
 if __name__ == "__main__":
     Game().main()
+    Message("Hello\nworld!").show()
Binary file shadow.png has changed