#include <stdio.h>
#include <stdlib.h>
#define hs 10    //这能改行数
#define ls 10    //这能改列数
#define tiaojian1 2  //这里可改周围几个细胞时存活
#define tiaojian2 3  //这里可改周围几个细胞时繁殖
int world[hs][ls];
void shuru(int[hs][ls]);  //为数组赋初始值
void shuchu(int[hs][ls]);  //提供输出
int huanjin(int,int);  //计算周围细胞数
void jisuanweilai(int[hs][ls]);  //计算未来
void chashou(int[hs][ls]); //运行后插手杀死或复活某些细胞
int main(void)
{
printf("生命游戏\n");
printf("默认世界大小10*10,世界大小及规则代码定义中可改\n");
printf("输入需要添加细胞的点的坐标,添加完成后输入一组负数坐标即可终止输入\n");
int i,j;
for(i=0;i<hs;i++)
for(j=0;j<ls;j++)
world[i][j]=0;  //1为生0为死  归零
shuchu(world);
shuru(world);
shuchu(world);
system("pause");
while(1)
{
char i;
jisuanweilai(world);
shuchu(world);
printf("继续按回车,插手按a,终止按b\n");
i=getchar();
if(i=='\n') ;
else  if(i=='a')
{
chashou(world);
shuchu(world);
system("pause");
}
else  break;
}
system("pause");
return 0;
}
void shuru(int world[hs][ls])
{
int i,j;
while(1)
{
scanf("%d%d",&i,&j);
if(i<0||j<0) break;  //任意为负终止输入
else if(i>=hs||j>=ls)
{
printf("输入数据超范围\n");
}
world[i][j]=1;      //1为生0为死
}
}
void shuchu(int world[hs][ls])
{
int i,j,k=0;
for(i=0;i<ls;i++)    //第一行表头
{
printf("  %d",i);
}
printf("\n");
printf(" ┌");        //第二行
for(i=0;i<ls-1;i++)
{
printf("─┬");
}
printf("─┐\n");
for(i=0;i<hs;i++)    //第3至倒数第二行
{
printf("%d│",i);
for(j=0;j<ls;j++)
{
if(world[i][j]==1)
{
printf("●│");
k++;
}
else printf("○│");
}
printf("\n");
if(i==hs-1) break;
printf(" ├");
for(j=0;j<ls-1;j++)
{
printf("─┼");
}
printf("─┤\n");
}
printf(" └");
for(i=0;i<ls-1;i++)
printf("─┴");
printf("─┘\n");
printf(" 现有%d个存活细胞\n",k);
}
int huanjin(int h,int l)
{
int sum=0,i,j;
for(i=h-1;i<=h+1;i++)
{
for(j=l-1;j<=l+1;j++)
{
if(i<0||i>=hs)游戏免费源码分享网站
continue;
if(j<0||j>=ls)
continue;
if(i==h&&j==l)
continue;
if(world[i][j]==1)
sum++;
}
}
return sum;
}
void jisuanweilai(int world[hs][ls])
{
int i,j,k;
for(i=0;i<hs;i++)
{
for(j=0;j<ls;j++)
{
k=huanjin(i,j);
switch(k)
{
case tiaojian1: break;
case tiaojian2: world[i][j]=1;break;
default : world[i][j]=0;break;
}
}
}
}
void chashou(int world[hs][ls])
{
int i,j;
printf("加入要复活的细胞坐标,添加完成后输入一组负数坐标即可终止输入\n");
while(1)
{
scanf("%d%d",&i,&j);
if(i<0||j<0) break;  //任意为负终止输入
else if(i>=hs||j>=ls)
{
printf("输入数据超范围\n");
}
world[i][j]=1;      //1为生0为死
}
printf("加入要杀死的细胞坐标,添加完成后输入一组负数坐标即可终止输入\n");
while(1)
{
scanf("%d%d",&i,&j);
if(i<0||j<0) break;  //任意为负终止输入
else if(i>=hs||j>=ls)
{
printf("输入数据超范围\n");
}
world[i][j]=0;      //1为生0为死
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。