[英]I'm trying to make conway game of life but something happening
edit: i made a huge mistake in the qeustion don't bother trying to help.编辑:我在问题中犯了一个巨大的错误,不要费心去帮忙。
I'm trying but when ever run the code, I get a window that I can draw on but when i run (which i set the button to key pad enter) the simulation, it get rid of all the cell.我正在尝试,但是当我运行代码时,我得到了一个 window ,我可以在上面绘制,但是当我运行(我将按钮设置为键盘输入)模拟时,它摆脱了所有单元格。 code:
代码:
import pygame,sys,math
from pygame.constants import USEREVENT
pygame.init()
srceen_size = (900,900)
srceen = pygame.display.set_mode(srceen_size)
pygame.display.set_caption("conway game of life")
clock = pygame.time.Clock()
def D_list(list):
list2 = []
for i in list:
if i not in list2:
list2.append(i)
return list2
fps = 120
chuck = (320,320)
cell = []
cell_color = (120, 120, 139)
cell_size = 18
cell_delete = False
movement = USEREVENT
cell_create = False
cell_moving = False
cell_re = False
list_dumbie = []
index1 = 0
index4 = 0
gen = []
index2 = 0
index3 = 0
new_gen = []
celless = True
pygame.time.set_timer(movement, 3000)
while True:
clock.tick(fps)
if cell_create == True:
pos_mouse = pygame.mouse.get_pos()
x,y = pos_mouse
X = x % 20
Y = y % 20
index2 = index2 + 1
x, y = x - X, y - Y
cell.append((x,y))
cell = D_list(cell)
cell.sort()
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
sys.exit()
if event.key == pygame.K_KP_ENTER:
if cell_moving == True:
cell_moving = False
else:
cell_moving = True
if event.key == pygame.K_LSHIFT:
if cell_re == False:
cell_re = True
if cell_re == True:
cell_re = False
if event.type == pygame.MOUSEBUTTONDOWN:
if cell_re == False:
cell_create = True
cell_delete = False
if cell_re == True:
cell_create = False
cell_delete = True
if event.type == pygame.MOUSEBUTTONUP:
if cell_create == True:
cell_create = False
if cell_delete == True:
cell_delete = False
if event.type == movement: #this is where i had problem
if cell_moving == True:
for a in cell:
list_dumbie = cell
list_dumbie.pop(index1)
for b in list_dumbie:
if b[0] == a[0] - cell_size or b[0] == a[0] + cell_size:
if b[1] == a[1] - cell_size or b[1] == a[1] + cell_size:
index4 = index4 + 1
if index4 == 3 or index4 == 4:
new_gen.append(a)
index4 = 0
index1 = index1 + 1
cell = new_gen
new_gen = []
cell.sort()
index1 = 0
if event.type == pygame.KEYUP:
if event.key == pygame.K_LSHIFT:
cell_re = False
srceen.fill((22, 22, 22))
for x,y in cell:
pygame.draw.rect(srceen,cell_color,(x+1,y+1,cell_size,cell_size))
pygame.display.update()
also conway game of life is a cellular automata.康威生命游戏也是一个元胞自动机。 there only two rules
只有两条规则
First you have to count the neighbours of the cells.首先,您必须计算单元格的邻居。 Create a grid that shows whether a cell is alive and a second grid where you count the neighbors of each living cell.
创建一个网格来显示一个单元格是否活着,并创建一个第二个网格来计算每个活单元格的邻居。 Based on the data from these 2 girdes, you can implement the rules and make a new list of living cells:
根据这 2 个大梁的数据,您可以实施规则并制作新的活细胞列表:
while True:
# [...]
for event in pygame.event.get():
# [...]
if event.type == movement:
if cell_moving == True:
alive = [[False] * 45 for _ in range(45)]
ncount = [[0] * 45 for _ in range(45)]
for a in cell:
i, j = a[0] // 20, a[1] // 20
alive[j][i] = True
for k, l in [(-1, -1), (0, -1), (1, -1), (-1, 0), (1, 0), (-1, 1), (0, 1), (1, 1)]:
if 0 <= i+k < 45 and 0 <= j+l < 45:
ncount[j+l][i+k] += 1
new_gen = []
for i in range(45):
for j in range(45):
x, y = i * 20, j * 20
if alive[j][i] and (ncount[j][i] == 2 or ncount[j][i] == 3):
new_gen.append((x, y))
elif not alive[j][i] and ncount[j][i] == 3:
new_gen.append((x, y))
cell = new_gen
cell.sort()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.