2015-03-28 4 views
0

Это игра из жизни. Когда я его протестировал, моя окружающая (строка, col) функция вернула 0, даже если в файле конфигурации указано, что 8 квадратов будут сделаны «LIVE». Просто запустил тест, распечатав доску после открытия конфигурационного файла, и, оказывается, вместо того, чтобы сделать указанные квадраты «LIVE», те, что есть «LIVE», говорят «Нет», поэтому значения «LIVE» не подсчитываются.Почему значения «превращаются» в «None» вместо «LIVE»?

[[None, None, None, 0, 0, 0, 0], [None, 0, None, 0, 0, 0, 0], [None, None, None, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0] , [0, 0, 0, 0, 0, 0, 0]] - это то, что я получаю, когда я print board. Не видите, что мне здесь не хватает?

LIVE = 1 
DEAD = 0 

def board(canvas, width, height, n): 
    for row in range(n+1): 
     for col in range(n+1): 
      canvas.create_rectangle(row*height/n,col*width/n,(row+1)*height/n,(col+1)*width/n,width=1,fill='black',outline='green')      

n = int(raw_input("Enter the dimensions of the board: ")) 
width = n*25 
height = n*25 

from Tkinter import * 
import math 

window=Tk() 
window.title('Game of Life') 

canvas=Canvas(window,width=width,height=height,highlightthickness=0) 
canvas.grid(row=0,column=0,columnspan=5) 

board = [[DEAD for row in range(n)] for col in range(n)] 

rect = [[None for row in range(n)] for col in range(n)] 


for row in range(n): 
    for col in range(n):  
     rect[row][col] = canvas.create_rectangle(row*height/n,col*width/n,(row+1)*height/n,(col+1)*width/n,width=1,fill='black',outline='green') 

#canvas.itemconfigure(rect[2][3], fill='red') #rect[2][3] is rectangle ID 

#print rect 

f = open('filename','r') #filename is whatever configuration file is chosen that gives the step() function to work off of for the first time 
for line in f: 
    parsed = line.split() 
    print parsed 
    if len(parsed)>1: 
     row = int(parsed[0].strip()) 
     col = int(parsed[1].strip()) 
     board[row][col] = LIVE 
     board[row][col] = canvas.itemconfigure(rlist[row][col], fill='red')   

def surrounding(row,col): 
    count = 0 
    if board[(row-1) % n][(col-1) % n] == LIVE: 
     count += 1 
    if board[(row-1) % n][col % n] == LIVE: 
     count += 1 
    if board[(row-1) % n][(col+1) % n] == LIVE: 
     count += 1 
    if board[row % n][(col-1) % n] == LIVE: 
     count += 1 
    if board[row % n][(col+1) % n] == LIVE: 
     count += 1 
    if board[(row+1) % n][(col-1) % n] == LIVE: 
     count +=1 
    if board[(row+1) % n ][col % n] == LIVE: 
     count += 1 
    if board[(row+1) % n][(col+1) % n] == LIVE: 
     count += 1 
    print count 
    return count 

surrounding(1,1) 

ответ

5

Вы назначая к элементам вашего board вложенного списка дважды:

board[row][col] = LIVE 
    board[row][col] = canvas.itemconfigure(rlist[row][col], fill='red') 

Первые правопреемников 1 к соответствующему значению, второй заменяет 1 с None, так как это возвращаемое значение из canvas.itemconfigure при вызове с этими аргументами. Я подозреваю (без тестирования), что вы должны просто удалить задание из второго утверждения:

board[row][col] = LIVE 
    canvas.itemconfigure(rlist[row][col], fill='red') 

Это все еще может иметь проблемы (например, rlist необходимости быть rect, возможно?), Но проблема с None значений должны быть разрешены.

Смежные вопросы