一丶
先說說這個題目吧,還是第一次接觸這種型別的題目:生命遊戲中,對於任意細胞,規則如下:
每個細胞有兩種狀態-存活或死亡,每個細胞與以自身為中心的周圍八格細胞產生互動。
當前細胞為存活狀態時,當周圍低於2個(不包含2個)存活細胞時, 該細胞變成死亡狀態。(模擬生命數量稀少)
當前細胞為存活狀態時,當周圍有2個或3個存活細胞時, 該細胞保持原樣。
當前細胞為存活狀態時,當周圍有3個以上的存活細胞時,該細胞變成死亡狀態。(模擬生命數量過多)
當前細胞為死亡狀態時,當周圍有3個存活細胞時,該細胞變成存活狀態。 (模擬繁殖)
可以把最初的細胞結構定義為種子,當所有在種子中的細胞同時被以上規則處理後, 可以得到第一代細胞圖。按規則繼續處理當前的細胞圖,可以得到下一代的細胞圖,周而復始。
二丶 1.看到這個題目的第一反應是將整個生命環境看作乙個矩陣,其中的每乙個細胞以二維座標的形式存在於環境中,那麼這個細胞類就有三個屬性在生命遊戲中的:x座標,y座標,生命狀態。但是,這樣做了以後發現兩個問題:
1)環境邊界處的細胞生命狀態判斷實現很難。
2)細胞之間的生命狀態無法實現關聯關係。
2.之後是將單個細胞單獨做乙個(basicunit類),還是以3*3九宮格的方式判段我們抽象出來的單元細胞的生命狀態,再將其放入生命遊戲沙盤(lifegame類)中演變,當然,還是寫乙個細胞資訊類(cell類)將從basicunit類中判斷得來的細胞生命狀態和在lifegame類中的座標兩個資訊儲存起來。
3.到此,整個生命遊戲的實現邏輯就構建好了,接下來就是編碼實現的事情了。
4.編碼過程中遇到很多坑,這裡就不多提了,碰到的坑都是為了以後少進坑做貢獻。
5.下面講這三個類**貼出來(不能直接跑,用了單元測試,測試每個類的邏輯是否實現,要跑的話需要自己寫乙個run類)
basicunit類:
package org.coach.tdd.template;
/** * created by lzy on 17-6-3.
*//**
* basicunit類判斷單元細胞的生命狀態。
*/public
class
basicunit
/*** .
* 獲得單元細胞生命狀態
**@param basicunit 該細胞周圍細胞生命狀態
*@return 該細胞生命狀態
*/public
intgetunitcelltatus(int basicunit) else }}
}if (3 == numberofcell) else
if (2 == numberofcell)
return
0; }
}
cell類:
package org.coach.tdd.template;
/** * created by lzy on 17-6-3.
*//**
* cell類儲存細胞的座標,生命狀態,周圍細胞狀態。
*/public
class
cell
public
intgetlocation_x()
public
intgetlocation_y()
public
intgetcellstatus()
public
void
setcellstatus(int cellstatus)
/*** 獲取更新後的細胞狀態
**@return
*/public
intgetafterturncellstatus()
}
lifegame類:
package org.coach.tdd.template;
/** * created by lzy on 17-6-3.
*//**
* lifegame類生命遊戲具體操作類
*/public
class
lifegame
public
int getnextframe()
public
void
setframe(int frame)
public
void
init()
public
void
putcell(cell cell)
public
intlocationiscorner(int x, int y) else
if (0 == x && framesize - 1 == y) else
if (framesize - 1 == x && 0 == y) else
if (framesize - 1 == x && framesize - 1 == y)
return
0; }
public
intlocationisline(int x, int y) else
if (framesize - 1 == x && 0 != y && framesize - 1 != y) else
if (0 == y && 0 != x && framesize - 1 != x) else
if (framesize - 1 == y && 0 != x && framesize - 1 != x)
return
0; }
/*** 獲取指定座標細胞周圍細胞狀態
**@param x cell_x座標
*@param y cell_y座標
*@return 指定座標細胞周圍細胞狀態
*/public
int getaroundstatus(int x, int y) , , };
break;
}case
2: , , };
break;
}case
3: , , };
break;
}case
4: , , };
break;
}default:
break;}}
//line
else
if (isline != 0) , , };
break;
}case
12: , , };
break;
}case
13: , , };
break;
}case
14: , , };
break;
}default:
break;
}} else , , };
}return aroundunit;
}/**
* 更新環境中所有細胞生命狀態
**@return 環境中是否還在活著的細胞
*/public
boolean
isfreshframe()
}for (int i = 0; i < framesize; i++)
system.out.println("");
}system.out.println("");
for (int i = 0; i < framesize; i++)
system.out.print(nextframe[i][j]);
}system.out.println("");
}// flag=true;
return haslife;
}/**
* 執行整個生命遊戲
**@param lifegame 生命遊戲的初始物件
*@return 執行成功
*/public
boolean
run(lifegame lifegame)
return
true;
}}
細胞自動機(矩陣優化)
description 乙個細胞自動機包含n個格仔,每個格仔的取值為0 m 1。給定距離d,則每次操作後每個格仔的值將變為到它距離不超過d的所有格仔在操作之前的值之和除以m的餘數,其中i和j的距離為min。給定n,m,d,k和自動機各格仔的初始值,你的任務是計算k次操作以後各格仔的值。如下圖,n 5...
Game of Life 細胞自動機?生命遊戲?
生命遊戲 game of life 是二維的細胞自動機,由劍橋大學的數學家 john horton conway 於 1970 年所提出的。他構想 一群細胞於平面中以一定的條件成長時,會受到什麼制約 他認為細胞不會無限制的成長,於是他定義細胞在過度孤單與擁擠時會死亡,這樣的構想使他提出比 john ...
細胞自動機(思博 模擬)
題目描述 細胞自動製造公司最近剛剛獲得批量生產零件的新工藝專利。它的方法使 用到包含兩種細胞狀態的二維網格,每個單元的細胞要麼為空,要麼為滿。當然,具體的細節是專有的。最初,網格中的一組單元被填充為需要複製的細胞副本。進過一系列離散的步 驟,網格中的每個單元會根據自身及附近的八個單元的狀態同步進行細...