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