rendered paste bodyfrom 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()