Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/cca/rev/eef739e055f4
Дата изменения: Unknown
Дата индексирования: Mon Oct 1 23:08:56 2012
Кодировка: Windows-1251
cca: eef739e055f4

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