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")
"""