谁有golly汉化 的 生命中的生命 存档

Pages: 1/2
主题 : 代码片段:用shader实现的生命游戏
级别: 新手上路
可可豆: 168 CB
威望: 108 点
在线时间: 76(时)
发自: Web Page
代码片段:用shader实现的生命游戏&&&
本帖被 angellixf 执行加亮操作()
这个程序的功能就是鼎鼎大名的“生命游戏”(不知道的戳这里:http://zh.wikipedia.org/wiki/%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F )。在不用HashLife算法的情况下(想了解这个反直觉地高效的算法有多逆天可去AppStore下载“golly”来玩玩),我这个恐怕是最快的了,因为是直接用GPU去计算嘛。运行效果见文末截图(其中有一点奇怪是不知道为何“世界”并没覆盖整个屏幕而只是一个局部,在其边缘则是无穷发散的。不过这样也挺好,生命游戏要进化得好就必须不限定边界,才能体现出一些奇特的生长性质):首先在Xcode中创建一个cocos2dx工程,在HelloWorldScene.h中往HelloWorld类声明区添加如下成员,并重写draw()方法:
    virtual void draw();
    
    
    CCGLProgram* _golS
    
    CCRenderTexture* _renderTextures[2];
    
    int    _currentB
再将HelloWorld::init()里的原有代码替换为如下内容:
if ( !CCLayer::init() )
    {
        
    }
    CCSize size = CCDirector::sharedDirector()-&getWinSize();
    int pow2Width = ccNextPOT(size.width * CC_CONTENT_SCALE_FACTOR());
    int pow2Height = ccNextPOT(size.height * CC_CONTENT_SCALE_FACTOR());
    (_renderTextures[0] = CCRenderTexture::create(pow2Width, pow2Height))-&retain();
    (_renderTextures[1] = CCRenderTexture::create(pow2Width, pow2Height))-&retain();
    
    ccDrawColor4F(0, 1, 0, 1);
    _renderTextures[_currentBuffer]-&beginWithClear(0, 0, 0, 0);
    for (int x=size.width-1; x&=0; x--)
        for (int y=size.height-1; y&=0; y--)
        {
            if ((float)random() / (float)INT32_MAX &= 0.21828)
            {
                ccDrawPoint(ccp(x,y));
            }
        }
    _renderTextures[_currentBuffer]-&end();
    
    (_golShader = new CCGLProgram)-&initWithVertexShaderByteArray(ccPositionTexture_vert, (GLchar*) CCString::createWithContentsOfFile(CCFileUtils::sharedFileUtils()-&fullPathForFilename(&gol_frag.glsl&).c_str())-&getCString());
    _golShader-&addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
    _golShader-&addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
    _golShader-&link();
    _golShader-&updateUniforms();
    glUniform1f(glGetUniformLocation(_golShader-&getProgram(), &dx&), 1.0 / pow2Width);
    glUniform1f(glGetUniformLocation(_golShader-&getProgram(), &dy&), 1.0 / pow2Height);
    
    
HelloWorld::draw()方法如下:
void HelloWorld::draw()
    _currentBuffer = 1 - _currentB
    _renderTextures[_currentBuffer]-&beginWithClear(0, 0, 0, 0);
    _renderTextures[1 - _currentBuffer]-&getSprite()-&getTexture()-&setShaderProgram(_golShader);
    _renderTextures[1 - _currentBuffer]-&getSprite()-&getTexture()-&drawAtPoint(CCPointZero);
    _renderTextures[_currentBuffer]-&end();
    _renderTextures[_currentBuffer]-&getSprite()-&getTexture()-&drawAtPoint(ccp(0,0));
再在Resources组里新建一个gol_frag.glsl文件,其内容为:
#ifdef GL_ES
varying highp vec2 v_texC
uniform sampler2D CC_Texture0;
void main()
    vec2 tc = vec2(v_texCoord.x, 1.0 - v_texCoord.y);
    int neighbours = 0;
    for (int ix=-1; ix&2; ix++)
    for (int iy=-1; iy&2; iy++)
    {
        if (texture2D(CC_Texture0, tc + vec2(float(ix)*dx, float(iy)*dy)).rgb != vec3(0,0,0))
            neighbours++;
    }
    if (texture2D(CC_Texture0, tc).rgb != vec3(0,0,0))
        neighbours--;
    
    if (neighbours & 2 || neighbours & 3)
        gl_FragColor = vec4(0,0,0,1);
    else if (neighbours == 3)
        gl_FragColor = vec4(0,1,0,1);
    else
        gl_FragColor = texture2D(CC_Texture0, tc);
 下面计算一下总的代码行数:以上在HelloWorld类中添加的代码算上空行也才共计50行,但别忘了init()方法里我是删了向导默认生成的40行代码呀……所以净添加的代码只有十几行而已………………………………………… 来打我呀打我呀打我呀………… 还有人可能会说,shader的代码不算吗?不算,因为那是添加在Resources里的资源文件………………………………好吧别打了别打了我错了还不成吗? [ 此帖被godspeed-01-03 22:14重新编辑 ]
图片:IMG_0619.PNG
图片:IMG_0617.PNG
(6575 K) 下载次数:38
级别: 新手上路
可可豆: 168 CB
威望: 108 点
在线时间: 76(时)
发自: Web Page
回 楼主(godspeed1024) 的帖子
我要参加40行代码比赛!求人气!
级别: 新手上路
可可豆: 168 CB
威望: 108 点
在线时间: 76(时)
发自: Web Page
关于为什么整个“世界”会出现奇怪的“板块漂移”现象,我至今也没找到原因,但是可以肯定生命游戏的算法实现是正确的,因为这是我之前做的一个更完整的生命游戏的简化版,其中还有手势放大和平移功能。[ 此帖被godspeed-01-03 10:41重新编辑 ]
级别: 新手上路
可可豆: 168 CB
威望: 108 点
在线时间: 76(时)
发自: Web Page
之前做的带手势缩放查看的版本。当时是直接用OpenGL函数写的,没用cocos2d-x提供的CCRenderTexture类。用了之后代码简化多了。
(6972 K) 下载次数:14
级别: 新手上路
可可豆: 168 CB
威望: 108 点
在线时间: 76(时)
发自: Web Page
不知为何,直接用OpenGL函数写的就没有“漂移”问题,而用CCRenderTexture的就有问题。不知是否根源于Cocos2d-X本身的BUG?
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
回 楼主(godspeed1024) 的帖子
级别: 新手上路
UID: 161856
可可豆: 13 CB
威望: 46 点
在线时间: 22(时)
发自: Web Page
象牙绘  最精致的校园助手
级别: 风云使者
UID: 83747
发帖: 3865
可可豆: 19534 CB
威望: 19405 点
在线时间: 2397(时)
发自: Web Page
哎呦,很屌哦。
级别: 风云使者
UID: 183396
发帖: 4881
可可豆: 5742 CB
威望: 5905 点
在线时间: 1808(时)
发自: Web Page
骚年,你这么屌,你父母一定会知道的
级别: 精灵王
可可豆: 24891 CB
威望: 25992 点
在线时间: 3388(时)
发自: Web Page
多谢分享!
一直在努力,一直都觉得努力得还不够~~
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版发现golly很有用啊【生命游戏吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,126贴子:
发现golly很有用啊
里面有很多种形式的生命。
手机版里也有很多...我主要看中它可以保存,还有可以自编规则(比如B3/S23),还有就是JvN里也有很多好物,尤其是那个复写机一样的东西(笑眼)
贴吧热议榜
使用签名档&&
保存至快速回贴投稿:1粉丝:8分享--dynmicweibozoneqqbaidu将视频贴到博客或论坛视频地址复制嵌入代码复制微信扫一扫分享收藏0硬币--稍后看马克一下~用手机看转移阵地~用或其他应用扫描二维码手机下视频请使用扫码若未安装客户端,可直接扫此码下载应用看过该视频的还喜欢正在加载...miniOFF一个网页版本的生命游戏,有限循环空间的,自己写着玩的_生命游戏吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,126贴子:
一个网页版本的生命游戏,有限循环空间的,自己写着玩的
支持。同志们,不错,这就是Golly。生命诞生于混沌的边缘,线式的规则却能演化出非凡的现象,欢迎大家加入Golly吧交流讨论~新吧需要你们的支持!传送门:
你的JavaScript写得还行,但我有更快的速度和和无限大的画布,见。
贴吧热议榜
使用签名档&&
保存至快速回贴【图片】【Golly】生命游戏【乱舞de狼烟吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:11贴子:
【Golly】生命游戏
那么就发几张截图~
首先是初始规则……滑翔器,方块,和眨眼……
话说为什么我按照书上做出来的滑翔枪实验结果和霍金先生的有一点出入……始态终态都一样但是繁殖代数不一样……
某大神的作品……
据说集齐一万亿个小方块可以召唤出二维生命……
各种花式规则
这个也是别人做的~
这貌似是一维规则……时间至上向下递增……
像雪花形……
这个我感觉样子不错~
放大看一团乱码呀……
B234~各种漂亮的花纹~
它们是要去哪……
各种花花的图案……
继续是漂亮的花纹……
话说我知道我应该关系它的数学意义物理意义哲学意义而不是它的花纹多漂亮
还有这个……不知道为什么上下不对称……
不断在扩张的图形……
繁衍到了一百多万个方格形状还是没变……
与门……啧啧啧……还有或门,非门,叉或门……
看起来是计算器……可怕……
那么最后镇楼图的初始状态结尾~(好像暴露了我的丑字……)
贴吧热议榜
使用签名档&&
保存至快速回贴

我要回帖

更多关于 生命之旅存档修改 的文章

 

随机推荐