All pastes #708412 Raw Edit

chimp code

public text v1 · immutable
#708412 ·published 2007-09-23 20:25 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():
	global event_list
	event_list = []
	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()
	global chimp
	global fist
	chimp = Chimp()
	fist = Fist()
#	event_list = []
	allsprites = pygame.sprite.RenderPlain((chimp, fist))
	global clock
	clock = pygame.time.Clock()
	while 1:
		clock.tick(60)
		event_exec()
		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, dummy = load_image('fist_fire.bmp', -1)
			wait(5, 'fist.unfire()')
			self.punching=1
			hitbox=self.rect.inflate(-1, -1)
			return hitbox.colliderect(target.rect)
	
	def unfire(self):
		self.image, dummy = load_image('fist.bmp',  -1)
	
	def unpunch(self):
		self.image, dummy = 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 wait(time, function):
	global clock
	global event_list
	current = float(pygame.time.get_ticks()) / 1000
	time = current + float(time)
	print time
	event_list = event_list + [(function, time)]

def event_exec():
	global chimp
	global fist
	global event_list
	if len(event_list) > 0:
		count = 0
		timex = float(pygame.time.get_ticks()) / 1000
		border = float(clock.get_time()) / 2000
		for tuple in event_list:
			print tuple
			if timex >= (tuple[1] - border) or timex <= (tuple[1] + border):
				exec tuple[0]
			else:
#                            check if the event is active
				if time < tuple[1]:
					count = count + 1
#           if there are no active events left, set it back
		if count == 0:
			event_list = []

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()