最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

当前位置: 主页 > 电脑DIY > 手机数码 >

诺基亚5110液晶的游戏生活

时间:2017-05-16 21:30来源:未知 作者:admin 点击:
生成初始的随机状态,商店这是一款A的SRAM 计算从一到B在SRAM。 输出B在SRAM展示 重复步骤2和3直到永远! conway.ino 下载 思想processes.pdf 下载 步骤4:其他计算方法 我一直在寻找更有效的方式做考平的GOL其他代
诺基亚5110液晶的游戏生活

<i>大学宿舍一般不允许你有宠物的房间</i>。即使你没有养宠物,你必须全身心地投入时间和金钱来喂它,维护它的环境。然而,有时还是不错的除了你的室友的房间有另一个生命…

给数字生活的尝试!

今天我要告诉我如何让考平的生命在Arduino纳米游戏,显示在诺基亚5110液晶屏。硬件设置也应该让你去探索其他的元胞自动机算法和游戏人生。

我喜欢看考平的生命游戏,一群细菌或微生物。通过一个随机生成的地图和一个简单的规则集,康威的生命游戏可以让你与不同的生命形态,结构和序列的显示。它就像一个数字的培养皿或鱼缸,你可以检查为牵引。

附加文件

我附上有关康威的生命游戏,你会发现一个有趣的几本书。

  • “元胞自动机的艺术。pdf”这有很多例子,其他算法和元胞自动机的模式,你可能会感兴趣的尝试
  • “图灵的生命游戏机的通用性。pdf”-考平的生命游戏可以使国家机器和电脑
  • “元胞自动机.pdf”混乱的数学的东西,我不明白

一个最有价值的外卖,我从读数是<em>复杂性来自相互作用的简单规则,随着时间的推移</em>,如果你仔细想想,事情似乎很复杂的近距离,可以从远处看起来很简单。但复杂/简单的系统并不重要,因为它是一个更加美丽和无限系统的重要组成部分。

其他注意事项

我想做一个物理平台尝试了元胞自动机的算法不同,最常见的是考平的游戏人生,所以我将步行通过代码。

这是Arduino纳米,与外部SRAM存储器,和一个诺基亚5110的屏幕。

它很慢。我在寻找一种更有效的方法。我不擅长的代码,但这是我迄今为止。

 
  • 细胞automata.pdf艺术细胞automata.pdf艺术
    下载
  • 图灵的life.pdf游戏机的通用性图灵的life.pdf游戏机的通用性
    下载
  • 细胞automata.pdf细胞automata.pdf
    下载

步骤1:部分

零件
  • 2个按钮
  • 1电位器
  • 1 Arduino
  • 1诺基亚5110的屏幕
  • 23k256 SRAM芯片

其他的东西如果你想跟随我的可怕的设置

  • 手机电池(从Galaxy S7不是最好)
  • 对于Arduino插入标题
  • 有一个开关(我用跳线)

步骤2:组装电路

组装电路

这里是一个原理图和线路板图如何连接一切!我焊接到一个约束板,所以我没有任何电路板跟随。附上的Fritzing文件。

关系不是功能太重要了,因为我们有很多的IO端口一个Arduino的工作。基本的SRAM连接到SPI,LCD屏幕连接但是你配置在PCD8544图书馆,和按钮和电位器连接到一些IO引脚。

 
  • nokia_5110_lcd.fzpznokia_5110_lcd.fzpz
    下载
  • 康威platform.fzz康威platform.fzz
    下载

步骤3:概述代码

概述代码

本文将简要概述如何每一代在这段代码中计算。这绝对不是处理记忆或做计算的最有效的方法。<strong>请你们拿出让这个过程更有效</strong>!在这段代码中,生命都是一个字节的内存。它需要外部SRAM来存储所有的生命形式(除非你使用一个Arduino MEGA)。SPI通信速度慢,所以计算速度是有限的。

附上代码。

如果你想要<strong>更多的信息</strong>,你可以查看附件我有我的涂鸦。

生成初始的随机状态->一


		

