zoukankan      html  css  js  c++  java
  • 【生命游戏】

    /*
    生命游戏
    说明:
    生命游戏(game of life)为1970年由英国数学家J.H.Conway所提出来,某一细胞的邻居包括上,下,左,右,左上,左下,
    右上,右下相邻之细胞。游戏规则如下:
    孤单死亡:如果细胞的邻居小于一个,则该细胞在下一次状态将死亡。
    拥挤死亡:如果细胞的邻居在四个以上,则该细胞在再一次状态将死亡。
    稳定:如果细胞的邻居为二个或三个,则下一次状态为稳定存活。
    复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置将复活一细胞。
    
    解法:
    生命游戏的规则可简化为以下,并使用case比对即可使用程式操作:
    1.邻居个数为0,1,4,5,6,7,8时则该细胞下次的状态为死亡。
    2.邻居个数为2时,则该细胞下次状态为复活。
    3.邻居个数为3时,则该细胞下次状态为稳定。 
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    
    #define MAXROW 10
    #define MAXCOL 25
    #define DEAD 0
    #define ALIVE 1
    
    int map[MAXROW][MAXCOL], newmap[MAXROW][MAXCOL];
    
    void init();
    int neighbors(int , int );
    void outputMap();
    void copyMap();
    
    int main()
    {
        int row, col; 
        char ans;
        init();
        while(1)
        {
            outputMap();
            for(row = 0; row < MAXROW; row++)
            {
                for(col = 0; col < MAXCOL; col++)
                {
                    switch(neighbors(row, col))
                    {
                        case 0:
                        case 1:
                        case 4:
                        case 5:
                        case 6:
                        case 7:
                        case 8:
                            newmap[row][col] = DEAD;
                            break;
                        case 2:
                            newmap[row][col] = map[row][col];
                            break;
                        case 3:
                            newmap[row][col] = ALIVE;
                            break;
                    }
                }
            }
            
            copyMap();
            printf("
    Continue next Generation ? ");
            getchar();
            ans = toupper(getchar());
            
            if(ans != 'y' && ans != 'Y')
            {
                break; 
            } 
        }
        return 0;
    }
    
    void init()
    {
        int row, col;
        
        for(row = 0; row < MAXROW; row++)
        {
            for(col = 0; col < MAXCOL; col++)
            {
                map[row][col] = DEAD;
            }
        }
        
        puts("
    ============Game of life Program============");
        puts("Enter x, y where x, y is living cell.");
        printf("0 <= x <= %d, 0 <= y <= %d and ", MAXROW - 1, MAXCOL - 1);
        puts("terminate with (x, y) = (-1, -1)
    ");
        printf("Enter: 
    "); 
        
        while(1)
        {
            scanf("%d%d", &row, &col);
            if(0 <= row && row <MAXROW && 0 <= col && col < MAXCOL)
            {
                map[row][col] = ALIVE;
            }
            else if(row == -1 || col == -1)
            {
                break;
            }
            else
            {
                printf("(x, y) exceeds map ranage !
    ");
            }
        }
    }
    
    int neighbors(int row, int col)
    {
        int count = 0, c, r;
        for(r = row - 1; r <= row + 1; r++)
        {
            for(c = col - 1; c <= col + 1; c++)
            {
                if(r < 0 || r >= MAXROW || c < 0 || c >= MAXCOL)
                {
                    continue;
                }
                if(map[r][c] == ALIVE)
                {
                    count++;
                }
            }
        }
        if(map[row][col] == ALIVE)
        {
            count--;
        }
        
        return count;
    }
    
    void outputMap()
    {
        int row, col;
        printf("
    
    %20c Game of life cell status
    ", '@');
        for(row = 0; row < MAXROW; row++)
        {
            printf("
    %20c",'@');
            for(col = 0; col < MAXCOL; col++)
            {
                if(map[row][col] == ALIVE)
                {
                    putchar('#');
                }
                else
                {
                    putchar('-');
                }
            }
        }
    }
    
    void copyMap()
    {
        int row, col;
        for(row = 0; row < MAXROW; row++)
        {
            for(col = 0; col < MAXCOL; col++)
            {
                map[row][col] = newmap[row][col];
            }
        }
    }
    
    
    //不完善 

    运行结果:

  • 相关阅读:
    Javascript中的Math.max()和Math.min()
    附件预览项目采坑记
    移动设备后台的理解
    网络是怎么连接的?(进阶一)
    Git建立本地分支和远程分支的映射关系
    springboot使用redis实现发布与订阅
    centos下安装配置mongodb
    vue循环时设置多选框禁用状态,v-for
    谷歌浏览器postman插件安装,亲测可用
    element-ui 无法对绑定表单的对象中的对象属性进行验证
  • 原文地址:https://www.cnblogs.com/libra-yong/p/6296312.html
Copyright © 2011-2022 走看看