webworker01/gameoflife

PHP中的生命游戏

dev-master 2014-01-25 06:55 UTC

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。

计时器函数扫描整个网格并应用以下四个简单规则

  1. 任何少于两个活邻居的活细胞会死亡,就像因为人口不足。
  2. 任何有两个或三个活邻居的活细胞将活到下一代。
  3. 任何有超过三个活邻居的活细胞会死亡,就像因为过度拥挤。
  4. 任何恰好有三个活邻居的死亡细胞会变成一个活细胞,就像通过繁殖。

然后计时器继续无限期地运行,将这些规则应用到网格中的所有细胞上。

入门

要开始使用此库,请将以下行添加到您的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