本期题目

一起来玩生命游戏~

这是一款二维平面游戏,模拟生命的演化过程,规则十分简单:

如果一个生命体周围少于2生命体,那么该生命体会因为人口缺少而在下一轮死去,这个格子变成了空地。

如果一个生命体周围大于3个生命体,那么该生命体会因为人口的过度拥挤,资源匮乏,而在下一轮死去。这个格子变成空地。

如果一个生命体周围有2-3个生命体,那么该生命体能在下一轮继续活下去。

如果一个空地周围有3个生命体,那么该空地在下一轮会繁殖出新的生命体

总结起来就是:有生命的格子,仅当周围存在2~3个生命体才能存活下来;无生命的格子,仅当周围有3个生命体,才能孕育出生命。

维基百科上的动图十分生动,可以看看 https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life

这次的任务是给出初始的五个格子,说出在第几轮的时候,演化出最多的生命体

初始图

来源:千里码 → 传送门

正经

首先看看这个图是怎么演化的 传送

各种方向四处飞,初始化个很大的地图模拟过程应该是不行了= =

考虑上方自己写代码的时候,其实用到的只有生命体和它周围的8个格子,那么是否可以只存下这些生命体的坐标位置?

最终方案为:字典键记录生命体坐标,值记录周围生命体个数,每次迭代做一次备份,循环演化即可。

闲谈

生命体游戏啊,很早就想写一个了,理想中是写个图形界面的,这次用控制台输出感觉也不错,哈哈哈。

感觉题目介绍的无边界地图和我的认知稍微不同。个人认为的无边界是伪无边界,程序本身有存一份很大的地图,然后随着角色的走动,动态加载其中的一部分。

本题给我的感觉是只记录必要信息= =

来张帅气的控制台图:

生命游戏控制台

本期代码链接 → 传送门


广告时间

Java学习网站: how2j

VPS: VPS