diff options
author | Michael Kitson <msk5293@rit.edu> | 2010-11-11 20:39:33 (GMT) |
---|---|---|
committer | Michael Kitson <msk5293@rit.edu> | 2010-11-11 20:39:33 (GMT) |
commit | 73c4c041fdf562378b7e2265c13e0d90312c647f (patch) | |
tree | bf28977a9506551fc7d95366959480ce1201b5aa | |
parent | 9bc73d2243c67dde92fd4d5cada1d918ca4a0a7d (diff) |
Substaintial changes to game...
pellets now give points
points are now listed out of 100 and when 100 is reached, a new life is credited
level indicator was added
Power pellets pause ghosts for a while, while paused ghosts dont move
after 3 right answers the player advances a level, with a new question set generated
Ghosts are now sent back to spawn when touched
I have to switch computers, so some of the redrawing is buggy
-rw-r--r-- | dev/pacmath.activity/GhostMovement.py | 23 | ||||
-rw-r--r-- | dev/pacmath.activity/basicMovement.py | 23 | ||||
-rw-r--r-- | dev/pacmath.activity/gameMain.py | 52 | ||||
-rw-r--r-- | dev/pacmath.activity/images/ghost_freeze.png | bin | 0 -> 4174 bytes | |||
-rw-r--r-- | dev/pacmath.activity/pacmanMovement.py | 15 | ||||
-rw-r--r-- | dev/pacmath.activity/question.py | 37 |
6 files changed, 107 insertions, 43 deletions
diff --git a/dev/pacmath.activity/GhostMovement.py b/dev/pacmath.activity/GhostMovement.py index 75beefa..3128664 100644 --- a/dev/pacmath.activity/GhostMovement.py +++ b/dev/pacmath.activity/GhostMovement.py @@ -29,9 +29,10 @@ class ghostMovement(pygame.sprite.Sprite): self.image = pygame.image.load(file).convert_alpha() + self.freezeImage = pygame.image.load('./images/ghost_freeze.png').convert_alpha() # Save a copy of the screen's rectangle self.screen = pygame.display.get_surface().get_rect() - + self.freezeTime = 0 #initialize the move instance self.move = basicMovement(self) @@ -96,6 +97,9 @@ class ghostMovement(pygame.sprite.Sprite): """ # call basic movement and add any other update amount = self.randomMovement() + if self.freezeTime > 0: + amount = [0,0] + self.move.moving = False self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) # Create a Surface the size of our character @@ -112,7 +116,14 @@ class ghostMovement(pygame.sprite.Sprite): mazeObj.drawPoint(screen, gridX, gridY) # Draw the new position - screen.blit(self.image, self.rect) + if self.freezeTime > 0: + if self.freezeTime%2 == 1 and self.freezeTime > 5: + screen.blit(self.freezeImage, self.rect) + else: + screen.blit(self.image, self.rect) + self.freezeTime -= 1 + else: + screen.blit(self.image, self.rect) # Update ONLY the modified areas of the screen pygame.display.update([self.old, self.rect]) @@ -126,3 +137,11 @@ class ghostMovement(pygame.sprite.Sprite): def drawSelf(self, screen): screen.blit(self.image, self.rect) pygame.display.update(self.rect) + + def freeze(self, time): + self.freezeTime += time + + def eaten(self): + self.rect.x = 300 + self.rect.y = 300 + self.move.moving = False diff --git a/dev/pacmath.activity/basicMovement.py b/dev/pacmath.activity/basicMovement.py index 1e90b2b..404ce9e 100644 --- a/dev/pacmath.activity/basicMovement.py +++ b/dev/pacmath.activity/basicMovement.py @@ -11,7 +11,9 @@ class basicMovement(pygame.sprite.Sprite): #for moving until the character reaches an intersection return self.moving - def update(self, screen, character, amount, MAZE_SIZE, mazeObj): + def update(self, screen, character, amount, MAZE_SIZE, mazeObj): + pacmanEvent = 0 + # Make a copy of the current rectangle for use in erasing character.old = character.rect @@ -89,6 +91,7 @@ class basicMovement(pygame.sprite.Sprite): if character.name == 'PacMath': #change the grid to empty grid[gridX][gridY] = mazeObj.maze.EMPTY + pacmanEvent = 1 else: placeHolder = 0 ghostRedraw = True @@ -102,22 +105,7 @@ class basicMovement(pygame.sprite.Sprite): #change the grid to empty grid[gridX][gridY] = mazeObj.maze.EMPTY #check how many power pellets pacman has eaten - #if character.pplCount == 0: - #ask question - #increment the counter - #character.pplCount = 1 - #elif character.pplCount == 1: - #ask question - #increment the counter - #character.pplCount = 2 - #elif character.pplCount == 2: - #ask question - #increment the counter - #character.pplCount = 3 - #elif character.pplCount == 3: - #ask question - #increment the counter - #character.pplCount = 4 + pacmanEvent = 2 else: placeHolder = 0 ghostRedraw = True @@ -142,3 +130,4 @@ class basicMovement(pygame.sprite.Sprite): character.rect.y = character.old.y #off limits, stop moving self.moving = False + return pacmanEvent diff --git a/dev/pacmath.activity/gameMain.py b/dev/pacmath.activity/gameMain.py index 8680de1..c1b3db2 100644 --- a/dev/pacmath.activity/gameMain.py +++ b/dev/pacmath.activity/gameMain.py @@ -40,6 +40,7 @@ class gameMain: self.questGen = questionGenerator( self.operation, 2, 12 ) self.lives = BASE_LIVES self.score = 0 + self.level = 1 def resetQuestion(self): @@ -53,16 +54,20 @@ class gameMain: self.pacman = pacmanMovement((self.screen.get_rect().x, self.screen.get_rect().y)) self.ghosts = [ self.ghost1, self.ghost2, self.ghost3, self.ghost4 ] + self.nextQuestion() - self.wrongGhosts = pygame.sprite.Group() - self.correctGhosts = pygame.sprite.Group() - - for i in range(len(self.ghosts)): - if not (i == self.QandA.getAnswerIndex() ): - self.wrongGhosts.add( self.ghosts[i] ) - else: - self.correctGhosts.add( self.ghosts[i] ) - + def nextQuestion(self): + if self.QandA.nextQuestion(): + self.wrongGhosts = pygame.sprite.Group() + self.correctGhosts = pygame.sprite.Group() + + for i in range(len(self.ghosts)): + if not (i == self.QandA.getAnswerIndex() ): + self.wrongGhosts.add( self.ghosts[i] ) + else: + self.correctGhosts.add( self.ghosts[i] ) + else: + self.resetQuestion() def update(self, event): """ @@ -78,16 +83,32 @@ class gameMain: ghostMovement.update(self.ghost3, self.screen, MAZE_SIZE, self.maze) ghostMovement.update(self.ghost4, self.screen, MAZE_SIZE, self.maze) alreadyCollided = self.checkCollisions() - pacmanMovement.update(self.pacman, self.screen, event, MAZE_SIZE, self.maze) + pacmanEvent = pacmanMovement.update(self.pacman, self.screen, event, MAZE_SIZE, self.maze) if not alreadyCollided: self.checkCollisions() + if pacmanEvent == 1: + self.score += 1 + if self.score == 100: + self.score = 1 + self.lives += 1 + self.QandA.updateLives(self.screen, self.lives) + self.QandA.updateScore(self.screen, self.score) + elif pacmanEvent == 2: + self.freeze(30) + + def freeze(self, time): + self.ghost1.freeze(time) + self.ghost2.freeze(time) + self.ghost3.freeze(time) + self.ghost4.freeze(time) def checkCollisions(self): - for ghost in pygame.sprite.spritecollide(self.pacman, self.correctGhosts, True): - self.score += 100 - self.resetQuestion() - self.QandA.updateLives(self.screen, self.lives) - self.QandA.updateScore(self.screen, self.score) + for ghost in pygame.sprite.spritecollide(self.pacman, self.correctGhosts,False): + if self.nextQuestion() == False: + self.resetQuestion() + self.level +=1 + self.QandA.updateLevel(level) + ghost.eaten() return True for ghost in pygame.sprite.spritecollide(self.pacman, self.wrongGhosts, False): @@ -98,6 +119,7 @@ class gameMain: else: self.QandA.updateLives(self.screen, self.lives) self.QandA.updateScore(self.screen, self.score) + ghost.eaten() return True return False diff --git a/dev/pacmath.activity/images/ghost_freeze.png b/dev/pacmath.activity/images/ghost_freeze.png Binary files differnew file mode 100644 index 0000000..6d1d657 --- /dev/null +++ b/dev/pacmath.activity/images/ghost_freeze.png diff --git a/dev/pacmath.activity/pacmanMovement.py b/dev/pacmath.activity/pacmanMovement.py index c229d58..30e3eba 100644 --- a/dev/pacmath.activity/pacmanMovement.py +++ b/dev/pacmath.activity/pacmanMovement.py @@ -53,7 +53,7 @@ class pacmanMovement(pygame.sprite.Sprite): amount = [0, 0] #speed/incremental value speed = 25 - + pacmanEvent = 0 moving = self.move.getMoving() if moving == True: @@ -63,31 +63,31 @@ class pacmanMovement(pygame.sprite.Sprite): dx = self.rect.x - self.old.x dy = self.rect.y - self.old.y amount = [dx, dy] - self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) + pacmanEvent = self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: self.move.moving = True amount = [-speed, 0] - self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) + pacmanEvent = self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) self.imageIndex = 3 elif event.key == pygame.K_UP: self.move.moving = True amount = [0, -speed] - self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) + pacmanEvent = self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) self.imageIndex = 0 elif event.key == pygame.K_RIGHT: self.move.moving = True amount = [speed, 0] - self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) + pacmanEvent = self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) self.imageIndex = 1 elif event.key == pygame.K_DOWN: self.move.moving = True amount = [0, speed] - self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) + pacmanEvent = self.move.update(screen, self, amount, MAZE_SIZE, mazeObj) self.imageIndex = 2 - + # Create a Surface the size of our character blank = pygame.Surface((self.rect.width, self.rect.height)) blank.fill((0, 0, 0)) @@ -100,6 +100,7 @@ class pacmanMovement(pygame.sprite.Sprite): # Update ONLY the modified areas of the screen pygame.display.update([self.old, self.rect]) + return pacmanEvent def clearSelf(self, screen, mazeObj): gridX = int(round(self.rect.x/MAZE_SIZE, 0) ) diff --git a/dev/pacmath.activity/question.py b/dev/pacmath.activity/question.py index caf20b9..c492541 100644 --- a/dev/pacmath.activity/question.py +++ b/dev/pacmath.activity/question.py @@ -38,10 +38,23 @@ class question: self.questions = quests self.answerIndex = random.randint(0,3) self.question = self.questions[self.answerIndex][0] - + self.answered = [] + self.answered.append( self.answerIndex ) + self.drawAnswers(screen) self.drawQuestion(screen) self.pacman = pygame.image.load("./images/pacmanr.png").convert_alpha() + self.screen = screen + def nextQuestion(self): + if(len(self.answered) > 3): + return False + else: + while(self.answerIndex in self.answered): + self.answerIndex = random.randint(0,3) + self.answered.append(self.answerIndex) + self.question = self.questions[self.answerIndex][0] + self.drawQuestion(self.screen) + return True def drawAnswers(self, screen): """ @@ -188,7 +201,7 @@ class question: """ self.clearScore(screen) - text = pygame.font.Font(None, 36).render( "Score: " + str(score), 1, self.QUESTION_COLOR ) + text = pygame.font.Font(None, 36).render( str(score)+'/100', 1, self.QUESTION_COLOR ) screen.blit(text, (900-text.get_width(), 670)) pygame.display.update(pygame.Rect(900-text.get_width(), 670, text.get_width(), 30)) @@ -202,5 +215,25 @@ class question: screen.blit(blackBox, (600,670)) pygame.display.update(pygame.Rect(600, 670, 300, 30)) + def updateLevel(self, screen, level): + """ + Redraws the score onto the screen + @param screen: the screen on which we will draw + @param score: the score to be drawn + """ + self.clearLevel(screen) + + text = pygame.font.Font(None, 36).render( 'Level: ' + str(level), 1, self.QUESTION_COLOR ) + screen.blit(text, (900-text.get_width(), 625)) + pygame.display.update(pygame.Rect(900-text.get_width(), 625, text.get_width(), 30)) + def clearLevel(self, screen): + """ + Draws a black box over the score display so that we may redraw it + @param screen: the screen on which to draw + """ + blackBox = pygame.Surface((300,30)) + blackBox.fill((0,0,0)) + screen.blit(blackBox, (600,635)) + pygame.display.update(pygame.Rect(600, 670, 300, 30)) |