/ *******************这个函数生成随机********************* / initialrandom() { void

为(int i = 0;i < 8064;i++){ SRAM。write_stream(我,pixoff,1);} 为(int i = 0;i <坐;i++){ int randx =随机(0,84); int兰迪=随机(0、48); 显示。drawpixel(randx、兰迪、黑); / / randx和兰迪写同一件事的nopixel矩阵 SRAM。write_stream((84×兰迪+ randx),Pixon,1); } 显示。打印(0);/ *************************可以禁用这里的代数******************* / 显示。设置鼠标指针(0、40);

这部分代码选择随机像素打开。该生物的密度取决于电位器阅读。该代码显示这些像素和他们也一部分的SRAM,我会打电话给“写道:”。

从A到B的计算


		

/ *********************计算产生从1到2 ******************* / void calcNextGen() { //goes from 1 to 2 // for (i = 4032; i<8064 ; i++) {SRAM.write_stream(i, pixoff, 1);} //clear 2 for (i = 0; i < 4032 ; i++) { numNeighbors = 0; //reset neighbors per pixel SRAM.read_stream(i, income, 1); x = (i) % 84; y = (i - x) / 84; findNeighbors(x, y); //[AxAy+BxBy+CxCy+DxDy+ExEy+FxFy+GxGy+HxHy] numNeighbors = countNeighbors(Ax, Ay) + countNeighbors(Bx, By) + countNeighbors(Cx, Cy) + countNeighbors(Dx, Dy) + countNeighbors(Ex, Ey) + countNeighbors(Fx, Fy) + countNeighbors(Gx, Gy) + countNeighbors(Hx, Hy); //<2||>3 DIE, =3 LIVE, =2 same if (numNeighbors == 2) { //do nothing } else if (numNeighbors == 3) { SRAM.write_stream(i + 4032, pixon, 1); } else { SRAM.write_stream(i + 4032, pixoff, 1); } } }

这部分代码看起来像素的状态”。

考平的游戏人生,这部分代码计数的邻居数量(8周围像素)细胞来确定它的下一个状态(死的或活的)。如果有2个邻居,一个细胞是它的当前状态。如果有3个邻居,一个细胞会活着还是活着的。其他任何数量的邻居,细胞会死。如果你看<em>countneighbors()</em>和<em>findneighbors()</em>附件中的代码,你会发现更多的细节。

在确定一个细胞的未来状态,新的状态存储在SRAM的“B”。

输出B到A


		

/ *********************从2显示***************************** / 无效dispgen() { // 2显示 为(i = 4032;i < 8064;i++){ SRAM。read_stream(我的收入,1); X =(I - 4032)% 84; y =(I - 4032 - x)/ 84; 如果(收入[ 0 ] = =“W”) { 显示。drawpixel(X,Y,黑色); SRAM。write_stream(I - 4032的像元,1); } 别的 { 显示。drawpixel(x,y,白色); SRAM。write_stream(我4032、pixoff,1);} } generationcount + +; 显示。打印(generationcount);/ *************************可以禁用生成数这里******************* / 显示。设置灯光(0

在这一步中,储存在“B”会显示并存储在一个“SRAM是什么。”B“在下一个周期。

    #p#分页标题#e#
  1. 生成初始的随机状态,商店这是一款“A”的SRAM
  2. 计算从“一”到“B”在SRAM。
  3. 输出“B”“”在SRAM展示

重复步骤2和3直到永远!

 
  • conway.inoconway.ino
    下载
  • 思想processes.pdf思想processes.pdf
    下载

步骤4:其他计算方法

其他的计算方法

我一直在寻找更有效的方式做考平的GOL其他代码在线,我发现ticklemynausea的代码。

http:/ /依据。GitHub。COM / ticklemynausea / fef80472743…

该代码是很酷!每一个生命体存储为一个单位。8生物组(1字节)是在一个时间的计算。这需要的内存比我的代码量少8倍。每个字节计算,从上到下,从左到右的诺基亚5110的屏幕和线条完美的PCD8544驱动的运作方式。它非常快,你可以看到在视频。

我修改的代码有点让它包裹的世界。

然而,因为它运行在一个时间一个字节,你可能会注意到,这不是真正的全屏。我开始注意到生命过早死亡好像撞到一堵无形的墙,它不应该存在的生命,和细胞彼此不发生相互作用。

如果有人知道如何解决这个问题,请分享!这将消除需要外部存储器使GOL操作更迅速!

 
  • ticklemynausea printout.pdfticklemynausea printout.pdf
    下载
  • betterwow.inobetterwow.ino
    下载
  • betterwrap.inobetterwrap.ino
    下载

步骤5:Holstein的游戏人生

当然,还有其他的算法,你可以探索和投入到你的Arduino。这里是另一个元胞自动机的程序可以运行的例子。该代码是连接。

http://www.rendell-attic.org/ca/holstein/index.htm

发现在150页的“艺术的元胞自动机”:

荷斯坦牛是一个鲜为人知的元胞自动机规则b35678 / s4678。它采用8细胞为康威的生命游戏然而细胞出生,如果有3、5、6相同的街区,7或8的邻居和生存,如果有4,6,7或8的邻居。这个规律是对称的,在一个活细胞死亡的细胞背景图案表现完全一样,在一个活细胞的死细胞相同的图案背景。结果一般是相当无聊,大部分模式就变得一文不值。有几个小的稳定模式和小的振荡器和三个大型滑翔机被发现[ 41 ]。

规则如下:

 

  • 如果有3,5,6个细胞是活的,7或8的邻居
  • 一个细胞在不管是什么如果它有4个邻居
  • 否则,它死了。

 

 
  • holstein.inoholstein.ino
    下载

步骤6:焊接施工

焊接施工

这一步是由你来决定你想怎么安排你的设置!我没有很多手头的材料做一个漂亮的外壳,但我鼓励你去寻找你的数字的培养皿中一个受人尊敬的安排!

你可以找到具体的细节我建立了我的图片设置。

步骤7:完成!

完成!

祝贺你!如果你遵循的原理是正确的,你现在有一个好的数字坦克不同的元胞自动机!有乐趣,尝试不同的规则和算法,并且不要忘记分享你的代码,以便其他人可以尝试不同的宠物!

有许多方法可以改进的代码。一些方法我能想到的是:

 

  • 让每一个生命体大于1像素,因此计算生活
  • 计算一个而不是一个字节的时间点(处理内存少)
  • 提高代码以便你可以输入规则,而不需要改变代码块的开始

 

分享你的结果!感谢


(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片