Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/snake/rev/5755534e5a8b
Дата изменения: Unknown
Дата индексирования: Tue Oct 2 00:12:18 2012
Кодировка:
snake: 5755534e5a8b

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