cca
changeset 20:eef739e055f4
Completed Automata: change_size, import from State, default states
author | darkhan |
---|---|
date | Sat, 04 Dec 2010 23:28:47 +0300 |
parents | 38f357feb56e |
children | bb4a79cc6b6e |
files | Automata.py |
diffstat | 1 files changed, 46 insertions(+), 7 deletions(-) [+] |
line diff
1.1 --- a/Automata.py Sat Dec 04 22:38:04 2010 +0300 1.2 +++ b/Automata.py Sat Dec 04 23:28:47 2010 +0300 1.3 @@ -1,12 +1,18 @@ 1.4 +from State import * 1.5 + 1.6 class Automata(object): 1.7 #field[][] - Хранит символ состояния 1.8 #states[] 1.9 #symbols = {} - символ: номер_в_states 1.10 1.11 - def __init__(self, width, height, states): 1.12 + def __init__(self, width, height, states=None): 1.13 self.width = width 1.14 self.height = height 1.15 - self.states = states 1.16 + if states == None: 1.17 + self.states = [State("Dead", ' ', white, [5]), 1.18 + State("Alive", '+', black, [1] + range(4, 9))] 1.19 + else: 1.20 + self.states = states 1.21 self.symbols = {} 1.22 for num, st in enumerate(self.states): 1.23 self.symbols[st.symbol] = num 1.24 @@ -44,25 +50,58 @@ 1.25 def change_size(self, value, side): 1.26 "0-up, 1-right, 2-down, 3-left" 1.27 new_field = [] 1.28 + 1.29 if side == 0: 1.30 self.height += value 1.31 for row in range(value): 1.32 new_field.append([]) 1.33 for col in range(self.width): 1.34 new_field[row].append(states[0].symbol) 1.35 - for row in range(value, self.height): 1.36 - if row < 0: continue 1.37 + init = value 1.38 + if value < 0: 1.39 + init = 0 1.40 + for row in range(init, self.height): 1.41 new_field.append([]) 1.42 for col in range(self.width): 1.43 new_field[row].append(self.field[row - value][col]) 1.44 + 1.45 if side == 2: 1.46 self.height += value 1.47 - for row in range(0, self.height): 1.48 - if row > self.height + value - 1: continue 1.49 + term = -value 1.50 + if value > 0: 1.51 + term = 0 1.52 + for row in range(self.height - term): 1.53 new_field.append([]) 1.54 for col in range(self.width): 1.55 new_field[row].append(self.field[row][col]) 1.56 for row in range(self.height, self.height + value): 1.57 new_field.append([]) 1.58 for col in range(self.width): 1.59 - new_field[row].append(states[0].symbol) 1.60 \ No newline at end of file 1.61 + new_field[row].append(states[0].symbol) 1.62 + 1.63 + if side == 1: 1.64 + self.width += value 1.65 + term = -value 1.66 + if value > 0: 1.67 + term = 0 1.68 + for row in range(self.height): 1.69 + new_field.append([]) 1.70 + for col in range(self.width - term): 1.71 + new_field[row].append(self.field[row][col]) 1.72 + for row in range(self.height): 1.73 + for col in range(self.width, self.width + value): 1.74 + new_field[row].append(states[0].symbol) 1.75 + 1.76 + if side == 3: 1.77 + self.width += value 1.78 + for row in range(self.height): 1.79 + new_field.append([]) 1.80 + for col in range(value): 1.81 + new_field[row].append(states[0].symbol) 1.82 + init = value 1.83 + if value < 0: 1.84 + init = 0 1.85 + for row in range(self.height): 1.86 + for col in range(init, self.width): 1.87 + new_field[row].append(self.field[row][col - value]) 1.88 + self.field = new_field 1.89 \ No newline at end of file