生命遊戲 ,VB

2021-04-02 20:10:07 字數 3718 閱讀 7638

出差***累死,還用vb 做,還***這點公尺,無聊,寫個小東西:

「生命遊戲」

本世紀70年代,人們曾瘋魔一種被稱作「生命遊戲」的小遊戲,這種遊戲相當簡單。假設有乙個像棋盤一樣的方格網,每個方格中放置乙個生命細胞,生命細胞只有兩種狀態:「生」或「死」。遊戲規則如下:

1、如果乙個細胞周圍有3個細胞為生(乙個細胞周圍共有8個細胞),則該細胞為生,即該細胞若原先為死,則轉為生,若原先為生,則保持不變;

2、如果乙個細胞周圍有2個細胞為生,則該細胞的生死狀態保持不變;

3、在其它情況下,該細胞為死,即該細胞若原先為生,則轉為死,若原先為死,則保持不變。

依此規則進行迭代變化,使細胞生生死死,會得到一些有趣的結果。該遊戲之所以被稱為「生命遊戲」,是因為其簡單的遊戲規則,反映了自然界中的生存規律:如果乙個生命,其周圍的同類生命太少的話,會因為得不到幫助而死亡;如果太多,則會因為得不到足夠的資源而死亡。

vb project 「生命遊戲」

1.介面很簡單,乙個start button,乙個label

2.**:

'by metaphy

'2006-2-24

option explicit

private awidth as integer

private aheight as integer

private ax as integer

private ay as integer

private sidelen as integer

private orgstat as variant      '細胞初始態

private endstat as variant      '結束態

'初始常量

private sub form_load()

'    mainfrm.backcolor = rgb(180, 180, 180)

ax = 50

ay = 50

sidelen = 105

awidth = 100

aheight = 70

redim orgstat(100, 70) as integer

redim endstat(100, 70) as integer

end sub

'畫布初始

private sub initcanvas()

dim i, j as integer

for i = 0 to awidth

line (ax + i * sidelen, ay)-(ax + i * sidelen, ay + aheight * sidelen)

next

for j = 0 to aheight

line (ax, ay + j * sidelen)-(ax + awidth * sidelen, ay + j * sidelen)

next

end sub

'畫布重畫

private sub recanvas()

dim i, j as integer

for i = 0 to awidth - 1

for j = 0 to aheight - 1

if endstat(i, j) = 1 then

'line (ax + i * sidelen, ay + j * sidelen)-(ax + (i + 1) * sidelen, ay + (j + 1) * sidelen), rgb(255, 255, 0), bf

line (ax + i * sidelen + 1, ay + j * sidelen - 1)-(ax + (i + 1) * sidelen + 1, ay + (j + 1) * sidelen - 1), rgb(0, 0, 0), bf

else

line (ax + i * sidelen + 1, ay + j * sidelen - 1)-(ax + (i + 1) * sidelen + 1, ay + (j + 1) * sidelen - 1), rgb(255, 255, 255), bf

end if

if i = awidth - 1 then line (ax, ay + j * sidelen)-(ax + awidth * sidelen, ay + j * sidelen)

next

line (ax + i * sidelen, ay)-(ax + i * sidelen, ay + aheight * sidelen)

next

i = awidth

j = aheight

line (ax + i * sidelen, ay)-(ax + i * sidelen, ay + aheight * sidelen)

line (ax, ay + j * sidelen)-(ax + awidth * sidelen, ay + j * sidelen)

end sub

'迭代,得到細胞狀態

private sub changestate(times as integer)

dim i, j, tim as integer

dim lives as integer

for i = 0 to awidth - 1

for j = 0 to aheight - 1

randomize

orgstat(i, j) = int(2 * rnd)

endstat(i, j) = 0

next

next

for tim = 0 to times - 1

for i = 1 to awidth - 2     '最外面一層不參與

for j = 1 to aheight - 2

lives = 0

lives = orgstat(i - 1, j - 1) + orgstat(i, j - 1) + orgstat(i + 1, j - 1) _

+ orgstat(i - 1, j) + orgstat(i + 1, j) _

+ orgstat(i - 1, j + 1) + orgstat(i, j + 1) + orgstat(i + 1, j + 1)

if lives = 2 then

endstat(i, j) = orgstat(i, j)

elseif lives = 3 then

endstat(i, j) = 1

else

endstat(i, j) = 0

end if

next

next

for i = 0 to awidth

for j = 0 to aheight

orgstat(i, j) = endstat(i, j)

next

next

next

end sub

'顯示部分資訊

private sub someinfo(times as string)

label1.caption = "迭代次數:" + times

end sub

private sub start_click()

dim times as integer

randomize

times = int(200 * rnd + 1)

call someinfo(str(times))

call changestate(times)

call recanvas

end sub

Algorithm Gossip 生命遊戲

file name arithmetic.c creat data 2015.1.31 author zy algorithm gossip 生命遊戲 生命遊戲 game of life 為1979年由英國數學家j.h.conway 所提出的,某一細胞的鄰居包括上,下,左,右,左上,左下,右上與右下...

演算法 生命遊戲

問題描述 在乙個環境中,有很多細胞,細胞的位置周圍,上,下,左,右,左上,左下,右上,右下,八個方位 如果這個細胞周圍存在乙個及乙個一下,則下一代會消失 如果這個細胞周圍存在四個及四個以上,則下一代會消失 如果這個細胞周圍存在兩個或三個,則下一代保留 如果這個位置,本來沒用細胞,但是周圍有三個細胞,...

康威生命遊戲

規則生命遊戲中,對於任意細胞,規則如下 每個細胞有兩種狀態 存活或死亡,每個細胞與以自身為中心的周圍八格細胞產生互動 如圖,黑色為存活,白色為死亡 當前細胞為存活狀態時,當周圍的存活細胞低於2個時 不包含2個 該細胞變成死亡狀態。模擬生命數量稀少 當前細胞為存活狀態時,當周圍有2個或3個存活細胞時,...