生命游戏

无聊,写这个东东玩.

规则:

某个点周围仅有2个点alive,并且这个点本身也是alive状态的,则在下一桢保持.或者点周围有三个alive的点为alive.换成程序代码其实很简单.

(pre_state == ALIVE)  && (value == 2) || (value == 3)

当然了其实真个逻辑都很简单的.如下

for(int y = range.rows().begin();y<range.rows().end();y++){
            for(int x = range.cols().begin();x<range.cols().end();x++){
                int value = 0;            
                Statue pre_state = DEAD;
                Statue *p_stat = pre_map.status;
                if(0<x && x<cols - 1 && 0<y && y <rows - 1){
                    value = p_stat[(y-1)*cols + x-1] + p_stat[(y-1)*cols + x] +   p_stat[(y-1)*cols + x+1] +
                            p_stat[y*cols + x-1] +                                p_stat[y*cols + x+1] +
                            p_stat[(y+1)*cols + x-1] + p_stat[(y+1)*cols + x] + p_stat[(y+1)*cols + x+1];

                    pre_state = p_stat[y*cols + x];
                    if((pre_state == ALIVE)  && (value == 2) || (value == 3)){
                        nex_map.status[y*cols + x] = ALIVE;
                    }else{
                        nex_map.status[y*cols + x] = DEAD;
                    }
                }                
            }
        }

其中无聊使用了tbb加速.

其实生命游戏园子里已经有人写好了.

野比的 http://www.cnblogs.com/conmajia/archive/2012/05/31/life-game-note.html c#版,而且修改过的.

http://eyehere.net/2011/chaos-python-game-of-life/ 学pygame时看到的一个加密版的.

生命游戏有意思的不是规则,是在于规则所组合成的效果.在看这本书是看到的http://www.mathworks.cn/moler/exm/index.htmlmatlab他爹写的,当然了matlab他爹还写了三篇博客专门介绍生命游戏http://blogs.mathworks.com/cleve/ 额,在中间.

我的里面的"lexicon.txt"是从matlab他爹的代码里翻的,然后解释显示(写得很搓).

自己也切换着看了看.

整体上看生命游戏分了几种.

1.保持模式.就是一直是这样了

2.周期模式.一段时间后又变回去如(中间的点一直在转)

3.运动模式.一个整体向某个方向运动,里面还有一个大的飞机.如

4.生成模式.周期性的

周期性的生成一个运动模式的单元.如

5.乱七八糟模式.o(∩_∩)o .自己看啦..

传个可运行的放下面,同时我也把matlab他爹的代码也打包在里面,自己玩吧.

ps.打包操作很NX. Matlab代码.

      n = size(X,1);
      p = [1 1:n-1];
      q = [2:n n];
   
      % Count how many of the eight neighbors are alive.
  
      Y = X(:,p) + X(:,q) + X(p,:) + X(q,:) + ...
          X(p,p) + X(q,q) + X(p,q) + X(q,p);
      
      % A live cell with two live neighbors, or any cell with
      % three live neigbhors, is alive at the next step.
   
      X = (X & (Y == 2)) | (Y == 3);

直接免去了循环.

 

//pps.附件怎么搞....

生命游戏

 

posted @ 2012-10-08 09:59  zhuangzhuang1988  阅读(608)  评论(0编辑  收藏  举报