我試圖複製康威的生命遊戲,儘管我的代碼似乎是猶太潔食,但它似乎並不像它應該那樣行事。爲什麼我的康威的生命遊戲表現怪怪?
這是它的基本肉:
if (pressingSpace) {
running = true;
} else {
running = false;
};
if (running) {
for (var i=0; i<tiles.length; i++) {
var tile = tiles[i];
if (tile.alive && (tile.neighborsAlive() < 2 || tile.neighborsAlive() > 3)) {
tile.die();
};
if (!tile.alive && tile.neighborsAlive() == 3) {
tile.comeToLife();
};
};
};
for (var i=0; i<tiles.length; i++) {
var key = tiles[i];
if (!key.alive && mouseDown && key.sprite.contains([cursorX,cursorY]) && cursorX != null) {
key.comeToLife();
}
};
所有播放功能都經過全面測試,似乎按預期方式工作。但是當它運行時,「活着的」方塊似乎比他們應該更容易超出屏幕。特別是當一個柱子製成三個瓷磚高度時,它在下一個框架上消失,當它按照規則在同一時間在兩側產生兩個「活動」瓷磚時。
我懷疑這與操作順序有關。我是否需要爲狀態變化「標記」適當的瓦片,而不是現場更改它們?我知道Conway有很多實現,但我正在努力開發自己的產品。這就是說,任何在正確的方向推動將不勝感激。謝謝!
你可以看到它在這裏的行動:http://www.eggborne.com/tiles
非常感謝!製作緩存鄰居/生命狀態數據的功能是解決方案! – user2493615
不客氣。順便說一句,使用單一陣列(沒有舊/新的狀態作弊)實施生命遊戲是完全有可能的,但要讓它正確有點更具挑戰性。如果你這樣做是爲了自我教育,你也可能會覺得這很有趣。 – toriningen