import os, sys import pygame from pygame.locals import * if not pygame.font: print 'Warning, fonts disabled' if not pygame.mixer: print 'Warning, sound disabled' def main(): pygame.init() screen = pygame.display.set_mode((468, 468)) background = pygame.Surface(screen.get_size()) background = background.convert() background.fill((250, 250, 250)) pygame.mouse.set_visible(0) screen.blit(background, (0, 0)) pygame.display.flip() chimp = Chimp() fist = Fist() allsprites = pygame.sprite.RenderPlain((chimp, fist)) clock = pygame.time.Clock() while 1: clock.tick(60) for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == KEYDOWN and event.key == K_ESCAPE: sys.exit() elif event.type == MOUSEBUTTONDOWN: if fist.punch(chimp): chimp.punched() elif event.type == MOUSEBUTTONUP: fist.unpunch() allsprites.update() background.fill((250, 250, 250)) allsprites.draw(background) screen.blit(background, (0,0)) pygame.display.flip() class Fist(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image, self.rect = load_image('fist.bmp', -1) self.punching = 0 def update(self): pos=pygame.mouse.get_pos() self.rect.center=pos # if self.punching: # self.rect.move_ip(5, -20) def punch(self, target): if not self.punching: self.image, self.rect = load_image('fist_fire.bmp', -1) self.punching=1 hitbox=self.rect.inflate(-5, -5) return hitbox.colliderect(target.rect) def unpunch(self): self.image, self.rect = load_image('fist.bmp', -1) self.punching=0 class Chimp(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image, self.rect = load_image('chimp.bmp', -1) screen = pygame.display.get_surface() self.area=screen.get_rect() self.rect.topleft = 10, 10 self.move = 9 self.dizzy = 0 def update(self): if self.dizzy: self.spin() else: self.walk() def walk(self): newpos=self.rect.move((self.move, 0)) if not self.area.contains(newpos): if self.rect.left < self.area.left or \ 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 def spin(self): center=self.rect.center self.dizzy += 12 if self.dizzy >= 360: self.dizzy = 0 self.image = self.original else: rotate = pygame.transform.rotate self.image = rotate(self.original, self.dizzy) self.rect = self.image.get_rect(center = center) def punched(self): if not self.dizzy: self.dizzy = 1 self.original = self.image def load_image(name, colorkey=None): fullname = os.path.join('Data', name) # print fullname try: image = pygame.image.load(fullname) except pygame.error, message: print 'Cannot load image:', name raise SystemExit, message image = image.convert() if colorkey is not None: if colorkey is -1: colorkey = image.get_at((0,0)) image.set_colorkey(colorkey, RLEACCEL) return image, image.get_rect() def load_sound(name): class NoneSound: def play(self): pass if not pygame.mixer: return NoneSound() fullname = os.path.join('data', name) try: sound = pygame.mixer.Sound(fullname) except pygame.error, message: print 'Cannot load sound:', wav raise SystemExit, message return sound main()