class SnakeGame(): def __init__(self): self.score = 0 self.snake = Snake(SCREEN_SIZE[0] // 2, SCREEN_SIZE[1] // 2) self.apple = Apple() self.apple.placeApple(self.snake.getBody(), SCREEN_SIZE[0], SCREEN_SIZE[1]) self.scorePosX = SCREEN_SIZE[0] // 2 - 10 self.eatingSound = pygame.mixer.Sound('Eating.ogg') def reset(self): self.score = 0 self.snake = Snake(SCREEN_SIZE[0] // 2, SCREEN_SIZE[1] // 2) self.apple.placeApple(self.snake.getBody(), SCREEN_SIZE[0], SCREEN_SIZE[1]) def isSnakeCollision(self): body = self.snake.getBody() head = body[0] # check left and righside screen if ((head[0] < 0 or head[0] > (SCREEN_SIZE[0] - self.snake.getSize()))): return True # check top and bottom of screen if ((head[1] < 0 or head[1] > (SCREEN_SIZE[1] - self.snake.getSize()))): return True # check if snake hit self if (len(body) > 3): for i in range(3, len(body)): if isSquareHit(head, body[i], self.snake.getSize()): return True return False def isAppleCollision(self): head = self.snake.getBody()[0] return isSquareHit((self.apple.getX(), self.apple.getY()), head, self.snake.getSize()) def drawScore(self, surface): scoreFont = pygame.font.Font(None, 40) scoreSurface = scoreFont.render(str(self.score), True, (255, 255, 255)) surface.blit(scoreSurface, (self.scorePosX, 0)) def drawSplashScreen(self, surface, text, color): """ Surface, String --> void Draws text centered at the center of the given Surface. """ splashFont = pygame.font.Font(None, 100) splashSurface = splashFont.render(text, True, color) textXPos = (SCREEN_SIZE[0] // 2) - (splashFont.size(text)[0] // 2) textYpos = (SCREEN_SIZE[1] // 2) - (splashFont.size(text)[1] // 2) surface.blit(splashSurface, (textXPos, textYpos)) def handleQuit(self, event): if event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() exit() elif event.type == QUIT: pygame.quit() exit() def play(self): self.drawSplashScreen(SCREEN, "SNAKE", (255, 255, 255)) pygame.display.flip() while True: # starting splashcreen event = pygame.event.wait() self.handleQuit(event) if event.type == KEYDOWN: break while True: # main loop for running the game pygame.event.pump() SCREEN.blit(BG, (0, 0)) # Makes clean background self.apple.drawApple(SCREEN, self.snake.getSize()) self.snake.drawSnake(SCREEN) self.drawScore(SCREEN) pygame.display.flip() # Handle Key events didChangeDir = False for event in pygame.event.get(): self.handleQuit(event) if event.type == KEYDOWN and not didChangeDir: didChangeDir = self.snake.changeDir(event) # Move the snake self.snake.moveSnake() # Handle Collisions if self.isSnakeCollision(): self.snake.drawSnake( SCREEN) # update the snake's position to when it crashed self.drawSplashScreen(SCREEN, "GAME OVER", (169, 169, 169)) pygame.display.flip() while True: # game over screen event = pygame.event.wait() self.handleQuit(event) if event.type == KEYDOWN: self.reset() break if self.isAppleCollision(): self.eatingSound.play() self.apple.placeApple(self.snake.getBody(), SCREEN_SIZE[0], SCREEN_SIZE[1]) self.snake.addSegment() self.score += 1 # Game Speed pygame.time.delay(80)