I'm creating a basic game where a black square moves around the screen. There are two other squares, a green square and a red square. When the black square collides with the red square it quits the program, when it collides with the green square it adds to your points counter. I've got the red square part down but I'm having trouble creating dynamic text using sprites and classes. Someone from a previous question I asked told me I should blit the score to the screen and then re-blit it every time the square collided with the green square. I don't know how to properly do this however. Here is my code:
import os, sys
import pygame
from pygame.locals import *pygame.init()
mainClock = pygame.time.Clock()WINDOWWIDTH = 1000
WINDOWHEIGHT = 700
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
pygame.display.set_caption("Avoid!")BLACK = (0, 0, 0)
RED = (255, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)player = pygame.Rect(500, 300, 40, 40)
playerImage = pygame.Surface((40, 40))enemy = pygame.Rect(300, 400, 20, 20)
enemyImage = pygame.Surface((20, 20))
enemyImage.fill((RED))food = pygame.Rect(300, 500 , 20, 20)
foodImage = pygame.Surface((20, 20))
foodImage.fill((GREEN))class Score(pygame.sprite.Sprite):"""A sprite for the score."""def __init__(self, xy):pygame.sprite.Sprite.__init__(self)self.xy = xy # save xy -- will center our rect on it when we change the scoreself.font = pygame.font.Font(None, 50) # load the default font, size 50self.color = (BLACK) # our font color in rgbself.score = 0 # start at zeroself.reRender() # generate the imagedef update(self):passdef add(self, points):"""Adds the given number of points to the score."""if player.colliderect(food):my_score.score += pointsself.reRender()def reset(self):"""Resets the scores to zero."""self.score = 0self.reRender()def reRender(self):"""Updates the score. Renders a new image and re-centers at the initial coordinates."""self.image = self.font.render("%d"%(self.score), True, self.color)self.rect = self.image.get_rect()self.rect.center = self.xymy_score = Score((75, 575))
print my_score.scorefont = pygame.font.Font(None, 36)
text = font.render("%d" % (my_score.score), 1, (10, 10, 10))
textpos = text.get_rect(centerx=windowSurface.get_width()/2)moveLeft = False
moveRight = False
moveUp = False
moveDown = FalseMOVESPEED = 6while True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()if event.type == KEYDOWN:if event.key == K_LEFT:moveRight = FalsemoveLeft = Trueif event.key == K_RIGHT:moveLeft = FalsemoveRight = Trueif event.key == K_UP:moveDown = FalsemoveUp = Trueif event.key == K_DOWN:moveUp = FalsemoveDown = Trueif event.type == KEYUP:if event.key == K_ESCAPE:pygame.quit()sys.exit()if event.key == K_LEFT:moveRight = FalsemoveLeft = Trueif event.key == K_RIGHT:moveLeft = FalsemoveRight = Trueif event.key == K_UP:moveDown = FalsemoveUp = Trueif event.key == K_DOWN:moveUp = FalsemoveDown = TruewindowSurface.fill(WHITE)if moveDown and player.bottom < WINDOWHEIGHT:player.top += MOVESPEEDif moveUp and player.top > 0:player.top -= MOVESPEEDif moveLeft and player.left > 0:player.left -= MOVESPEEDif moveRight and player.right < WINDOWWIDTH:player.right +=MOVESPEEDif player.colliderect(enemy):pygame.quit()sys.exit()windowSurface.blit(playerImage, player)windowSurface.blit(enemyImage, enemy)windowSurface.blit(foodImage, food)windowSurface.blit(text, textpos)score = Score((75, 575))pygame.display.update()mainClock.tick(40)
Do I put windowSurface.blit(text, textpos) into the add function within the Score class? How do I increase the score once the big square touches the little green square?