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