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