首页 > 编程语言 > 详细

C语言练习-生命游戏

时间:2019-03-15 14:08:32      阅读:141      评论:0      收藏:0      [点我收藏+]
/**
    生命游戏 
    1-一个细胞周围8个细胞中如果有3个细胞为生,则该细胞为生
    2-如果该细胞周围只有2个细胞为生,则该细胞的生死保持不变
    3-在其他情况下,该细胞为死 
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

#define High_Max 100
#define Width_Max 100

int High =20;
int Width =50;
int Canvas [High_Max][Width_Max];
int Breed_Num=0;

void gotoxy(int x,int y)//清屏
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}


void State_Init ()
{
    int i , j;
    srand(time(NULL));//初始化随机数 
    for(i=0;i<=High;i++)
    {
        for(j=0;j<=Width;j++)
        {
            Canvas[i][j]=rand()%2;//随机赋值  
        }
    }
}

void Show ()//生输出 ■ 死输出 □
{
    gotoxy(0,0);
    int i , j;
    for(i=0;i<High;i++)
    {
        for(j=0;j<Width;j++)
        {
            if(Canvas[i][j]==1)
                printf("■");
                else
                    printf("□");
        }
        printf("\n");
        //printf("\n");
    }
}


void Copy_arr(int tmp_map[][Width_Max],int map[][Width_Max]) 
{   
    int i,j;
    for ( i = 0; i < High; i++)
        for ( j = 0; j < Width; j++)
            tmp_map[i][j] = map[i][j];
}

void Auto_Up()//自动更新 
{
    int NewCanvas[High_Max][Width_Max];//缓存 
    int RoundNum ;//周围的个数 
    int i , j ;
    Copy_arr(NewCanvas,Canvas);//先缓存 
    for(i=0;i<High;i++)
    {
        for(j=0;j<Width;j++)//比较缓存后的值在更新原本值 
        {
            RoundNum=NewCanvas[i-1][j-1]+NewCanvas[i-1][j]+NewCanvas[i-1][j+1]
                    +NewCanvas[i][j-1] /*NewCanvas[i][j]*/+NewCanvas[i][j+1]
                    +NewCanvas[i+1][j-1]+NewCanvas[i+1][j]+NewCanvas[i+1][j+1];//将附近8个全部相加 
                if(RoundNum==3)
                    Canvas[i][j]=1;
                    else if(RoundNum==2);//维持原状
                        else 
                            Canvas[i][j]=0; 
        }
    }
    Breed_Num++;
}       

int main ()
{
    int i;
    State_Init(); 
    Show();
    while(1)
    {
        Show();
        Auto_Up();
        Sleep(100);
        printf("第%d代: ",Breed_Num);
    }
    return 0;
}

C语言练习-生命游戏

原文:https://www.cnblogs.com/nsss/p/10536476.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!