生命游戏
无聊,写这个东东玩.
规则:
某个点周围仅有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.附件怎么搞....