Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Simmons <jim@olpc2.simmons>2010-03-02 01:11:05 (GMT)
committer James Simmons <jim@olpc2.simmons>2010-03-02 01:11:05 (GMT)
commit9e4184004402ec8e20c5abf08e65ab00e6ee3902 (patch)
tree3e157044774b42801f89eb30455789fae1983eda
parent6499c843bd608004fa3b5fe437dbd56a8b23310c (diff)
polish up demoiselle
-rwxr-xr-xdemoiselle.py75
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()