1970年,約翰·康威(John Conway)為他所謂的零玩家游戲制定了規(guī)則,理論上,你需要一個無限大的棋盤。
如果你不熟悉康威的生命游戲,有數(shù)百萬的網(wǎng)頁告訴你。在這個所謂的游戲中,理論上你需要一個無限大的棋盤,而這個棋盤并不存在。但是你的板上的元素越多越好。不幸的是,康威的規(guī)則并沒有告訴你當(dāng)相鄰的細胞位于棋盤的邊界之外時應(yīng)該發(fā)生什么。因此,如果滑翔機接近邊界,它將變成一個由2x2元素組成的穩(wěn)定正方形,并停留在那里,直到最終被另一個物體撞擊。
一些初步考慮如何展示
使用UNO R4 WiFi的12x8 LED矩陣沒有樂趣,micro bit或Calliope的5x5矩陣也沒有樂趣。我得到的最小的TFT顯示器是ST7735S 1.8英寸,160 x 128像素。
原理圖——硬件
原理圖是直接的;請參閱Adafruit說明如何將引腳8到13連接到顯示器。由于沒有可用的護盾,我自己設(shè)計了一個。
該軟件
首先你需要做數(shù)學(xué)計算:編程這款游戲,你需要存儲所有像素的狀態(tài),給出20480像素。即使您在一個字節(jié)中存儲8位,您仍然需要2560字節(jié),這是標(biāo)準(zhǔn)UNO R3所不具備的。此外,如果您顯示的元素非常密集,將很難正確地看到它們。所以我決定用一個2x2像素的正方形來表示一個元素,并且與下一個正方形的距離為一個像素。這導(dǎo)致以下計算:
寬度:160 / (2 + 1)= 53.3
高度:128 / (2 + 1)= 42.6
這仍然需要53 x 42 = 2226個位置來存儲,但是當(dāng)您在一個字節(jié)中存儲8位時,您只需要279個字節(jié)。實際上,你還需要更多,因為康威規(guī)則告訴你要在前一代的基礎(chǔ)上計算新一代,只要你還需要,你就不能覆蓋和破壞前一代。問題是訪問字節(jié)中的某個位可能非常耗時,所以您需要找到一種方法來繞過它。見附件一。
如果您想查看最大分辨率,請下載最后一個附件。別忘了拿一面好看的鏡子。
一旦您完成了這一切,您就會想要用一些或多或少為人熟知的模式來測試您的代碼。我決定通過使用連接到引腳A0的跳線來選擇它們……A4。
我的TFT庫
由于計算許多細胞需要大量時間,我想使用一個新的ARDUINO UNO R4板。問題是,標(biāo)準(zhǔn)庫不適用于R4。所以我坐下來寫了一個適用于R3和R4的程序(附件三)。猜猜游戲在哪個棋盤上運行得更快?無論如何,由于R4有更多的內(nèi)存,代碼可以簡化很多,因為您不必以字節(jié)為單位壓縮位。見附件二。
一些截圖顯示了可能的情況:
本文編譯自hackster.io