本期题目
一起来玩生命游戏~
这是一款二维平面游戏,模拟生命的演化过程,规则十分简单:
如果一个生命体周围少于2生命体,那么该生命体会因为人口缺少而在下一轮死去,这个格子变成了空地。
如果一个生命体周围大于3个生命体,那么该生命体会因为人口的过度拥挤,资源匮乏,而在下一轮死去。这个格子变成空地。
如果一个生命体周围有2-3个生命体,那么该生命体能在下一轮继续活下去。
如果一个空地周围有3个生命体,那么该空地在下一轮会繁殖出新的生命体
总结起来就是:有生命的格子,仅当周围存在2~3个生命体才能存活下来;无生命的格子,仅当周围有3个生命体,才能孕育出生命。
维基百科上的动图十分生动,可以看看 https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
这次的任务是给出初始的五个格子,说出在第几轮的时候,演化出最多的生命体
来源:千里码 → 传送门
正经
首先看看这个图是怎么演化的 传送
各种方向四处飞,初始化个很大的地图模拟过程应该是不行了= =
考虑上方自己写代码的时候,其实用到的只有生命体和它周围的8个格子,那么是否可以只存下这些生命体的坐标位置?
最终方案为:字典键记录生命体坐标,值记录周围生命体个数,每次迭代做一次备份,循环演化即可。
闲谈
生命体游戏啊,很早就想写一个了,理想中是写个图形界面的,这次用控制台输出感觉也不错,哈哈哈。
感觉题目介绍的无边界地图和我的认知稍微不同。个人认为的无边界是伪无边界,程序本身有存一份很大的地图,然后随着角色的走动,动态加载其中的一部分。
本题给我的感觉是只记录必要信息= =
来张帅气的控制台图:
本期代码链接 → 传送门
广告时间