<html> <head> <title>~/src/pygame/examples/chimp.py.html</title> <meta name="Generator" content="Vim/6.1"> </head> <body bgcolor="#ffffff" text="#000000"> <pre> <font color="#0000ff">#/usr/bin/env python</font> """ <font color="#ff00ff">This simple example is used for the line-by-line tutorial</font> <font color="#ff00ff">that comes with pygame. It is based on a 'popular' web banner.</font> <font color="#ff00ff">Note there are comments here, but for the full explanation, </font> <font color="#ff00ff">follow along in the tutorial.</font> """ <font color="#0000ff">#Import Modules</font> <font color="#a020f0">import</font> os, pygame <font color="#a020f0">from</font> pygame.locals <font color="#a020f0">import</font> * <font color="#a52a2a"><b>if</b></font> <font color="#a52a2a"><b>not</b></font> pygame.font: <font color="#a52a2a"><b>print</b></font> '<font color="#ff00ff">Warning, fonts disabled</font>' <font color="#a52a2a"><b>if</b></font> <font color="#a52a2a"><b>not</b></font> pygame.mixer: <font color="#a52a2a"><b>print</b></font> '<font color="#ff00ff">Warning, sound disabled</font>' <font color="#0000ff">#functions to create our resources</font> <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">load_image</font>(name, colorkey=None): fullname = os.path.join('<font color="#ff00ff">data</font>', name) <font color="#a52a2a"><b>try</b></font>: image = pygame.image.load(fullname) <font color="#a52a2a"><b>except</b></font> pygame.error, message: <font color="#a52a2a"><b>print</b></font> '<font color="#ff00ff">Cannot load image:</font>', fullname <font color="#a52a2a"><b>raise</b></font> SystemExit, message image = image.convert() <font color="#a52a2a"><b>if</b></font> colorkey <font color="#a52a2a"><b>is</b></font> <font color="#a52a2a"><b>not</b></font> None: <font color="#a52a2a"><b>if</b></font> colorkey <font color="#a52a2a"><b>is</b></font> -1: colorkey = image.get_at((0,0)) image.set_colorkey(colorkey, RLEACCEL) <font color="#a52a2a"><b>return</b></font> image, image.get_rect() <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">load_sound</font>(name): <font color="#a52a2a"><b>class</b></font> <font color="#008b8b">NoneSound</font>: <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">play</font>(self): <font color="#a52a2a"><b>pass</b></font> <font color="#a52a2a"><b>if</b></font> <font color="#a52a2a"><b>not</b></font> pygame.mixer <font color="#a52a2a"><b>or</b></font> <font color="#a52a2a"><b>not</b></font> pygame.mixer.get_init(): <font color="#a52a2a"><b>return</b></font> NoneSound() fullname = os.path.join('<font color="#ff00ff">data</font>', name) <font color="#a52a2a"><b>try</b></font>: sound = pygame.mixer.Sound(fullname) <font color="#a52a2a"><b>except</b></font> pygame.error, message: <font color="#a52a2a"><b>print</b></font> '<font color="#ff00ff">Cannot load sound:</font>', fullname <font color="#a52a2a"><b>raise</b></font> SystemExit, message <font color="#a52a2a"><b>return</b></font> sound <font color="#0000ff">#classes for our game objects</font> <font color="#a52a2a"><b>class</b></font> <font color="#008b8b">Fist</font>(pygame.sprite.Sprite): """<font color="#ff00ff">moves a clenched fist on the screen, following the mouse</font>""" <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">__init__</font>(self): pygame.sprite.Sprite.__init__(self) <font color="#0000ff">#call Sprite initializer</font> self.image, self.rect = load_image('<font color="#ff00ff">fist.bmp</font>', -1) self.punching = 0 <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">update</font>(self): "<font color="#ff00ff">move the fist based on the mouse position</font>" pos = pygame.mouse.get_pos() self.rect.midtop = pos <font color="#a52a2a"><b>if</b></font> self.punching: self.rect.move_ip(5, 10) <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">punch</font>(self, target): "<font color="#ff00ff">returns true if the fist collides with the target</font>" <font color="#a52a2a"><b>if</b></font> <font color="#a52a2a"><b>not</b></font> self.punching: self.punching = 1 hitbox = self.rect.inflate(-5, -5) <font color="#a52a2a"><b>return</b></font> hitbox.colliderect(target.rect) <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">unpunch</font>(self): "<font color="#ff00ff">called to pull the fist back</font>" self.punching = 0 <font color="#a52a2a"><b>class</b></font> <font color="#008b8b">Chimp</font>(pygame.sprite.Sprite): """<font color="#ff00ff">moves a monkey critter across the screen. it can spin the</font> <font color="#ff00ff"> monkey when it is punched.</font>""" <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">__init__</font>(self): pygame.sprite.Sprite.__init__(self) <font color="#0000ff">#call Sprite intializer</font> self.image, self.rect = load_image('<font color="#ff00ff">chimp.bmp</font>', -1) screen = pygame.display.get_surface() self.area = screen.get_rect() self.rect.topleft = 10, 10 self.move = 9 self.dizzy = 0 <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">update</font>(self): "<font color="#ff00ff">walk or spin, depending on the monkeys state</font>" <font color="#a52a2a"><b>if</b></font> self.dizzy: self._spin() <font color="#a52a2a"><b>else</b></font>: self._walk() <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">_walk</font>(self): "<font color="#ff00ff">move the monkey across the screen, and turn at the ends</font>" newpos = self.rect.move((self.move, 0)) <font color="#a52a2a"><b>if</b></font> self.rect.left < self.area.left <font color="#a52a2a"><b>or</b></font> <font color="#6a5acd">\</font> self.rect.right > self.area.right: self.move = -self.move newpos = self.rect.move((self.move, 0)) self.image = pygame.transform.flip(self.image, 1, 0) self.rect = newpos <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">_spin</font>(self): "<font color="#ff00ff">spin the monkey image</font>" center = self.rect.center self.dizzy = self.dizzy + 12 <font color="#a52a2a"><b>if</b></font> self.dizzy >= 360: self.dizzy = 0 self.image = self.original <font color="#a52a2a"><b>else</b></font>: rotate = pygame.transform.rotate self.image = rotate(self.original, self.dizzy) self.rect = self.image.get_rect(center=center) <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">punched</font>(self): "<font color="#ff00ff">this will cause the monkey to start spinning</font>" <font color="#a52a2a"><b>if</b></font> <font color="#a52a2a"><b>not</b></font> self.dizzy: self.dizzy = 1 self.original = self.image <font color="#a52a2a"><b>def</b></font> <font color="#008b8b">main</font>(): """<font color="#ff00ff">this function is called when the program starts.</font> <font color="#ff00ff"> it initializes everything it needs, then runs in</font> <font color="#ff00ff"> a loop until the function returns.</font>""" <font color="#0000ff">#Initialize Everything</font> pygame.init() screen = pygame.display.set_mode((468, 60)) pygame.display.set_caption('<font color="#ff00ff">Monkey Fever</font>') pygame.mouse.set_visible(0) <font color="#0000ff">#Create The Backgound</font> background = pygame.Surface(screen.get_size()) background = background.convert() background.fill((250, 250, 250)) <font color="#0000ff">#Put Text On The Background, Centered</font> <font color="#a52a2a"><b>if</b></font> pygame.font: font = pygame.font.Font(None, 36) text = font.render("<font color="#ff00ff">Pummel The Chimp, And Win $$$</font>", 1, (10, 10, 10)) textpos = text.get_rect(centerx=background.get_width()/2) background.blit(text, textpos) <font color="#0000ff">#Display The Background</font> screen.blit(background, (0, 0)) pygame.display.flip() <font color="#0000ff">#Prepare Game Objects</font> clock = pygame.time.Clock() whiff_sound = load_sound('<font color="#ff00ff">whiff.wav</font>') punch_sound = load_sound('<font color="#ff00ff">punch.wav</font>') chimp = Chimp() fist = Fist() allsprites = pygame.sprite.RenderPlain((fist, chimp)) <font color="#0000ff">#Main Loop</font> <font color="#a52a2a"><b>while</b></font> 1: clock.tick(60) <font color="#0000ff">#Handle Input Events</font> <font color="#a52a2a"><b>for</b></font> event <font color="#a52a2a"><b>in</b></font> pygame.event.get(): <font color="#a52a2a"><b>if</b></font> event.type <font color="#a52a2a"><b>==</b></font> QUIT: <font color="#a52a2a"><b>return</b></font> <font color="#a52a2a"><b>elif</b></font> event.type <font color="#a52a2a"><b>==</b></font> KEYDOWN <font color="#a52a2a"><b>and</b></font> event.key <font color="#a52a2a"><b>==</b></font> K_ESCAPE: <font color="#a52a2a"><b>return</b></font> <font color="#a52a2a"><b>elif</b></font> event.type <font color="#a52a2a"><b>==</b></font> MOUSEBUTTONDOWN: <font color="#a52a2a"><b>if</b></font> fist.punch(chimp): punch_sound.play() <font color="#0000ff">#punch</font> chimp.punched() <font color="#a52a2a"><b>else</b></font>: whiff_sound.play() <font color="#0000ff">#miss</font> <font color="#a52a2a"><b>elif</b></font> event.type <font color="#a52a2a"><b>is</b></font> MOUSEBUTTONUP: fist.unpunch() allsprites.update() <font color="#0000ff">#Draw Everything</font> screen.blit(background, (0, 0)) allsprites.draw(screen) pygame.display.flip() <font color="#0000ff">#Game Over</font> <font color="#0000ff">#this calls the 'main' function when this script is executed</font> <font color="#a52a2a"><b>if</b></font> __name__ == '<font color="#ff00ff">__main__</font>': main() </pre> </body> </html>