用pygame做一个简单的python小游戏---生命游戏

用pygame做一个简单的python小游戏—生命游戏

生命游戏(Game of Life)

生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授设计的一个计算机程序。这个计算机程序是因为它模拟和显示的图像看起来颇似生命的出生和繁衍过程而得名为“生命游戏”。同时生命游戏也是一个二维的元胞自动机。

生命游戏是一个二维网格游戏,这个网格中每个方格居住着一个活着或死了的细胞。一个细胞在下一个时刻的生死取决于相邻8个方格中活着或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因为孤单而死去。在游戏初始阶段,系统会随机产生一部分细胞。由这些初始细胞进行繁衍。

规则:

  • 若细胞为死亡状态,其周围若存在3个存活细胞,则繁衍后该细胞变成存活状态
  • 若细胞为存活状态,其周围若低于2个存活细胞,则繁衍后该细胞变成死亡状态
  • 若细胞为存活状态,其周围若存在2个或3个存活细胞,则繁衍后该细胞状态保持不变
  • 若细胞为存活状态,其周围若高于3个存活细胞,则繁衍后该细胞变成死亡状态

效果图展示:
用pygame做一个简单的python小游戏---生命游戏_第1张图片

附上代码:

import pygame, sys, time, random
width=102   #面板的宽度(外围有一层墙)
high=102  #面板的高度(外围有一层墙)
size=6   #设置绘制的单方格大小

def initialization(arr):   #初始化
    for i in range(high):
        for j in range(width):
            ran=random.random()
            if ran>0.9:
                arr[i][j]=1
            else:
                pass
    return arr

def nextmultiply(arr):    #下一代繁衍
    newarr = [([0] * width) for n in range(high)]
    for i in range(high):
        for j in range(width):
            num=0
            if (i==0 or i==high-1) or (j==0 or j==width-1):
                newarr[i][j]=0
            else:
                num=arr[i-1][j-1]+arr[i-1][j]+arr[i-1][j+1]+arr[i][j-1]+arr[i][j+1]+arr[i+1][j-1]+arr[i+1][j]+arr[i+1][j+1]
                if arr[i][j]==0:  #若原细胞为死亡状态
                    if num==3:
                        newarr[i][j]=1
                else:    #若原细胞为存活状态
                    if num==2 or num==3:
                        newarr[i][j]=1
                    else:
                        newarr[i][j]=0
    return newarr



if __name__ == '__main__':
    color_white = pygame.Color(255, 255, 255)
    color_LightSkyBlue = pygame.Color(135,206,250)
    color_black = pygame.Color(0, 0, 0)
    pygame.init()
    screen = pygame.display.set_mode((width*size, high*size))
    screen.fill(color_white)
    pygame.display.set_caption("生命游戏Game of Life")
    arr = [([0] * width) for i in range(high)]  # 创建一个二维数组
    arr=initialization(arr)
    while(True):
        screen.fill(color_white)
        time.sleep(0.5)
        for i in range(high):
            for j in range(width):
                if arr[i][j]==1:
                    pygame.draw.rect(screen, color_black, (i * size, j * size, size, size))
                elif (i==0 or i==high-1) or (j==0 or j==width-1):
                    pygame.draw.rect(screen, color_LightSkyBlue, (i * size, j * size, size, size))
                else:
                    pass
        for event in pygame.event.get():  # 监听器
            if event.type == pygame.QUIT:
                sys.exit()
        arr = nextmultiply(arr)
        pygame.display.update()

你可能感兴趣的:(小游戏,python,pygame,python,游戏)