分享
 
 
 

生命游戏 c语言实现

王朝c/c++·作者佚名  2006-06-28
窄屏简体版  字體: |||超大  

本世纪70年代,人们曾疯魔一种被称作“生命游戏”的小游戏,这种游戏相当简单。假设有一个像棋盘一样的方格网,每个方格中放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。游戏规则如下:

1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生,即该细胞若原先为死,则转为生,若原先为生,则保持不变;

2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;

3. 在其它情况下,该细胞为死,即该细胞若原先为生,则转为死,若原先为死,则保持不变设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案。

程序的算法:

设置两个二维数组,一个用于表示当前生命细胞的状态,另一个用于判断当前的细胞的下一个状态。

这个程序还能统计当前活着的细胞的个数:

程序如下:

/*lifegame.c*/

#include <stdio.h>

#include <graphics.h>

#include <time.h>

#include <stdlib.h>

#define MAX 60

#define SIZE 5

void initG(); /*图形模式初始化*/

void closeG();/*关闭图形模式*/

void live(int col,int row);

void death(int col,int row);

void initG()

{

int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,"d:\\tc");

cleardevice();

}

void closeG()

{

cleardevice();

settextstyle(1,0,5);

setcolor(BLUE);

outtextxy(80,50,"Programme Desiged:Y.Z.X");

outtextxy(80,160,"MAIL:yzx_xue@163.com");

outtextxy(200,330,"2006.5");

getch();

closegraph();

}

void live(int col,int row)

{

setcolor(WHITE);

setfillstyle(SOLID_FILL,WHITE);

bar(SIZE*(col+1)+1,SIZE*(row+1)+1,SIZE*(col+2)-1,SIZE*(row+2)-1);

}

void death(int col,int row)

{

setcolor(BLACK);

setfillstyle(SOLID_FILL,BLACK);

bar(SIZE*(col+1)+1,SIZE*(row+1)+1,SIZE*(col+2)-1,SIZE*(row+2)-1);

}

void table() {

int i;

setcolor(RED);

for(i=0;i<=MAX;i++)

{

line(SIZE*(i+1),SIZE,SIZE*(i+1),SIZE*(MAX+1));

line(SIZE,SIZE*(i+1),SIZE*(MAX+1),SIZE*(i+1));

}

}

void game()

{

int nrow,ncol,i,resData[MAX][MAX],ori[MAX][MAX];

int count;

char str[20];

/*if life is live color is balck*/

/*init the life*/

table();

for(nrow=0;nrow!=MAX;nrow++)

for(ncol=0;ncol!=MAX;ncol++)

{

ori[nrow][ncol]=1;

resData[nrow][ncol]=1;

}

for(i=0;i<=100;i++)

{

count=0;

for(nrow=1;nrow!=MAX;nrow++)

for(ncol=1;ncol!=MAX;ncol++)

{

if(resData[nrow][ncol]==1) live(nrow,ncol);

if(resData[nrow][ncol]==0) death(nrow,ncol);

count+=resData[nrow][ncol];

}

table();

delay(5000);

for(nrow=1;nrow<MAX;nrow++)

for(ncol=1;ncol<MAX;ncol++)

switch((ori[nrow-1][ncol-1]+ori[nrow-1][ncol]+ori[nrow-1][ncol+1]

+ori[nrow][ncol-1]+ori[nrow][ncol+1]

+ori[nrow+1][ncol-1]+ori[nrow+1][ncol]+ori[nrow+1][ncol+1]))

{

case 3: resData[nrow][ncol]=1;break;

case 2: resData[nrow][ncol]=ori[nrow][ncol]; break;

default: resData[nrow][ncol]=0;

}/*end switch*/

for(nrow=1;nrow!=MAX;nrow++)

for(ncol=1;ncol!=MAX;ncol++)

ori[nrow][ncol]=resData[nrow][ncol];

sprintf(str,"%d",count);

setcolor(RED);

rectangle(450,30,getmaxx(),200);

settextstyle(1,0,4);

outtextxy(455,40,"LIFE GAME");

outtextxy(455,100,"LIVE:");

setfillstyle(SOLID_FILL,BLACK);

bar(550,100,getmaxx()-5,140);

outtextxy(550,100,str);

} /*end time for*/

}

void main()

{

initG();

game();

getch();

closeG();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有