All pastes #571494 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-06-17 05:06 UTC
rendered paste body
from globals import *
import pygame

# paddle class
class Paddle(pygame.sprite.Sprite):
	"""The Paddle Class"""

	# __init__ is the class constructor
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		self.image, self.rect = load_image('paddle.png', -1)

	# updates the position based on the mouse movement
	def update(self,ball):
		pos = pygame.mouse.get_pos()
		self.rect.centery = pos[1]
		#self.rect.bottom = pygame.display.get_surface().get_height()-self.image.get_height()
		if self.rect.top < 0: self.rect.top = 0
		if self.rect.bottom > pygame.display.get_surface().get_width():
			self.rect.bottom = pygame.display.get_surface().get_width()

	def CheckCol(self,target):
		return SimpleBoxCollision(target,self.rect)
#end paddle class

class AIPaddle(pygame.sprite.Sprite):
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		self.image, self.rect = load_image('paddle2.png', -1)
		self.rect.midright = pygame.display.get_surface().get_rect().midright
		self.ai = "seek"

	def doai(self,ball):
		""" handles the paddle's AI """
		if self.ai == "seek":
			# attempt to seek to the Y position of the ball
			if ball.rect.centerx > pygame.display.get_surface().get_rect().width/2:
				if self.rect.centery < ball.rect.centery:
					n = random.randint(1, 10)
					if n == 2:
						self.moveDown(ball)
				elif self.rect.centery > ball.rect.centery:
					n = random.randint(1, 10)
					if n == 2:
						self.moveUp(ball)
		elif self.ai == "serve":
			# serve the ball by adding some random negative english on the ball
			n=None

	# end if AI method

	def update(self,ball):
		self.doai(ball)

		if self.rect.top < 0: self.rect.top = 0
		if self.rect.bottom > pygame.display.get_surface().get_height():
			self.rect.bottom = pygame.display.get_surface().get_height()

	def CheckCol(self,target):
		return SimpleBoxCollision(target,self.rect)

	def moveDown(self,ball):
		dist = math.fabs(ball.rect.centery - self.rect.centery)
		amount = dist/difficulty_level
		self.rect.centery = self.rect.centery + amount
		print "AI moving down (dist = %d amount = %d)" % (dist, amount)

	def moveUp(self,ball):
		dist = math.fabs(ball.rect.centery - self.rect.centery)
		amount = (dist/difficulty_level) * -1
		self.rect.centery=self.rect.centery + amount
		print "AI moving up (dist = %d amount = %d)" % (dist, amount)
# End AIPaddle class



class Ball(pygame.sprite.Sprite):
	"""The Ball Class"""

	# __init__ is the class constructor
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		self.image, self.rect = load_image('ball.png', -1)
		self.rect.center = pygame.display.get_surface().get_rect().center

	def update(self,paddle,paddle2):

		if self.rect.top < 0 or self.rect.bottom > height:
			speed[1] = -speed[1]

		if paddle.CheckCol(self.rect) == True:
			speed[0] = speed[0] + 1
			speed[0] = -speed[0]
			speed[1] = speed[1] + 1
			speed[1] = speed[1]

		if paddle2.CheckCol(self.rect) == True:
			speed[0] = speed[0] + 1
			speed[0] = -speed[0]
			speed[1] = speed[1] + 1
			speed[1] = speed[1]

		if self.rect.right > width:
			bsound.stop()
			sc1.addScore(1)
			self.ResetBall()

		if self.rect.left < 0:
			bsound.stop()
			sc2.addScore(1)

			hsound.play()
			self.ResetBall()

	def CheckCol(self,target):
		return SimpleBoxCollision(target,self.rect)

	def ResetBall(self):
		"""ResetBall will position the ball to the specified paddle rect"""
		self.rect.center = pygame.display.get_surface().get_rect().center
		speed = [0, 0]
		bsound.play()
# end ResetBall method

def process():
	background = image.load("background.png").convert()
	bsound.play()
	paddle = Paddle()
	paddle2 = AIPaddle()
	ball = Ball()
	allsprites = pygame.sprite.RenderPlain(paddle,paddle2)
	ballsprite = pygame.sprite.RenderPlain(ball)
	while 1:
		clock.tick(60)
		for event in pygame.event.get():
			if event.type == pygame.QUIT: sys.exit()
			elif event.type == pygame.KEYDOWN:
				if event.key == pygame.K_ESCAPE:
					bsound.stop()
					return "quit"
				elif event.key == K_p:
					bsound.stop()
					return "pause"

		ball.rect = ball.rect.move(speed)

		paddle2.ai = "seek"

		allsprites.update(ball)
		ballsprite.update(paddle,paddle2)

		s1 = sc1.getScoreString()
		s2 = sc2.getScoreString()
		pscore = sfont.render(s1,1,red)
		cscore = sfont.render(s2,1,red)

		if sc1.getScore() == 10 or sc2.getScore() == 10:
			bsound.stop()
			return "gameover"

		window.blit(background,(0,0))
		allsprites.draw(screen)
		ballsprite.draw(screen)
		window.blit(score, (375,20))
		window.blit(pscore, (335,30))
		window.blit(cscore, (450,30))
		pygame.display.flip()