snake
changeset 13:5755534e5a8b
Automated merge with ssh://kodomo.fbb.msu.ru/snake
author | Alex Martynov <martiran@kodomo.fbb.msu.ru> |
---|---|
date | Mon, 13 Dec 2010 00:11:13 +0300 |
parents | 0ece930a4d1b a1a766440639 |
children | d7650ea84300 |
files | engine.py |
diffstat | 1 files changed, 65 insertions(+), 6 deletions(-) [+] |
line diff
1.1 --- a/engine.py Sun Dec 12 21:09:45 2010 +0300 1.2 +++ b/engine.py Mon Dec 13 00:11:13 2010 +0300 1.3 @@ -1,3 +1,5 @@ 1.4 +import random as rnd 1.5 + 1.6 directions = [(0,1), (1,0), (0,-1), (-1,0)] 1.7 rtm = [[0, -1], [1, 0]] 1.8 1.9 @@ -28,7 +30,7 @@ 1.10 self.canvas = canvas 1.11 self.w = min(canvas.height, canvas.width) 1.12 self.h = min(canvas.height, canvas.width) 1.13 - self.snakes = [] 1.14 + self.snakes = [None, None, None, None] 1.15 self.init_field() 1.16 return 1.17 def init_field (self): 1.18 @@ -45,24 +47,81 @@ 1.19 return 1.20 def step(self): 1.21 for snake in self.snakes: 1.22 - self.legal_moves() 1.23 - self.move_snake(snake) 1.24 - self.refill() 1.25 + if snake == None: 1.26 + pass 1.27 + else: 1.28 + self.legal_moves() 1.29 + self.move_snake(snake) 1.30 + self.refill() 1.31 + pass 1.32 + pass 1.33 self.redraw() 1.34 return 1.35 def move_snake(self, snake): 1.36 + applied_dir = None 1.37 + for rule in snake.rules: 1.38 + if applied_dir != None: 1.39 + choose_dir = [] 1.40 + for direction in snake.legal_dir: 1.41 + rule.direction = direction 1.42 + if rule.applies() == True: 1.43 + choose_dir.append(direction) 1.44 + pass 1.45 + pass 1.46 + if len(choose_move) != 0: 1.47 + applied_dir = choose_dir[int(rnd.random()*len(choose_dir))] 1.48 + pass 1.49 + pass 1.50 + else: 1.51 + dir_sell = self.field[snake.sells[0].y + applied_dir[0], snake.sells[0].x + applied_dir[1]] 1.52 + if dir_sell.type == 'empty': 1.53 + snake.sells.insert(0,dir_sell) 1.54 + del snake.sells[-1] 1.55 + pass 1.56 + elif (dir_cell.type == 'tail' and dir_cell.snake != snake): 1.57 + snake.sells.insert(0,dir_sell) 1.58 + del dir_cell.snake.sells[-1] 1.59 + pass 1.60 + break 1.61 + pass 1.62 + if applied_dir == None: 1.63 + applied_dir = legal_dir[int(rnd.random()*len(legal_dir))] 1.64 + dir_sell = self.field[snake.sells[0].y + applied_dir[0], snake.sells[0].x + applied_dir[1]] 1.65 + if dir_sell.type == 'empty': 1.66 + snake.sells.insert(0,dir_sell) 1.67 + del snake.sells[-1] 1.68 + pass 1.69 + elif (dir_cell.type == 'tail' and dir_cell.snake != snake): 1.70 + snake.sells.insert(0,dir_sell) 1.71 + del dir_cell.snake.sells[-1] 1.72 + pass 1.73 + pass 1.74 pass 1.75 def create_snake(self, snake_number): 1.76 pass 1.77 def refill(self): 1.78 + for x in range(1,20): 1.79 + for y in range(1,20): 1.80 + self.field[x, y].type = 'empty' 1.81 + pass 1.82 + pass 1.83 + for snake in self.snakes: 1.84 + if snake == None: 1.85 + pass 1.86 + else: 1.87 + snake.sells[0].type = 'head' 1.88 + snake.sells[-1].type = 'tail' 1.89 + snake.sells[1:-1].type = 'body' 1.90 + pass 1.91 + pass 1.92 pass 1.93 def redraw(self): 1.94 pass 1.95 def legal_moves(self, snake): 1.96 snake.legal_dir = [] 1.97 for direction in directions: 1.98 - dir_cell = field[snake.cells[0].y + direction[0], snake.cells[0].x + direction[1]] 1.99 - if (dir_cell.type == 'empty' or (dir_cell.type == 'tail' and dir_cell.snake == 'enemy')): 1.100 + dir_sell = self.field[snake.sells[0].y + direction[0], snake.sells[0].x + direction[1]] 1.101 + if (dir_cell.type == 'empty' or (dir_cell.type == 'tail' and dir_cell.snake != snake)): 1.102 snake.legal_dir.append(direction) 1.103 return 1.104 return