diff options
author | James Simmons <jim@olpc2.simmons> | 2010-03-02 01:11:05 (GMT) |
---|---|---|
committer | James Simmons <jim@olpc2.simmons> | 2010-03-02 01:11:05 (GMT) |
commit | 9e4184004402ec8e20c5abf08e65ab00e6ee3902 (patch) | |
tree | 3e157044774b42801f89eb30455789fae1983eda | |
parent | 6499c843bd608004fa3b5fe437dbd56a8b23310c (diff) |
polish up demoiselle
-rwxr-xr-x | demoiselle.py | 75 |
1 files changed, 45 insertions, 30 deletions
diff --git a/demoiselle.py b/demoiselle.py index 8afa117..c5b822d 100755 --- a/demoiselle.py +++ b/demoiselle.py @@ -23,15 +23,16 @@ import pygame import math import sys -from pygame.locals import * class Demoiselle: + "This is a simple demonstration of using PyGame \ + sprites and collision detection." def __init__(self): self.background = pygame.image.load('sky.jpg') self.screen = pygame.display.get_surface() - self.screen.blit(self.background, (0,0)) + self.screen.blit(self.background, (0, 0)) self.clock = pygame.time.Clock() - self.paused = False + self.running = True gliders = [ GliderSprite((200, 200)), @@ -39,16 +40,16 @@ class Demoiselle: GliderSprite((200, 600)), GliderSprite((800, 600)), ] - self. glider_group = pygame.sprite.RenderPlain(*gliders) + self. glider_group = pygame.sprite.RenderPlain(gliders) def run(self): + "This method processes PyGame messages" rect = self.screen.get_rect() airplane = AirplaneSprite('demoiselle.png', rect.center) airplane_sprite = pygame.sprite.RenderPlain(airplane) - self.running = True while self.running: - deltat = self.clock.tick(30) + self.clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: @@ -56,30 +57,37 @@ class Demoiselle: return elif event.type == pygame.VIDEORESIZE: pygame.display.set_mode(event.size, pygame.RESIZABLE) - self.screen.blit(self.background, (0,0)) + self.screen.blit(self.background, (0, 0)) if not hasattr(event, 'key'): continue - down = event.type == KEYDOWN - if event.key == K_DOWN or event.key == K_KP2: + down = event.type == pygame.KEYDOWN + if event.key == pygame.K_DOWN or \ + event.key == pygame.K_KP2: airplane.joystick_back = down * 5 - elif event.key == K_UP or event.key == K_KP8: + elif event.key == pygame.K_UP or \ + event.key == pygame.K_KP8: airplane.joystick_forward = down * -5 - elif event.key == K_EQUALS or event.key == K_KP_PLUS: + elif event.key == pygame.K_EQUALS or \ + event.key == pygame.K_KP_PLUS: airplane.throttle_up = down * 2 - elif event.key == K_MINUS or event.key == K_KP_MINUS: + elif event.key == pygame.K_MINUS or \ + event.key == pygame.K_KP_MINUS: airplane.throttle_down = down * -2 self.glider_group.clear(self.screen, self.background) airplane_sprite.clear(self.screen, self.background) - collisions = pygame.sprite.spritecollide(airplane, self.glider_group, False) + collisions = pygame.sprite.spritecollide(airplane, \ + self.glider_group, False) self.glider_group.update(collisions) self.glider_group.draw(self.screen) - airplane_sprite.update(deltat) + airplane_sprite.update() airplane_sprite.draw(self.screen) pygame.display.flip() class AirplaneSprite(pygame.sprite.Sprite): + "This class represents an airplane, the Demoiselle \ + created by Alberto Santos-Dumont" MAX_FORWARD_SPEED = 10 MIN_FORWARD_SPEED = 1 ACCELERATION = 2 @@ -92,37 +100,42 @@ class AirplaneSprite(pygame.sprite.Sprite): self.rect.center = self.position self.speed = 1 self.direction = 0 - self.joystick_back = self.joystick_forward = self.throttle_down = self.throttle_up = 0 + self.joystick_back = self.joystick_forward = \ + self.throttle_down = self.throttle_up = 0 - def update(self, deltat): + def update(self): + "This method redraws the airplane in response\ + to events." self.speed += (self.throttle_up + self.throttle_down) if self.speed > self.MAX_FORWARD_SPEED: self.speed = self.MAX_FORWARD_SPEED if self.speed < self.MIN_FORWARD_SPEED: self.speed = self.MIN_FORWARD_SPEED self.direction += (self.joystick_forward + self.joystick_back) - x, y = self.position + x_coord, y_coord = self.position rad = self.direction * math.pi / 180 - x += -self.speed * math.cos(rad) - y += -self.speed * math.sin(rad) + x_coord += -self.speed * math.cos(rad) + y_coord += -self.speed * math.sin(rad) screen = pygame.display.get_surface() - if y < 0: - y = screen.get_height() + if y_coord < 0: + y_coord = screen.get_height() - if x < 0: - x = screen.get_width() + if x_coord < 0: + x_coord = screen.get_width() - if x > screen.get_width(): - x = 0 + if x_coord > screen.get_width(): + x_coord = 0 - if y > screen.get_height(): - y = 0 - self.position = (x, y) + if y_coord > screen.get_height(): + y_coord = 0 + self.position = (x_coord, y_coord) self.image = pygame.transform.rotate(self.src_image, -self.direction) self.rect = self.image.get_rect() self.rect.center = self.position class GliderSprite(pygame.sprite.Sprite): + "This class represents an individual hang glider as developed\ + by Otto Lilienthal." def __init__(self, position): pygame.sprite.Sprite.__init__(self) self.normal = pygame.image.load('glider_normal.png') @@ -131,14 +144,16 @@ class GliderSprite(pygame.sprite.Sprite): self.image = self.normal self.hit = pygame.image.load('glider_hit.png') def update(self, hit_list): + "This method redraws the glider when it collides\ + with the airplane and when it is no longer \ + colliding with the airplane." if self in hit_list: self.image = self.hit else: self.image = self.normal -# This function is called when the game is run directly from the command line: -# ./demoiselle.py def main(): + "This function is called when the game is run from the command line" pygame.init() pygame.display.set_mode((0, 0), pygame.RESIZABLE) game = Demoiselle() |