diff options
author | Peter Ward <peteraward@gmail.com> | 2009-09-29 18:51:59 +1000 |
---|---|---|
committer | Peter Ward <peteraward@gmail.com> | 2009-09-29 18:51:59 +1000 |
commit | e972d4ddb37cede87215591a90b587b7666d1df8 (patch) | |
tree | 9daad2c581284ab0e777fc9b5a3b6fad7ab75fbe /snake.py | |
parent | 5ecd377f1bf309d203ba1a2b9a8b09efed6c5bf3 (diff) |
Separated out snake and pygame code.
Diffstat (limited to 'snake.py')
-rw-r--r--[-rwxr-xr-x] | snake.py | 124 |
1 files changed, 1 insertions, 123 deletions
@@ -2,7 +2,6 @@ from __future__ import division -import time import string from random import randint from collections import deque @@ -11,36 +10,9 @@ import traceback from common import * -import pygame -pygame.init() -from pygame.locals import * - -def scale_aspect((source_width, source_height), (target_width, target_height)): - source_aspect = source_width / source_height - target_aspect = target_width / target_height - if source_aspect > target_aspect: - # restrict width - width = target_width - height = width / source_aspect - else: - # restrict height - height = target_height - width = height * source_aspect - return (width, height) - class SnakeEngine(object): - EDGE_COLOR = (255, 255, 255) - EDGE_WIDTH = 1 - - def __init__(self, rows, columns, n_apples, width=800, height=600, fullscreen=False): + def __init__(self, rows, columns, n_apples): super(SnakeEngine, self).__init__() - flags = 0 - if fullscreen: - flags |= pygame.FULLSCREEN - self.screen = pygame.display.set_mode((width, height), flags) - - self.width = width - self.height = height self.letters = list(string.lowercase) self.letters.reverse() @@ -71,23 +43,6 @@ class SnakeEngine(object): x, y = self.get_random_position() self.board[y][x] = Squares.APPLE - # make board surface - self.board_width, self.board_height = scale_aspect( - (columns, rows), (self.width, self.height) - ) - self.surface = pygame.Surface((self.board_width, self.board_height)) - - # load sprites - xscale = self.board_width / self.columns - yscale = self.board_height / self.rows - - def load_image(image): - new_size = scale_aspect(image.get_size(), (xscale, yscale)) - return pygame.transform.smoothscale(image, new_size) - - self.apple = load_image(Sprites.APPLE) - self.eyes = load_image(Sprites.EYES) - def add_bot(self, bot, colour=None): """ A bot is a callable object, with this method signature: @@ -118,34 +73,6 @@ class SnakeEngine(object): del self.bots[letter] - def draw_board(self): - xscale = self.board_width / self.columns - yscale = self.board_height / self.rows - - # Draw grid. - for y, row in enumerate(self.board): - for x, cell in enumerate(row): - left = int(x * xscale) - top = int(y * yscale) - w = int((x + 1) * xscale) - left - h = int((y + 1) * yscale) - top - r = Rect(left, top, w, h) - - # Draw a square. - pygame.draw.rect(self.surface, self.EDGE_COLOR, r, - self.EDGE_WIDTH) - - # Draw the things on the square. - if cell == Squares.APPLE: - self.surface.blit(self.apple, r.topleft) - - elif cell.isalpha(): # Snake... - colour = self.bots[cell.lower()][1] - self.surface.fill(colour, r) - - if cell.isupper(): # Snake head - self.surface.blit(self.eyes, r.topleft) - def update_snakes(self, directions_id=id(directions)): assert id(directions) == directions_id, \ "The common.directions dictionary has been modified since startup..." @@ -197,52 +124,3 @@ class SnakeEngine(object): print '-'*60 self.remove_bot(letter) - def run(self): - clock = pygame.time.Clock() - - running = True - while running and self.bots: - for event in pygame.event.get(): - if event.type == pygame.QUIT or \ - (event.type == pygame.KEYDOWN and event.key == K_ESCAPE): - running = False - break - if not running: break - - # Clear the screen. - self.screen.fill((0, 0, 0)) - self.surface.fill((0, 0, 0)) - - # Draw the board. - self.draw_board() - - # Center the board. - x = (self.width - self.board_width) / 2 - y = (self.height - self.board_height) / 2 - self.screen.blit(self.surface, (x, y)) - - # Update the display. - pygame.display.flip() - clock.tick(20) - - # Let the snakes move! - self.update_snakes() - - if running: - time.sleep(2) - - # Early window close, late process cleanup. - pygame.display.quit() - -if __name__ == '__main__': - from bots import * - from oldbot import BotWrapper - - game = SnakeEngine(25, 25, 50) - game.add_bot(right_bot) - game.add_bot(random_bot) - game.add_bot(random_bounds_bot) - game.add_bot(random_square_bot) - game.add_bot(BotWrapper('oldbots/peter.py')) - game.run() - |