Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Kitson <msk5293@rit.edu>2010-11-11 20:39:33 (GMT)
committer Michael Kitson <msk5293@rit.edu>2010-11-11 20:39:33 (GMT)
commit73c4c041fdf562378b7e2265c13e0d90312c647f (patch)
treebf28977a9506551fc7d95366959480ce1201b5aa
parent9bc73d2243c67dde92fd4d5cada1d918ca4a0a7d (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.py23
-rw-r--r--dev/pacmath.activity/basicMovement.py23
-rw-r--r--dev/pacmath.activity/gameMain.py52
-rw-r--r--dev/pacmath.activity/images/ghost_freeze.pngbin0 -> 4174 bytes
-rw-r--r--dev/pacmath.activity/pacmanMovement.py15
-rw-r--r--dev/pacmath.activity/question.py37
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
new file mode 100644
index 0000000..6d1d657
--- /dev/null
+++ b/dev/pacmath.activity/images/ghost_freeze.png
Binary files differ
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))