All pastes #708294 Raw Edit

chimp code

public text v1 · immutable
#708294 ·published 2007-09-23 19:01 UTC
rendered paste body
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()