def applyBonus(self, pybreakout): #print "this is where I add two additional balls" ball1 = Ball(rm.getImagePath("ball-mini.png")) ball2 = Ball(rm.getImagePath("ball-mini.png")) self.adjustBall(ball1,5,pybreakout) self.adjustBall(ball2,-5,pybreakout) pybreakout.balls.append(ball1) pybreakout.balls.append(ball2)
def applyBonus(self, pybreakout): #print "this is where I add two additional balls" ball1 = Ball(rm.getImagePath("ball-mini.png")) ball2 = Ball(rm.getImagePath("ball-mini.png")) self.adjustBall(ball1, 5, pybreakout) self.adjustBall(ball2, -5, pybreakout) pybreakout.balls.append(ball1) pybreakout.balls.append(ball2)
def reset(self): "Reset Ball, Paddle, and Speed to default positions and states. Called after a ball falls into the abyss." self.balls = [] self.balls.append(Ball(rm.getImagePath("ball-mini.png"))) self.paddle = Paddle(rm.getImagePath("paddle.png"),self.balls[0], self.size) self.pointsColor = RGB_WHITE self.running = True self.speed = self.level
def reset(self): "Reset Ball, Paddle, and Speed to default positions and states. Called after a ball falls into the abyss." self.balls = [] self.balls.append(Ball(rm.getImagePath("ball-mini.png"))) self.paddle = Paddle(rm.getImagePath("paddle.png"), self.balls[0], self.size) self.pointsColor = RGB_WHITE self.running = True self.speed = self.level
def drawMiniPaddles(self): if(self.numLives == 0): return drawPos = 0 miniPaddleImage = pygame.image.load(rm.getImagePath("paddle-mini.png")) miniPaddleRect = miniPaddleImage.get_rect() for numLife in range(self.numLives): self.screen.blit(miniPaddleImage,(0+drawPos,GB_HEIGHT-miniPaddleRect.height)) drawPos = drawPos + 22
def drawMiniPaddles(self): if (self.numLives == 0): return drawPos = 0 miniPaddleImage = pygame.image.load(rm.getImagePath("paddle-mini.png")) miniPaddleRect = miniPaddleImage.get_rect() for numLife in range(self.numLives): self.screen.blit(miniPaddleImage, (0 + drawPos, GB_HEIGHT - miniPaddleRect.height)) drawPos = drawPos + 22
def createBrick(self, brickChar): "Given a brickChar, create the appropriate instance object of the Brick class and return it" if brickChar == 'R': newBrick = Brick(rm.getImagePath("brick-red.png"), self.drawLocation) luckyNum = randint(0, 4) #luckyNum = 3 if luckyNum == 3: newBrick.addBonus(Triball(newBrick)) elif brickChar == 'P': newBrick = Brick(rm.getImagePath("brick-purple.png"), self.drawLocation) luckyNum = randint(0, 4) if luckyNum == 3: newBrick.addBonus(Triball(newBrick)) elif brickChar == 'G': newBrick = Brick(rm.getImagePath("brick-green.png"), self.drawLocation) luckyNum = randint(0, 7) if luckyNum == 3: newBrick.addBonus(Slowball(newBrick)) elif brickChar == 'O': newBrick = Brick(rm.getImagePath("brick-orange.png"), self.drawLocation) luckyNum = randint(0, 5) if luckyNum == 5: newBrick.addBonus(Triball(newBrick)) elif brickChar == 'B': newBrick = Brick(rm.getImagePath("brick-blue.png"), self.drawLocation) luckyNum = randint(0, 5) if luckyNum == 0: newBrick.addBonus(Triball(newBrick)) elif brickChar == 'Q': newBrick = Brick(rm.getImagePath("brick-grey.png"), self.drawLocation, 0, False) elif brickChar == '.': newBrick = Brick(rm.getImagePath("brick-grey.png"), self.drawLocation, 0, True, True) if newBrick.isDestructible and not (newBrick.isDestroyed): self.numDestructibleBricks += 1 self.drawLocation = self.drawLocation[0] + 40, self.drawLocation[1] return newBrick
def createBrick(self, brickChar): "Given a brickChar, create the appropriate instance object of the Brick class and return it" if brickChar == 'R': newBrick = Brick(rm.getImagePath("brick-red.png"), self.drawLocation) luckyNum = randint(0,4) #luckyNum = 3 if luckyNum == 3: newBrick.addBonus(Triball(newBrick)) elif brickChar == 'P': newBrick = Brick(rm.getImagePath("brick-purple.png"), self.drawLocation) luckyNum = randint(0,4) if luckyNum == 3: newBrick.addBonus(Triball(newBrick)) elif brickChar == 'G': newBrick = Brick(rm.getImagePath("brick-green.png"), self.drawLocation) luckyNum = randint(0,7) if luckyNum == 3: newBrick.addBonus(Slowball(newBrick)) elif brickChar == 'O': newBrick = Brick(rm.getImagePath("brick-orange.png"), self.drawLocation) luckyNum = randint(0,5) if luckyNum == 5: newBrick.addBonus(Triball(newBrick)) elif brickChar == 'B': newBrick = Brick(rm.getImagePath("brick-blue.png"), self.drawLocation) luckyNum = randint(0,5) if luckyNum == 0: newBrick.addBonus(Triball(newBrick)) elif brickChar == 'Q': newBrick = Brick(rm.getImagePath("brick-grey.png"), self.drawLocation, 0, False) elif brickChar == '.': newBrick = Brick(rm.getImagePath("brick-grey.png"), self.drawLocation, 0, True, True) if newBrick.isDestructible and not(newBrick.isDestroyed): self.numDestructibleBricks +=1 self.drawLocation = self.drawLocation[0]+40,self.drawLocation[1] return newBrick
def play(self): "The main game loop occurs here, checks for keyboard input, updates game state, etc..." self.running = True lastLevelUpTime = time.time() i = 0 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() keys = pygame.key.get_pressed() if keys[K_q]: exit(0) elif keys[K_RETURN]: if (len(self.balls) <= 0) or (len(self.balls) == 1 and not self.balls[0].stuck): if self.numLives >= 1: self.numLives -= 1 self.reset() print "self.numLives = %s" % self.numLives else: self.running = False self.endgame() elif keys[K_y]: if self.gameOver: self.startGame() if self.running: if (i % 4 == 0): self.cventry.run() # update paddle if self.move_right > 0: self.paddle.moveRight(self.move_right * 1.5) if self.move_right < 0: self.paddle.moveLeft(-self.move_right * 1.5) if self.move_down > 0: self.paddle.moveDown(self.move_down * 1.5) if self.move_down < 0: self.paddle.moveUp(-self.move_down) self.paddle.setAngle(self.paddle_angle) self.checkBonusCollision() for ball in self.balls[:]: self.checkBallCollision(ball) hitWall = ball.autoMove() if hitWall: self.soundManager.play('cartoon-spring-sound', [0.2, 0.2]) if (ball.rect.top >= GB_HEIGHT): self.balls.remove(ball) for boni in self.bonuses: boni.moveDown(1) if boni.rect.y > GB_HEIGHT: #if it reaches the bottom of the screen remove it from the bonuses list self.bonuses.remove(boni) self.pointsString = self.font.render(str(self.points), True, self.pointsColor) self.updateScreen() if (i % 4 == 0): self.dumpScreen() i += 1 #All balls have left the gameboard, need to pause and wait for Right Click # or if numLives == 0, then end game. if len(self.balls) == 0: self.running = False self.pointsColor = RGB_RED if self.numLives == 0: self.endgame() if self.checkLevelUp(): self.speed = self.level if self.level == LAST_LEVEL: self.level = -1 self.level += 1 self.levelString = self.font.render( str(self.level), True, RGB_WHITE) self.bricks = self.loadBricks() self.balls = [] self.balls.append(Ball(rm.getImagePath("ball-mini.png"))) self.paddle = Paddle(rm.getImagePath("paddle.png"), self.balls[0]) #Wait a couple of milliseconds currentTime = time.time() if (currentTime - lastLevelUpTime > 15): lastLevelUpTime = currentTime if (STARTSPEED - self.speed > 0): #print "15 s elapsed increasing speed by 1" self.speed += 1
def __init__(self, myBrick): Bonus.__init__(self, rm.getImagePath("slowball-bonus.png")) self.rect.move_ip(myBrick.position)
def play(self): "The main game loop occurs here, checks for keyboard input, updates game state, etc..." self.running = True lastLevelUpTime = time.time() i = 0 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() keys = pygame.key.get_pressed() if keys[K_q]: exit(0) elif keys[K_RETURN]: if (len(self.balls) <= 0) or (len(self.balls) == 1 and not self.balls[0].stuck): if self.numLives >=1: self.numLives -=1 self.reset() print "self.numLives = %s"%self.numLives else: self.running = False self.endgame() elif keys[K_y]: if self.gameOver: self.startGame() if self.running: if (i % 4 == 0): self.cventry.run() # update paddle if self.move_right > 0: self.paddle.moveRight(self.move_right*1.5) if self.move_right < 0: self.paddle.moveLeft(-self.move_right*1.5) if self.move_down > 0: self.paddle.moveDown(self.move_down*1.5) if self.move_down < 0: self.paddle.moveUp(-self.move_down) self.paddle.setAngle(self.paddle_angle) self.checkBonusCollision() for ball in self.balls[:]: self.checkBallCollision(ball) hitWall = ball.autoMove() if hitWall: self.soundManager.play('cartoon-spring-sound',[0.2,0.2]) if(ball.rect.top >= GB_HEIGHT): self.balls.remove(ball) for boni in self.bonuses: boni.moveDown(1) if boni.rect.y > GB_HEIGHT: #if it reaches the bottom of the screen remove it from the bonuses list self.bonuses.remove(boni) self.pointsString = self.font.render(str(self.points), True, self.pointsColor) self.updateScreen() if (i % 4 == 0): self.dumpScreen() i += 1 #All balls have left the gameboard, need to pause and wait for Right Click # or if numLives == 0, then end game. if len(self.balls) == 0: self.running = False self.pointsColor = RGB_RED if self.numLives == 0: self.endgame() if self.checkLevelUp(): self.speed = self.level if self.level == LAST_LEVEL: self.level = -1 self.level += 1 self.levelString = self.font.render(str(self.level), True, RGB_WHITE) self.bricks = self.loadBricks() self.balls = [] self.balls.append(Ball(rm.getImagePath("ball-mini.png"))) self.paddle = Paddle(rm.getImagePath("paddle.png"),self.balls[0]) #Wait a couple of milliseconds currentTime = time.time() if(currentTime - lastLevelUpTime > 15): lastLevelUpTime = currentTime if (STARTSPEED - self.speed > 0): #print "15 s elapsed increasing speed by 1" self.speed +=1
def __init__(self, myBrick): Bonus.__init__(self,rm.getImagePath("slowball-bonus.png")) self.rect.move_ip(myBrick.position)