Changeset 34:8f8af9ef99e6
Legend:
- Unmodified
- Added
- Removed
-
snake.py
r33 r34 ˆà ˆà 1 import engineˆà ˆà 2 ˆà ˆà 3 def preprocess(line):ˆà ˆà 4 if '//' in line:ˆà ˆà 5 line = line[:line.index('//')]ˆà ˆà 6 line = line.rstrip()ˆà ˆà 7 return lineˆà 1 8 ˆà 2 9 class Snake(object):ˆà òÀæ òÀæ ˆà 5 12 self.color = colorˆà 6 13 self.rules = []ˆà 7 ˆà passˆà 8 ˆà def load (self, file_name):ˆà 9 ˆà snake_file = open(file_name, "r")ˆà 10 ˆà line = snake_file.readline()ˆà 11 ˆà if line.partition(' ')[0] == 'snake':ˆà 12 ˆà self.name = line.partition(' ')[2]ˆà 13 ˆà for line in snake_file:ˆà 14 ˆà if line.partition('\\')[0] == ('' or '\n'):ˆà 15 ˆà continueˆà 16 ˆà else:ˆà 17 ˆà if line.partition(';')[0] != ''ˆà 18 ˆà ˆà 19 ˆà passˆà ˆà 14 ˆà ˆà 15 def load (self, file):ˆà ˆà 16 magic, name = preprocess(file.readline()).split(' ', 1)ˆà ˆà 17 assert magic == "snake", "This is not snake file"ˆà ˆà 18 while True:ˆà ˆà 19 line = preprocess(file.readline())ˆà ˆà 20 if line == 'end':ˆà ˆà 21 breakˆà ˆà 22 assert line == '', "Rules must be separated by empty lines"ˆà ˆà 23 self.rules.append(Rule().load(file))ˆà ˆà 24 ˆà 20 25 def fill (self):ˆà 21 26 for cell in self.cells:ˆà òÀæ òÀæ ˆà 25 30 snake.cells[1:-1].type = 'body'ˆà 26 31 returnˆà ˆà 32 ˆà 27 33 def error (self):ˆà 28 34 passˆà òÀæ òÀæ ˆà 30 36 ˆà 31 37 class Rule(object):ˆà ˆà 38 ˆà ˆà 39 codes = {ˆà ˆà 40 'h': 'head',ˆà ˆà 41 'b': 'body',ˆà ˆà 42 't': 'tail',ˆà ˆà 43 '#': 'wall',ˆà ˆà 44 ' ': 'any',ˆà ˆà 45 '-': 'empty',ˆà ˆà 46 }ˆà ˆà 47 ˆà 32 48 def __init__ (self, snake):ˆà 33 49 self.snake = snakeˆà 34 ˆà self.direction = (1, -1)ˆà 35 ˆà passˆà 36 ˆà def load (self, file, line):ˆà 37 ˆà ˆà 38 ˆà passˆà ˆà 50 self.direction = (1, 0)ˆà ˆà 51 self.pattern = {}ˆà ˆà 52 ˆà ˆà 53 def load (self, file):ˆà ˆà 54 y = 0ˆà ˆà 55 for line in file:ˆà ˆà 56 line = preprocess(line)ˆà ˆà 57 if y == 0 and line == '':ˆà ˆà 58 continueˆà ˆà 59 assert line[-1] == ';', "Rule lines must end with semicolon"ˆà ˆà 60 assert len(line) == 8, "Rule lines must be exactly 7 chars long"ˆà ˆà 61 for x, char in enumerate(line[:8]):ˆà ˆà 62 self.parse_cell(x, y, char)ˆà ˆà 63 y += 1ˆà ˆà 64 ˆà ˆà 65 def parse_cell(self, x, y, char):ˆà ˆà 66 assert char.lower() in self.codes, "Illegal symbol in rule: %s" % charˆà ˆà 67 cell = engine.Cell(x, y, None)ˆà ˆà 68 if char in 'htb':ˆà ˆà 69 if char.islower():ˆà ˆà 70 cell.snake = 'my'ˆà ˆà 71 else:ˆà ˆà 72 cell.snake = 'enemy'ˆà ˆà 73 cell.type = self.codes[char.lower()]ˆà ˆà 74 self.pattern[x, y] = cellˆà ˆà 75 ˆà 39 76 def applies (self, field, x, y):ˆà 40 ˆà ˆà ˆà 77 ˆà 41 78 passˆà 42 79 def rotate (self, rot):ˆà 43 80 passˆà ˆà 81 ˆà ˆà 82 # vim: set ts=4 sts=4 sw=4 et:ˆà
Note: See TracChangeset
for help on using the changeset viewer.