猫史档案馆


【Python作品分享】生命游戏(元胞自动机)【作品秀】

用户:BC_driverBC_driver查看:5 回复:4 评论:5 创建时间:2020-02-02T12:31:26


【作品展示】

center_image

 

【作品介绍】

生命游戏游戏规则只有四条:

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


回复

上一页1 页 / 共 1下一页
夜白之灭夜白之灭

你腻害

点赞1


评论


GG小杨GG小杨

没用呀

 

点赞0


评论


BC_driverBC_driver

woc,我才发现,这不会有输入限制吧...对不起大家,我会重传的emotion_编程猫_搓头

点赞0


评论


BC_driverBC_driver

https://shequ.codemao.cn/community/234960

点赞0


评论