1. 程式人生 > >pygame生命遊戲模擬_python Game of life生命棋畫素級別模擬作者:李興球

pygame生命遊戲模擬_python Game of life生命棋畫素級別模擬作者:李興球

"""Conway's Game of Life),又稱康威生命棋,是英國數學家約翰·何頓·康威在1970年發明的細胞自動機。
本程式用pygame模擬這種現象,作者:李興球,風火輪少兒程式設計 www.scratch8.net

以前早就聽說過Game of Life,以為好高大上的樣子,今天仔細看下,好簡單的模擬啊,基本原理就是遍歷一個二維表格,然後判斷周圍的點數達到什麼要求就把自己設為什麼狀態即可。這裡的二維表格就是圖片上的畫素,它們每個點都有X,Y座標。設一種非黑的顏色,表示這個點是活的。黑色的畫素點表示它是死的。每遍歷一次後,顯示一次。再加點程式碼就能把所有的幀輸出到gif檔案裡做成gif動畫了。


"""
import pygame 
from random import randint

pygame.init()
life_color = (222,211,0,255)          #有顏色的代表活的,黑色代表死的
width,height = 200,200
screen = pygame.display.set_mode((width,height))
pygame.display.set_caption("生命遊戲模擬_風火輪少兒程式設計李興球")

life_image = pygame.Surface((width,height))

for i in range(5000):                 #初始化5000個活的


    x = randint(0,width)
    y = randint(0,height)
    life_image.set_at((x,y),life_color)

def get_numbers(x,y):
    """得到周圍顏色點數量,也就是活的數量"""
    counter = 0 
    for i in range(-1,2):
        for j in range(-1,2):
            if i==0 and j ==0 :continue    #自己就跳過
            x1 = x + i   ; y1 = y + j
            if x1 >= 0 and x1< width and y1>=0 and y1<height:
                color = life_image.get_at((x1,y1))                 
                if color == life_color:counter = counter + 1
 
    return counter


while True:     
    for  x in range(width):
        for y in range(height):
          cell = life_image.get_at((x,y))
          cell_number = get_numbers(x,y)         #得到周圍活的細胞數量
          if cell == life_color:                              #該細胞為活的              
              if cell_number == 3 or cell_number==2 :continue   #周圍有2個或3個,它還是活的
              if cell_number < 2 or cell_number >3 :life_image.set_at((x,y),(0,0,0)) #小於2個,大於3個,它死了
          else:
              if cell_number == 3 : life_image.set_at((x,y),life_color)  #周圍有3個,復活
 
    screen.blit(life_image,(0,0))    #把life_image渲染到screen上.
    pygame.display.update()         #更新螢幕顯示


"""
1、規則

生命遊戲中,對於任意細胞,規則如下。每個細胞有兩種狀態:存活或死亡,每個細胞與以自身為中心的周圍八格細胞產生互動。

當前細胞為存活狀態時,當週圍低於2個(不包含2個)存活細胞時, 該細胞變成死亡狀態。(模擬生命數量稀少)
當前細胞為存活狀態時,當週圍有2個或3個存活細胞時, 該細胞保持原樣。
當前細胞為存活狀態時,當週圍有3個以上的存活細胞時,該細胞變成死亡狀態。(模擬生命數量過多)
當前細胞為死亡狀態時,當週圍有3個存活細胞時,該細胞變成存活狀態。 (模擬繁殖)
--------------------- 

pygame.image.save(life_image,"te.png")
"""