用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

生命游戏 细胞死亡问题

2012-10-30 作者: 程序猿style举报

[c]代码库

#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 ( "\nContinuenextGeneration?" );
        getchar();
        ans=toupper ( getchar() );
        if ( 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 ( "GameoflifeProgram" );
    puts ( "Enterx,ywherex,yislivingcell" );
    printf ( "0<=x<=%d,0<=y<=%d\n",
             MAXROW-1,MAXCOL-1 );
    puts ( "Terminatewithx,y=-1,-1" );
 
    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)exceedsmapranage!" );
    }
}
 
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 ( "\n\n%20cGameoflifecellstatus\n" );
    for ( row=0; row<MAXROW; row++ )
    {
        printf ( "\n%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];
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...