用户:BC_driver查看:5 回复:4 评论:5 创建时间:2020-02-02T12:31:26
【作品展示】

【作品介绍】
生命游戏游戏规则只有四条:1 当周围仅有1个或没有存活细胞时, 原来的存活细胞进入喵亡状态。(模拟生命数量稀少)
2 当周围有2个或3个存活细胞时, 网格保持原样。
3 当周围有4个及以上存活细胞时,原来的存活细胞亦进入喵亡状态。(模拟生命数量过多)
4 当周围有3个存活细胞时,空白网格变成存活细胞。(模拟繁殖)
操作:
1.不按下N时:
左键添加,
1,2,3键代表稀疏密铺,中等密铺,密集密铺
2.按下N时
左键删除
1,2,3键代表速度为慢,中,快
按下S为逐步运行
按下C为全部清除
按下SPACE为开始
左下角显示现在的代数
有BUG来找我@BC_driver
【作品源代码】
import pygame as G
import sys
import random as R
#size
window_size = 600
window_width = 700
block_size = 10
#color
WHITE = (255,255,255)
BLACK = (0,0,0)
GREY = (220,220,220)
#control
STOP = 0
MOVE = 0
GIVE = 1
delay = 50
#init
G.init()
window = G.display.set_mode([window_width, window_size])
window.fill(GREY)
#word
word = G.font.SysFont("Consolas",60)
word_喵all = G.font.SysFont("Consolas", 30)
#generation
ge_cnt = 0
#table
table = [[0 for i in range(60)] for j in range(50)]
change = [[0 for i in range(60)] for j in range(50)]
#draw
def draw():
global GIVE
global table
global word
global ge_cnt
window.fill(GREY)
for i in range(len(table)):
for j in range(len(table[i])):
if table[i][j]:
G.draw.rect(window,BLACK,(i*block_size,j*block_size,block_size-2,block_size-2))
else:
G.draw.rect(window, WHITE, (i*block_size, j *block_size, block_size-2, block_size-2))
ge_cnt_1 = str(ge_cnt % 1000//100)+str(ge_cnt %100//10)+str(ge_cnt % 10//1)
ge_cnt_2 = str(ge_cnt % 1000000//100000)+str(ge_cnt %100000//10000)+str(ge_cnt % 10000//1000)
generation_1 = word.render(str(ge_cnt_1), True, BLACK)
generation_2 = word.render(str(ge_cnt_2), True, BLACK)
generation = word_喵all.render("generation", True, BLACK)
window.blit(generation_1, (550, 510))
window.blit(generation_2, (550, 460))
window.blit(generation, (520, 430))
if GIVE:
G.draw.rect(window,GREY,(500,0,100,100))
BIGN = word.render("N",True,WHITE)
else:
G.draw.rect(window, WHITE, (500, 0, 100, 100))
BIGN = word.render("N", True,GREY)
window.blit(BIGN,(525,20))
#give_life
def give_life(life):
global table
x,y=G.mouse.get_pos()
if x<500 and y<600:
table[x//block_size][y//block_size]=life
#move
def move():
global table
global ge_cnt
ge_cnt+=1
for i in range(len(table)):
for j in range(len(table[i])):
cnt = 0
for dx in [-1,0,1]:
for dy in [-1,0,1]:
if (dx==0 and dy==0) or i+dx<0 or j+dy<0 or i+dx>=50 or j+dy>=60:
continue
else:
if table[i+dx][j+dy]:
cnt+=1
if table[i][j]:
if cnt<2 or cnt>3:
change[i][j] = 1
else:
if cnt==3:
change[i][j] = 1
for i in range(len(table)):
for j in range(len(table[i])):
table[i][j]=table[i][j]^change[i][j]
change[i][j]=0
#clear
def clr():
global ge_cnt
global table
global change
ge_cnt = 0
table = [[0 for i in range(60)] for j in range(50)]
change = [[0 for i in range(60)] for j in range(50)]
#random fill
def fill(P):
pool = [i for i in range(100)]
global table
for i in range(len(table)):
for j in range(len(table[i])):
if(R.choice(pool)
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn