首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生命的游戏-死亡

生命的游戏-死亡
EN

Stack Overflow用户
提问于 2011-12-05 14:30:05
回答 2查看 543关注 0票数 2

我很无聊,只有30分钟的空闲时间,所以我决定尝试一下生活中的游戏。我在维基百科上遵循了这条规则,但它似乎不能正常工作。有人能告诉我我做错了什么吗?

以下是规则:

任何少于两个活邻居的活细胞都会死亡,就好像是由于人口不足造成的。

任何有两到三个活邻居的活细胞都会传到下一代。

任何有三个以上活动邻居的活动单元都会死亡,就好像是由于过度拥挤。

恰好有三个活的邻居的任何死亡细胞都变成了一个活细胞,就好像是通过繁殖一样。

代码语言:javascript
复制
public void PerformLogic()
{
    if (in_game)
    {
        time_elapsed += rate;

        if (time_elapsed > frame_rate)
        {
            time_elapsed = 0;

            for (int x = 0; x < board_width; x++)
            {
                for (int y = 0; y < board_height; y++)
                {
                    if (board[x, y] == alive)
                    {
                        int surrounding_cells = 0;

                        for (int x2 = -1; x2 <= 1; x2++)
                        {
                            for (int y2 = -1; y2 <= 1; y2++)
                            {

                                if (!(x2 + x <= -1 || y2 + y <= -1 || x + x2 >= board_width || y + y2 >= board_height))
                                {
                                    if (board[x + x2, y + y2] == alive)
                                    {
                                        surrounding_cells++;
                                    }
                                }
                            }
                        }

                        if (surrounding_cells < 2)
                        {
                            board[x, y] = dead;
                        }
                        if (surrounding_cells == 2 ||
                            surrounding_cells == 3)
                        {
                            board[x, y] = alive;
                        }
                        if (surrounding_cells > 3)
                        {
                            board[x, y] = dead;
                        }
                    }
                    else if (board[x, y] == dead)
                    {
                        int surrounding_cells = 0;

                        for (int x2 = -1; x2 <= 1; x2++)
                        {
                            for (int y2 = -1; y2 <= ; y2++)
                            {

                                if (!(x2 + x <= -1 || y2 + y <= -1 || x + x2 >= board_width || y + y2 >= board_height))
                                {                                        
                                    if (board[x + x2, y + y2] == alive)
                                    {
                                        surrounding_cells++;
                                    }
                                }

                            }
                        }

                        if (surrounding_cells == 3)
                        {
                            board[x, y] = alive;
                        }
                    }
                }
            }
        }
    }
}

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-05 14:36:40

我认为你更新版面太早了。生命的游戏应该在扫描完整个棋盘之后更新棋盘,而不是在扫描的时候。

例如:

代码语言:javascript
复制
if (surrounding_cells > 3)
{
   board[x, y] = dead;
}

在此之后,对于它旁边的细胞,这个细胞将被视为死亡。

马克也是对的。

票数 4
EN

Stack Overflow用户

发布于 2011-12-05 14:36:12

代码语言:javascript
复制
for (int x2 = -1; x2 <= 1; x2++)
{
    for (int y2 = -1; y2 <= 1; y2++)
    {

在我看来,你在这个循环中包含了中央单元,所以是9而不是8。

我不确定嵌套的for是不是最好的选择,但如果您正在使用它,请添加:

代码语言:javascript
复制
if(x2 == 0 && y2 == 0) continue;

在内部循环的开始处(即在我上面发布的最后一行之后)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8381733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档