
【Bumbershoot Software介绍】这是迈克尔·马丁Michael Martin软件实验的综合网站菜单包含[主页]、[平台指南]、[项目]、[技术方法]等内容。【在 PICO - 8 上实现模拟进化】过去几周写文章让作者疲惫完成后想放松用高级语言做简单事且不考虑写文章。但事与愿违又有了新项目。期间作者悠闲地花一个下午用 [PICO - 8] 对 [模拟进化] 进行了移植。要让其正常运行需整合各种技术方法下面将讲述遇到的挑战、解决办法及相关旧项目。【实现模拟】第一个挑战是编写模拟程序本身。作者之前用 C 语言或汇编语言实现而 PICO - 8 需用其 Lua 方言编程。幸运的是Lua 用起来舒适改编 C 代码较顺利但并非完全精确。原始 BASIC 代码有小问题C 代码让过程更一致Lua 版本设计不同一致性也不同。之前实现把“虫子”生物放数组处理死亡和分裂时会对迭代器做处理。Lua 实现用类似“for - each”循环用哈希表创建了 **BORN** 和 **DIED** 表收集更改迭代结束后操作。不过之前实现新生“虫子”出生回合模拟Lua 实现则不会但都比原始行为好。【将屏幕内存用作实际内存】作者想重现把精灵表用作屏幕额外后备缓冲区的技巧以高效跟踪和渲染浮游生物。但精灵表索引区域与所需区域不同解决方案是借鉴 [Commodore 64 移植版] 的逻辑。PICO - 8 的地图功能是位图块放置的增强版作者预留图块排列网格编写函数返回精灵表空间坐标。然而屏幕和精灵表大小限制无法一次性显示整个世界解决办法是允许用户滚动显示PICO - 8 滚动大地图更方便且相关命令可对绘图操作转换和限制区域。作者决定让“虫子”为精灵精灵表位图跟踪浮游生物给出了 **DRAW()** 例程代码。世界边界可滚动**CAMERA()** 实现所需效果。【避开系统限制】PICO - 8 数字限制在 16 位有符号整数范围作者模拟程序依赖无符号 16 位数字和高随机数。不过PICO - 8 数字是 32 位定点数将值除以 2 可正常工作且其 Lua 方言允许移位操作使用负数无需特殊处理。【处理元数据】《模拟进化》的“伊甸园”可修改环境影响“虫子”进化行为。作者在 [在 PICO - 8 上移植的《熄灯游戏》] 了解了 **MENUITEM()** 功能添加“伊甸园”开关和重置模拟方法配置不丢失。重置方式与《熄灯游戏》“新谜题”选项相同“伊甸园”需在处理程序中自我修改显示状态给出了菜单代码。项目图形数据需外部提供作者用 Python 生成地图数据PICO - 8 有数据导入功能作者可导入图像和“卡带标签”还引入图标但作者自认像素艺术水平欠佳。【不足之处】最大不足是卡顿即使模拟 60Hz 更新只使用 PICO - 8 CPU 的 60%开启加速模式会跳帧。作者也不支持自定义种子依赖 PICO - 8 内置 RNG虽可解决但因无键盘输入种子选择简单化。【下载】卡带艺术图以隐写方式编码程序还添加到 [项目页面] 的 SimEvo 集合源代码放在 [Bumbershoot Software 的 GitHub 仓库]。下次将开启新项目。