def resetGame(mySnake): # Recreate Level 1 nibble.level = 1 global currentLevel currentLevel = Level(1, nibble.total_columns, nibble.total_lines) # Draw level nibble.drawLevel(currentLevel) # Zero out total score nibble.score = 0 # Reset snake's attributes mySnake.resetSnake(nibble.center_x, nibble.center_y) mySnake.lives = 3 # Zero the apples eaten global apples_eaten apples_eaten = 0 # Show the first Apple global apple apple = Apple(nibble.total_columns, nibble.total_lines, currentLevel, mySnake) pygame.draw.rect( nibble.screen, (0, 255, 0), pygame.Rect(apple.getX(), apple.getY(), mySnake.size, mySnake.size), 0)
def resetLevel(mySnake): # Recreate Level 1 global currentLevel currentLevel = Level(nibble.level,nibble.total_columns,nibble.total_lines) # Draw level nibble.drawLevel(currentLevel) # Reset snake's attributes mySnake.resetSnake(nibble.center_x,nibble.center_y) # Zero the apples eaten global apples_eaten apples_eaten = 0 # Show the first Apple global apple apple = Apple(nibble.total_columns,nibble.total_lines,currentLevel,mySnake) pygame.draw.rect(nibble.screen, (0,255, 0), pygame.Rect(apple.getX(), apple.getY(), mySnake.size, mySnake.size),0)
# Create level currentLevel = Level(1, nibble.total_columns, nibble.total_lines) # Draw level nibble.drawLevel(currentLevel) nibble.displayMessage("Level" + str(nibble.level) + ", Push Space") nibble.drawLevel(currentLevel) # Create a Snake mySnake = Snake(nibble.center_x, nibble.center_y) # Show the first Apple apple = Apple(nibble.total_columns, nibble.total_lines, currentLevel, mySnake) pygame.draw.rect( nibble.screen, (0, 255, 0), pygame.Rect(apple.getX(), apple.getY(), mySnake.size, mySnake.size), 0) pygame.mixer.init(48000, -16, 1, 1024) sound_eat = pygame.mixer.Sound( os.path.dirname(os.path.abspath(__file__)) + '/hit.wav') sound_crash = pygame.mixer.Sound( os.path.dirname(os.path.abspath(__file__)) + '/sounds/crash.ogg') sound_game_over = pygame.mixer.Sound( os.path.dirname(os.path.abspath(__file__)) + '/sounds/reverse.ogg') def resetLevel(mySnake): # Recreate Level 1 global currentLevel currentLevel = Level(nibble.level, nibble.total_columns, nibble.total_lines)
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)
print "script's dir: " + os.path.dirname(os.path.abspath(__file__)) # Create level currentLevel = Level(1,nibble.total_columns,nibble.total_lines) # Draw level nibble.drawLevel(currentLevel) nibble.displayMessage("Level" + str(nibble.level) + ", Push Space") nibble.drawLevel(currentLevel) # Create a Snake mySnake = Snake(nibble.center_x,nibble.center_y) # Show the first Apple apple = Apple(nibble.total_columns,nibble.total_lines,currentLevel,mySnake) pygame.draw.rect(nibble.screen, (0, 255, 0), pygame.Rect(apple.getX(), apple.getY(), mySnake.size, mySnake.size),0) pygame.mixer.init(48000, -16, 1, 1024) sound_eat = pygame.mixer.Sound(os.path.dirname(os.path.abspath(__file__)) + '/hit.wav') sound_crash = pygame.mixer.Sound(os.path.dirname(os.path.abspath(__file__)) + '/sounds/crash.ogg') sound_game_over = pygame.mixer.Sound(os.path.dirname(os.path.abspath(__file__)) + '/sounds/reverse.ogg') def resetLevel(mySnake): # Recreate Level 1 global currentLevel currentLevel = Level(nibble.level,nibble.total_columns,nibble.total_lines) # Draw level nibble.drawLevel(currentLevel) # Reset snake's attributes
class App: def __init__(self): self.width = 600 self.height = 600 self.player = Player() self.block = 10 self.background = (0, 0, 0) pygame.init() self.screen = pygame.display.set_mode((self.width, self.height)) self.running = True self.clock = pygame.time.Clock() self.apple = Apple() self.active = False Tk().wm_withdraw() def drawSnake(self): # get positions of snake and turn into rectangles snake_size = len(self.player.x) for i in range(snake_size): if i == 0: # if snake head head = pygame.Rect(self.player.x[i], self.player.y[i], self.block, self.block) pygame.draw.rect(self.screen, self.player.head_color, head) else: # if body rect = pygame.Rect(self.player.x[i], self.player.y[i], self.block, self.block) pygame.draw.rect(self.screen, self.player.body_color, rect) def drawGame(self): for y in range(self.height // 10): for x in range(self.width // 10): rect = pygame.Rect(x * self.block, y * self.block, self.block, self.block) pygame.draw.rect(self.screen, self.background, rect) def updateGame(self): self.screen.fill(self.background) self.drawSnake() self.drawApple() pygame.display.set_caption('Snake Game. Your Score is: %s' % (self.player.score)) pygame.display.update() def drawApple(self): apple = pygame.Rect(self.apple.getX(), self.apple.getY(), self.block, self.block) pygame.draw.rect(self.screen, self.apple.color, apple) def startOver(self): self.player.score = 0 self.player.length = 0 self.player.direction = None self.player.x = [50] self.player.y = [50] self.player.speed = 0 self.active = False def endApp(self): self.running = False def startApp(self): self.drawGame() self.drawSnake() self.drawApple() pygame.display.flip() self.player.speed = 0 while self.running: if self.active: self.clock.tick(40 + (self.player.speed * 5)) for event in pygame.event.get(): if event.type == pygame.QUIT: self.endApp() if event.type == pygame.KEYDOWN: self.player.change_direction(event.key) # if snake eats apple if self.player.snakeHeadPos() == self.apple.pos(): # add snake body self.player.add_body() # generate new apple self.apple.newApple() #increase score and speed self.player.incScore() self.player.speed += 1 # if snake hits itself if self.player.snakeHeadPos() in self.player.snakeBodyPos(): if messagebox.askyesnocancel( 'Game over.', 'You ran into yourself! Do you want to start over?' ) == True: self.startOver() else: self.endApp() #if snake hits edge of window if self.player.snakeHeadY() < 0 or self.player.snakeHeadY( ) == 600 or self.player.snakeHeadX( ) < 0 or self.player.snakeHeadX() == 600: if messagebox.askyesnocancel( 'Game over.', 'You ran into yourself! Do you want to start over?' ) == True: self.startOver() else: self.endApp() self.player.move() self.updateGame() else: #waits for key input for event in pygame.event.get(): if event.type == pygame.QUIT: self.endApp() if event.type == pygame.KEYDOWN: self.player.change_direction(event.key) self.active = True