Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/snake/annotate/020c62119e6f/snake.py
Дата изменения: Unknown
Дата индексирования: Fri Feb 28 20:43:26 2014
Кодировка:
snake: snake.py annotate

snake

annotate snake.py @ 105:020c62119e6f

move_snake() edited
author Alex Martynov <martiran@kodomo.fbb.msu.ru>
date Mon, 20 Dec 2010 11:27:56 +0300
parents 2f56e186e75c
children c68b54a43501
rev   line source
me@44 1 """Guts of snakes."""
me@44 2
me@34 3 import engine
me@34 4
me@34 5 def preprocess(line):
me@44 6 """Remove comments and junk spaces from line of snake definition file."""
me@34 7 if '//' in line:
me@34 8 line = line[:line.index('//')]
me@34 9 line = line.rstrip()
me@34 10 return line
martiran@30 11
martiran@30 12 class Snake(object):
me@44 13 """Snakes.
me@44 14
me@44 15 Attributes:
me@44 16
me@44 17 - `cells` -- list of cells belonging to the snake The first of these cells
me@44 18 becomes head, the last one becomes tail, the rest ar body. If snake has
me@44 19 only one cell, it is tail.
me@44 20 - `color` -- color of snake
me@44 21 - `rules` -- a list of Rule objects
me@44 22 """
me@44 23
martiran@32 24 def __init__ (self, cells, color):
martiran@32 25 self.cells = cells
martiran@32 26 self.color = color
martiran@32 27 self.rules = []
me@34 28
me@34 29 def load (self, file):
me@44 30 """Load snake description from file.
me@44 31
me@44 32 See program design docs for file syntax.
me@44 33 """
me@65 34 for line in file:
me@88 35 magic, self.name = preprocess(line).split(' ', 1)
me@65 36 break
me@34 37 assert magic == "snake", "This is not snake file"
me@65 38 for line in file:
me@65 39 line = preprocess(line)
me@34 40 if line == 'end':
me@34 41 break
me@34 42 assert line == '', "Rules must be separated by empty lines"
me@51 43 self.rules.append(Rule(self).load(file))
me@34 44
martiran@30 45 def fill (self):
me@44 46 """Mark every cell in `self.cells` as belonging to self."""
martiran@32 47 for cell in self.cells:
martiran@32 48 cell.snake = self
Alex@75 49 self.cells[0].type = 'head'
me@45 50 for cell in self.cells[1:-1]:
me@45 51 cell.type = 'body'
Alex@75 52 self.cells[-1].type = 'tail'
martiran@31 53 return
me@34 54
martiran@30 55 class Rule(object):
me@44 56 """Rule defining possible behaviour of snake."""
me@34 57
me@34 58 codes = {
me@34 59 'h': 'head',
me@34 60 'b': 'body',
me@34 61 't': 'tail',
me@34 62 '#': 'wall',
me@34 63 ' ': 'any',
me@34 64 '-': 'empty',
me@34 65 }
me@34 66
martiran@32 67 def __init__ (self, snake):
martiran@32 68 self.snake = snake
me@80 69 self.direction = (0, -1)
me@34 70 self.pattern = {}
me@34 71
me@34 72 def load (self, file):
me@70 73 """Load rule definition from file.
me@70 74
me@70 75 Ignore any leading empty lines.
me@70 76 Return self.
me@70 77 """
me@34 78 y = 0
me@34 79 for line in file:
me@34 80 line = preprocess(line)