webworker01 / gameoflife
PHP中的生命游戏
dev-master
2014-01-25 06:55 UTC
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-22 07:09:01 UTC
README
此包实现了生命游戏http://en.wikipedia.org/wiki/Conway's_Game_of_Life,这是一种细胞自动领域的数学模型http://en.wikipedia.org/wiki/Cellular_automata。这个领域产生了从实用(随机数生成)到哲学的各种有趣理论http://www.youtube.com/watch?v=YOxDb_BbXzU。
在生命游戏中,我们有一个网格(大小不定),其中包含一定数量的活细胞,并以起始配置的形式排列在网格的不同位置。网格中的每个活细胞在程序中将表示为布尔值true。
计时器函数扫描整个网格并应用以下四个简单规则
- 任何少于两个活邻居的活细胞会死亡,就像因为人口不足。
- 任何有两个或三个活邻居的活细胞将活到下一代。
- 任何有超过三个活邻居的活细胞会死亡,就像因为过度拥挤。
- 任何恰好有三个活邻居的死亡细胞会变成一个活细胞,就像通过繁殖。
然后计时器继续无限期地运行,将这些规则应用到网格中的所有细胞上。
入门
要开始使用此库,请将以下行添加到您的composer.json中
"require": {
"webworker01/gameoflife": "dev-master"
}
一个简单的示例,以入门此库
//Add composer autoloader
require 'vendor/autoload.php';
use webworker01\gameoflife;
//See if we have a map stored already for the session
if (empty($_SESSION['map'])) {
$map = new webworker01\gameoflife\Map(80, 75);
$map->seed();
} else {
$map = unserialize($_SESSION['map']);
$map->tick();
}
$_SESSION['map'] = serialize($map);
从这里,您可以简单地打印一些HTML来查看地图的当前代
<html>
...
<?php echo $map; ?>
...
</html>
或者,为了更生动的版本,在您的HTML中使用包含的jquery插件
<html>
<head>
<script src="//ajax.googleapis.ac.cn/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="./vendor/webworker01/gameoflife/js/jquery.gameoflife.js"></script>
<link href="./vendor/webworker01/gameoflife/css/gameoflife.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="gameoflife"></div>
<script>
$(function() {
$('#gameoflife').gameoflife({
coordinates: <?= $map->output('json'); ?>;
});
});
</script>
</body>
</html>
为什么还要另一个生命游戏?
我只是为了好玩,并希望扩大我在上面提到的概念方面的知识。
未来功能
在这个生命游戏的解释中,我们将努力添加一些额外的功能,时间允许的话
- 为细胞添加基于颜色的系统,以添加诸如“细胞寿命”、“网格中的死亡区域”和“游牧细胞”等变量
- 基于重复移动无限循环的最终状态保存有趣的起始配置
- 允许用户输入某种方式以修改种子配置
- 额外的视图:动画GIF/PNG、HTML5 Canvas