Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/snake/rev/9486211ec334
Дата изменения: Unknown
Дата индексирования: Mon Oct 1 23:57:34 2012
Кодировка:
snake: 9486211ec334

snake

changeset 111:9486211ec334

damn
author Alex Martynov <martiran@kodomo.fbb.msu.ru>
date Mon, 20 Dec 2010 12:58:35 +0300
parents d29a90f5095d
children 2d048c0ed5e3
files engine.py main.py snake.py
diffstat 3 files changed, 30 insertions(+), 21 deletions(-) [+]
line diff
     1.1 --- a/engine.py	Mon Dec 20 12:13:11 2010 +0300
     1.2 +++ b/engine.py	Mon Dec 20 12:58:35 2010 +0300
     1.3 @@ -5,6 +5,9 @@
     1.4  directions = [(0,1), (1,0), (0,-1), (-1,0)]
     1.5  tm = [[0, -1], [1, 0]]
     1.6  
     1.7 +class Dict(dict):
     1.8 +    pass
     1.9 +
    1.10  class Cell(object):
    1.11      def __init__(self, x, y, canvas = None):
    1.12          self.x = x
    1.13 @@ -14,13 +17,14 @@
    1.14          self.type = 'empty'
    1.15          return
    1.16      def redraw(self):
    1.17 -        field_size = min(self.canvas.winfo_height(), self.canvas.winfo_width())
    1.18 -        offset = ((self.canvas.winfo_width() - field_size)/2.0, (self.canvas.winfo_height() - field_size)/2.0)
    1.19 -        x0=offset[0] + self.x*field_size/21.0
    1.20 -        y0=offset[1] + self.y*field_size/21.0
    1.21 -        x1=offset[0] + (self.x+1)*field_size/21.0
    1.22 -        y1=offset[1] + (self.y+1)*field_size/21.0
    1.23 -        x2=offset[0] + (self.x+1/2.0)*field_size/21.0
    1.24 +        field_geometry = min(self.canvas.winfo_height(), self.canvas.winfo_width())
    1.25 +        f_s = float(self.field.size)
    1.26 +        offset = ((self.canvas.winfo_width() - field_geometry)/2.0, (self.canvas.winfo_height() - field_geometry)/2.0)
    1.27 +        x0=offset[0] + self.x*field_geometry/f_s
    1.28 +        y0=offset[1] + self.y*field_geometry/f_s
    1.29 +        x1=offset[0] + (self.x+1)*field_geometry/f_s
    1.30 +        y1=offset[1] + (self.y+1)*field_geometry/f_s
    1.31 +        x2=offset[0] + (self.x+1/2.0)*field_geometry/f_s
    1.32          if self.type == 'wall':
    1.33              self.canvas.create_rectangle(x0, y0, x1, y1, fill="grey")
    1.34              pass
    1.35 @@ -60,18 +64,21 @@
    1.36          self.h = min(canvas.winfo_height(), canvas.winfo_width())
    1.37          self.snakes = [None, None, None, None]
    1.38          self.init_field()
    1.39 +        self.start_snake_length = 10
    1.40          return
    1.41      def init_field (self):
    1.42 -        self.field = {}
    1.43 -        for x in range(21):
    1.44 -            for y in range(21):
    1.45 +        self.field = Dict()
    1.46 +        self.field.size = 27
    1.47 +        f_s = self.field.size
    1.48 +        for x in range(f_s):
    1.49 +            for y in range(f_s):
    1.50                  self.field[x, y] = Cell(x, y, self.canvas)
    1.51 -        for y in range(21):
    1.52 +        for y in range(f_s):
    1.53              self.field[0, y].type = 'wall'
    1.54 -            self.field[20, y].type = 'wall'
    1.55 -        for x in range(1,20):
    1.56 +            self.field[f_s-1, y].type = 'wall'
    1.57 +        for x in range(1,f_s-1):
    1.58              self.field[x, 0].type = 'wall'
    1.59 -            self.field[x, 20].type = 'wall'
    1.60 +            self.field[x, f_s-1].type = 'wall'
    1.61          self.refill()
    1.62          self.redraw()
    1.63          return
    1.64 @@ -112,8 +119,9 @@
    1.65  
    1.66      def create_snake(self, snake_number):
    1.67          cells_id = []
    1.68 -        for y in range(10):
    1.69 -            cells_id.append((10, y+1))
    1.70 +        f_s = self.field.size
    1.71 +        for y in range(self.start_snake_length):
    1.72 +            cells_id.append(((f_s+1)/2, y+1))
    1.73          for rot_num in range(snake_number - 1):
    1.74              for i, cell in enumerate(cells_id):
    1.75                  cells_id[i] = ((tm[0][0]*(cell[0]-10) + tm[0][1]*(cell[1]-10))+10,(tm[1][0]*(cell[0]-10) + tm[1][1]*(cell[1]-10))+10)
    1.76 @@ -128,8 +136,9 @@
    1.77          self.snakes[snake_number-1] = snake.Snake(cells, color_dic[snake_number])
    1.78          return self.snakes[snake_number-1]
    1.79      def refill(self):
    1.80 -        for x in range(1,20):
    1.81 -            for y in range(1,20):
    1.82 +        f_s = self.field.size
    1.83 +        for x in range(1,f_s-1):
    1.84 +            for y in range(1,f_s-1):
    1.85                  self.field[x, y].type = 'empty'
    1.86                  self.field[x, y].snake = None
    1.87                  pass
     2.1 --- a/main.py	Mon Dec 20 12:13:11 2010 +0300
     2.2 +++ b/main.py	Mon Dec 20 12:58:35 2010 +0300
     2.3 @@ -50,7 +50,7 @@
     2.4              return
     2.5          self.step_id = self.step_id+1
     2.6          self.engine.step()
     2.7 -        self.after_id = self.canvas.after(300, self.run())
     2.8 +        self.after_id = self.canvas.after(300, self.run)
     2.9          if self.step_id == 200:
    2.10              self.end()
    2.11              pass
     3.1 --- a/snake.py	Mon Dec 20 12:13:11 2010 +0300
     3.2 +++ b/snake.py	Mon Dec 20 12:58:35 2010 +0300
     3.3 @@ -46,9 +46,9 @@
     3.4          """Mark every cell in `self.cells` as belonging to self."""
     3.5          for cell in self.cells:
     3.6              cell.snake = self
     3.7 +        for cell in self.cells:
     3.8 +            cell.type = 'body'
     3.9          self.cells[0].type = 'head'
    3.10 -        for cell in self.cells[1:-1]:
    3.11 -            cell.type = 'body'
    3.12          self.cells[-1].type = 'tail'
    3.13          return
    3.14