C语言实现生命游戏
浏览 192 | 评论 0
Andy
2020年04月27日
  • 头文件

    先来说说这个假期的过程,我这假期基本啥也没学到,全在啃老本,看着人家前辈一会去CTF,一会去kaggle,心中好生羡慕。


    可惜本人能力有限,3D的CAD建模不会,nodejs入门,甚至连mdui都不会用,emmm,我真是太没有用了


    于是乎,我去研究内核,研究浏览器,最后由于C语言不过关(我C比C++还差),所以,emm,不得不因为UEFI都不过关,所以退一步,还是Python大法好!


    或说前几天我的andyccr.com域名通过备案了,人生第一个备案域名


    github的项目贡献也稳定起来了,算了,不求发展,目前只求不要考完试,圈内都没人认识我了


    所以,我去玩了生命游戏和元胞自动机,没办法,这就是我擅长的地方了,emm,在下C++和Python程序员唯一的用处。


    高数除了高斯消元和微积分入门啥也没学,哦,对了,还有占仆,emm,字打不出来了。

    我熬夜干出的生命游戏,LC上面的第N道题,emm,之前还难住我了,这个横跨了半个世纪的题目将被我彻底改造,哈哈!

    
    #include<stdio.h>
    #include<windows.h>
    #define High 25                     //游戏尺寸
    #define Width 50
    //定义全局变量
    int cellsHigh;         //细胞生1死0
    void HideCursor()                //隐藏光标
    {
     CONSOLE_CURSOR_INFO cursor_info = {1, 0};
     SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    }
    void gotoxy(int x,int y) //光标移动到(x,y)位置
    {
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        COORD pos;
        pos.X = x;
        pos.Y = y;
        SetConsoleCursorPosition(handle,pos);
    }
    void startup()  //数据初始化
    {
        int i,j;
        for(i=0;i<=High;i++)
            for(j=0;j<=Width;j++)
                cellsi=1;                          //所有细胞初始生,可用rand()随机函数使细胞初始状态随机
     
     
        HideCursor();
    }
    void show()     //显示界面
    {
        gotoxy(0,0);
        int i,j;
        for(i=1;i<High;i++)
        {
            for(j=0;j<Width;j++)
            {
                if(cellsi==1)
                    printf("*");
                else
                    printf(" ");
            }
            printf("n");
        }
        Sleep(200);            //控制刷新速度
    }
    void updateWithoutInput()           //无需用户输入
    {
        int i,j;
        int NeibourNumber;
        int tempHigh;
        for(i=1;i<High;i++)
        {
            for(j=1;j<Width;j++)
            {
                NeibourNumber=cellsi-1+cellsi-1+cellsi-1+cellsi+cellsi+cellsi+1+cellsi+1+cellsi+1;
                if(NeibourNumber==3)            //周围有3个活细胞时,该细胞生
                    tempi=1;
                else if(NeibourNumber==2)       ////周围有2个活细胞时,该细胞状态不变
                            tempi=cellsi;
                else
                    tempi=0;
            }
        }
        for(i=1;i<High;i++)
            for(j=1;j<Width;j++)
                cellsi=tempi;
    }
    int main()
    {
        startup();
        while(1)
        {
            show();
            updateWithoutInput();
        }
    }
    

    第二波

    来点干货,这次附带规则,这是我返校前最后一次实验,最后的稳定结构与上面的不一样。

    
    /**
    ** C语言模拟生命游戏(原细胞自动机)
    **
    ** 每个细胞有两种状态-存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动。
    ** 当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)
    ** 当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样。
    ** 当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
    ** 当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)
    **
    /
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
     
    #define SIZE    16                            //地图数组的长度
    #define Death    printf("%c%c",0xA1,0xF5)    //死亡方块
    #define Live    printf("%c%c",0xA1,0xF6)    //存活方块
     
    boolean map_bSIZE+2 = {0};
    void display(const int mapSIZE + 2);
    void transform(const int mapSIZE + 2);
     
     
    int main(int argc, char** argv) {
     
        int mapSIZE + 2 = { 0 };
        int *map_p = map;
        int count = 0;
        map4 = map4 = map4 = map3 = map2 = 1;
     
        while (1)
        {
            printf("            第%d代n", count++);
            display(map_p);
            Sleep(200);        //休眠 
            transform(map_p);    //为什么这里不能填数组,而是填数组名
            system("cls");        //清屏 
        }
        system("pause");        //暂停
        return 0;
    }
     
     
    /改变状态/
    void transform(int mapSIZE + 2)
    {
        int w, h, sum;
        sum = 0;
        int map_tSIZE + 2 = {0};
     
        for (w = 1; w <= SIZE; w++)
            for (h = 1; h <= SIZE; h++)
                map_tw = mapw;
     
        for (w = 1; w <= SIZE; w++){
     
            for (h = 1; h <= SIZE; h++){
     
                sum = map_tw - 1 + map_tw - 1 + map_tw - 1
                    + map_tw + map_tw
                    + map_tw + 1 + map_tw + 1 + map_tw + 1;
     
                switch (sum)
                {
                case 2:
                    break;
                case 3:
                    if (map_tw == 0)
                        mapw = 1;
                    break;
                default:
                    mapw = 0;
                    break;
     
                }
            }
        }
    }
     
     
    /显示/
    void display(const int mapSIZE + 2){
     
        int w, h;
        
        for (w = 1; w <= SIZE; w++){
            for (h = 1; h <= SIZE; h++){
                if (mapw == 1)
                    Live;
                else
                    Death;
            }
            printf("n");
        }
    }
    


    本文就结束啦!回学校,回学校,回学校,,,,,,,,,,,,


    本文作者:Andy
    本文链接:http://www.andyccr.com/e/index.php/archives/456/
    最后修改时间:2020-04-27 10:59:05
    本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
    评论
    与本文无关评论请发留言板。请不要水评论,谢谢。
    textsms
    支持 Markdown 语法
    email
    link
    评论列表
    暂无评论