基于小TFT显示器的一款棋盘游戏
扫描二维码
随时随地手机看文章
1970年,约翰·康威(John Conway)为他所谓的零玩家游戏制定了规则,理论上,你需要一个无限大的棋盘。
如果你不熟悉康威的生命游戏,有数百万的网页告诉你。在这个所谓的游戏中,理论上你需要一个无限大的棋盘,而这个棋盘并不存在。但是你的板上的元素越多越好。不幸的是,康威的规则并没有告诉你当相邻的细胞位于棋盘的边界之外时应该发生什么。因此,如果滑翔机接近边界,它将变成一个由2x2元素组成的稳定正方形,并停留在那里,直到最终被另一个物体撞击。
一些初步考虑如何展示
使用UNO R4 WiFi的12x8 LED矩阵没有乐趣,micro bit或Calliope的5x5矩阵也没有乐趣。我得到的最小的TFT显示器是ST7735S 1.8英寸,160 x 128像素。
原理图——硬件
原理图是直接的;请参阅Adafruit说明如何将引脚8到13连接到显示器。由于没有可用的护盾,我自己设计了一个。
该软件
首先你需要做数学计算:编程这款游戏,你需要存储所有像素的状态,给出20480像素。即使您在一个字节中存储8位,您仍然需要2560字节,这是标准UNO R3所不具备的。此外,如果您显示的元素非常密集,将很难正确地看到它们。所以我决定用一个2x2像素的正方形来表示一个元素,并且与下一个正方形的距离为一个像素。这导致以下计算:
宽度:160 / (2 + 1)= 53.3
高度:128 / (2 + 1)= 42.6
这仍然需要53 x 42 = 2226个位置来存储,但是当您在一个字节中存储8位时,您只需要279个字节。实际上,你还需要更多,因为康威规则告诉你要在前一代的基础上计算新一代,只要你还需要,你就不能覆盖和破坏前一代。问题是访问字节中的某个位可能非常耗时,所以您需要找到一种方法来绕过它。见附件一。
如果您想查看最大分辨率,请下载最后一个附件。别忘了拿一面好看的镜子。
一旦您完成了这一切,您就会想要用一些或多或少为人熟知的模式来测试您的代码。我决定通过使用连接到引脚A0的跳线来选择它们……A4。
我的TFT库
由于计算许多细胞需要大量时间,我想使用一个新的ARDUINO UNO R4板。问题是,标准库不适用于R4。所以我坐下来写了一个适用于R3和R4的程序(附件三)。猜猜游戏在哪个棋盘上运行得更快?无论如何,由于R4有更多的内存,代码可以简化很多,因为您不必以字节为单位压缩位。见附件二。
一些截图显示了可能的情况:
本文编译自hackster.io