ImageVerifierCode 换一换
格式:DOC , 页数:10 ,大小:53.50KB ,
资源ID:9084945      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-9084945.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(生命游戏.doc)为本站会员(hskm5268)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

生命游戏.doc

1、/* 此程序在 TC2.0 下调试通过 按任意键显示下一个状态 按 ESC 键退出程序 */ * * 生命游戏 * * /英国数学家 J.H.Conway 在 1970 年提出一种被称作“ 生命游戏”的小游戏。Life 游戏实际上是一种模拟,并不是游戏者之间的游戏。它在一个无边界的矩形网格上进行,这个矩形网格中的每个单元可被一个有机体占据,或者不被占据。被占据的单元称为活的,未被占据的单元称位死的。哪个单元是活的要根据其周围活的邻居单元数目而一代代地发生变化。游戏规则如下:1. 给定单元的邻居是与它在垂直,水平或对角上相界的 8 个单元。2. 如果 1 个单元为活的,但没有邻居单元是活的,或者

2、仅有一个邻居单元是活的,则在下一代,此单元会因为孤独而死亡。3. 如果 1 个单元周围有 2 个或者 3 个邻居单元为生,则该单元在下一代也是活的。4. 如果 1 个单元是死的,则在下一代,如果它刚好有 3 个邻居单元是活的,则此单元变成活的。所有其它死的单元在下一代仍然是死的。5. 如果 1 个单元为活的,且有 4 个或者 4 个以上邻居单元是活的,则在下一代,此单元会因为拥塞而死亡。6. 所有出生和死亡都刚好在同一时间发生,则此单元的死亡有助于另一个单元的出生,但它不能通过减少拥塞而阻止其他单元的死亡;正在出生的单元也不能保护或者杀死上一代中活的单元。依此规则进行迭代变化,使单元生生死死,

3、会得到一些有趣的结果。该游戏之所以被称为“生命游戏”,是因为其简单的游戏规则,反映了自然界中的生存规律:如果一个生命,其周围的同类生命太少的话,会因为得不到帮助而死亡;如果太多,则会因为得不到足够的资源而死亡。用计算机模拟这个“生命游戏” 设定图像中的初始配置后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到各种的优美图案。/*/#include #include #include #define ESC 0x11b#define forever 1/*/int now_life1+50+11+50+1; /* 当前单元 并加两行两列作为监视哨 */int next_li

4、fe1+50+11+50+1; /* 下一代单元 1 表示存活 0 表示死亡 */int back_color=15; /* 设置背景颜色 */int rim_color=9; /* 设置边框颜色 */int draw_color=4; /* 设置单元颜色 */int counter=0; /* 计算迭代次数 */char st_counter5=“0“; /* 将迭代次数转变为字符串 */*/void set_life(); /* 游戏初值设置 */void init_game(); /* 初始化游戏界面 */void count_life(int counter); /* 显示迭代次数 *

5、/void draw_life(); /* 画出或者删除游戏单元 */void rule_life(); /* 游戏规则 */void end_life(); /* 显示终结状态 */*/void main()int key,i;int driver=VGA,mode=VGAHI;initgraph(init_game(); /* 初始化游戏 */set_life();draw_life();getch();while(forever) /* 无限循环 */rule_life();draw_life();counter+;count_life(counter);key=bioskey(0);i

6、f(key=ESC) /* 退出游戏 */break;else;closegraph();int next_life1+50+11+50+1; /* 下一代单元 1 表示存活 0 表示死亡 */int back_color=15; /* 设置背景颜色 */int rim_color=9; /* 设置边框颜色 */int draw_color=4; /* 设置单元颜色 */int counter=0; /* 计算迭代次数 */char st_counter5=“0“; /* 将迭代次数转变为字符串 */*/void set_life(); /* 游戏初值设置 */void init_game()

7、; /* 初始化游戏界面 */void count_life(int counter); /* 显示迭代次数 */void draw_life(); /* 画出或者删除游戏单元 */void rule_life(); /* 游戏规则 */void end_life(); /* 显示终结状态 */*/void main()int key,i;int driver=VGA,mode=VGAHI;initgraph(init_game(); /* 初始化游戏 */set_life();draw_life();getch();while(forever) /* 无限循环 */rule_life();d

8、raw_life();counter+;count_life(counter);key=bioskey(0);if(key=ESC) /* 退出游戏 */break;else;closegraph();/*/* 游戏初值配置 */void set_life()int i,j;extern int now_life5252;/*/* 初值设置 1 “回“ 字形 */*for(i=1;i=50;i+)for(j=1;j=50;j+)now_lifeij=1;for(j=11;j40;j+)for(i=11;i40;i+)now_lifeji=0;/*/* 初值设置 2 “ X “ 型 */*for

9、(i=1;i=50;i+)now_lifeii=1;now_lifei50-i=1;*/*/* 初值设置 3 “ I “ 型 */*for(j=1;j=24;j+)for(i=1;i=50;i+)now_lifeji=1;*/*/* 初值设置 4 “ 死亡! 原因:单元密度过大 */*for(i=1;i=50;i+)for(j=1;j=50;j+)now_lifeij=1;*/*/* 初值设置 5 随机取值 */*randomize();for(i=1;i=50;i+)for(j=1;j=50;j+)now_lifeij=rand()%2;*/*/* 初值设置 6 “口“ 字形 周边发展 */

10、*for(i=2;i50;i+)for(j=2;j50;j+)now_lifeij=1;*/*/* 初值设置 7 嬉笑的猫 */* now_life2422=1; now_life2722=1;now_life2423=1; now_life2623=1;now_life2523=1; now_life2723=1; now_life2525=1; now_life2625=1;now_life2324=1;now_life2824=1;now_life2325=1;now_life2825=1;now_life2326=1;now_life2826=1; now_life2427=1; no

11、w_life2627=1;now_life2527=1; now_life2727=1;*/*/* 初值设置 8 破坏 */* for(i=1;i=13;i+)for(j=1;j=12;j+)now_life4*i-24*j-3=1;now_life4*i-24*j-2=1;now_life4*i-24*j-1=1;now_life11=1;/*/* 初值设置 9 病毒 */for(i=1;i=16;i+)for(j=1;j=16;j+)now_life3*i-13*j-1=1;now_life3*i-13*j=1;now_life3*i3*j-1=1;now_life3*i3*j=1;now

12、_life2425=1;/*/* 小窗口初始化显示 */for(i=1;i=50;i+)for(j=1;j=50;j+)if(now_lifeij)setfillstyle(SOLID_FILL,draw_color);elsesetfillstyle(SOLID_FILL,back_color);floodfill(60+(i-1)*8+1,40+(j-1)*8+1,rim_color);putpixel(490+2*i-1,50+2*j-1,getpixel(60+(i-1)*8+1,40+(j-1)*8+1);putpixel(490+2*i-1,50+2*j,getpixel(60+(

13、i-1)*8+1,40+(j-1)*8+1);putpixel(490+2*i,50+2*j-1,getpixel(60+(i-1)*8+1,40+(j-1)*8+1);putpixel(490+2*i,50+2*j,getpixel(60+(i-1)*8+1,40+(j-1)*8+1);end_life(); /* 将初始值传递给 end_life 函数 */*/* 初始化游戏界面 */void init_game()int i,j;setbkcolor(back_color);setcolor(rim_color);rectangle(52,32,468,448);rectangle(60

14、,40,460,440);outtextxy(490,35,“Start“);rectangle(490,50,591,151);outtextxy(490,175,“Counter“);outtextxy(560,175,st_counter);rectangle(490,190,591,291);outtextxy(490,315,“End“);rectangle(490,330,591,431);setfillstyle(SOLID_FILL,rim_color);floodfill(55+1,35+1,rim_color);for(i=0;i50;i+)line(60,40+i*8,4

15、60,40+i*8);for(i=0;i50;i+)line(60+i*8,40,60+i*8,440);for(i=0;i52;i+)for(j=0;j52;j+)now_lifeij=0;setcolor(BLUE);outtextxy(505,15,“Life Game“);setcolor(RED);line(490,25,590,25);/*/* 计算迭代次数 */void count_life(int counter)int i,count=0;int c_counter;setcolor(back_color);outtextxy(560,175,st_counter);c_co

16、unter=counter;for(;) /* 求出当前计数为几位数 */if(c_counter/10)count+;c_counter/=10;elsebreak;c_counter=counter; /* 将出当前计数转换为字符串 */for(i=0;i5;i+)if(c_counter)st_countercount-i=(char)(c_counter%10+(int)(0);c_counter=c_counter/10;elsebreak;st_countercount+1=0;setcolor(rim_color);outtextxy(560,175,st_counter);/*

17、 画出或者删除游戏单元 */void draw_life()int i,j;for(i=1;i=50;i+)for(j=1;j=50;j+)if(now_lifeij)setfillstyle(SOLID_FILL,draw_color);elsesetfillstyle(SOLID_FILL,back_color);floodfill(60+(i-1)*8+1,40+(j-1)*8+1,rim_color);putpixel(490+2*i-1,190+2*j-1,getpixel(60+(i-1)*8+1,40+(j-1)*8+1);putpixel(490+2*i-1,190+2*j,g

18、etpixel(60+(i-1)*8+1,40+(j-1)*8+1);putpixel(490+2*i,190+2*j-1,getpixel(60+(i-1)*8+1,40+(j-1)*8+1);putpixel(490+2*i,190+2*j,getpixel(60+(i-1)*8+1,40+(j-1)*8+1);/*/* 游戏规则 */void rule_life()int i,j;int neighbor;for(i=1;i=50;i+)for(j=1;j=50;j+) /* 规则 1. 给定单元的邻居是与它在垂直,水平或对角上相界的 8 个单元。*/neighbor = 0; neig

19、hbor = now_lifei-1j-1 + now_lifei-1 j + now_lifei-1j+1+ now_life i j-1 + now_life i j+1+ now_lifei+1j-1 + now_lifei+1 j + now_lifei+1j+1;switch(neighbor)case 0: /* 规则 2. 如果 1 个单元为活的,但没有邻居单元是活的, */case 1: /* 或者仅有一个邻居单元是活的 则在下一代,此单元会因为孤独而死亡。 */next_lifeij=0;break;case 2: /* 规则 3. 如果 1 个单元周围有 2 个邻居单元为生

20、,则该单元在下一代也是活的。*/next_lifeij=now_lifeij;break;case 3: /* 规则 4. 如果 1 个单元是死的,则在下一代,如果它刚好有 3 个邻居 */next_lifeij=1; /* 单元是活的 则此单元变成活的 其它死的单元在下一代仍然是死的*/break;case 4:default: /* 规则 5. 如果 1 个单元为活 且有 4 个或者 4 个以上邻居单元是活的*/next_lifeij=0; /* 则在下一代,此单元会因为拥塞而死亡。 */ break; /* 规则 6. 所有出生和死亡都刚好在同一时间发生,则此单元的 */ /* 死亡有助

21、于另一个单元的出生,但它不能通过减少拥塞而阻止 */* 其他单元的死亡;正在出生的单元也不能保护或者杀死上一代中活的单元。*/for(i=1;i=50;i+)for(j=1;j=50;j+)now_lifeij=next_lifeij;/* 小窗口显示终结状态 */void end_life()int counter;int end_life5252;int next_life5252;int i,j;int neighbor;for(i=0;i=52;i+)for(j=0;j=52;j+)end_lifeij=now_lifeij;for(counter=1;counter=999;coun

22、ter+) /* 快速迭代算出终结状态 */for(i=1;i=50;i+)for(j=1;j=50;j+) neighbor = 0; neighbor = end_lifei-1j-1 + end_lifei-1 j + end_lifei-1j+1+ end_life i j-1 + end_life i j+1+ end_lifei+1j-1 + end_lifei+1 j + end_lifei+1j+1;switch(neighbor)case 0: case 1: next_lifeij=0;break;case 2: next_lifeij=end_lifeij;break;c

23、ase 3: next_lifeij=1; break;case 4:default: next_lifeij=0; break; for(i=1;i=50;i+)for(j=1;j=50;j+)end_lifeij=next_lifeij;for(i=1;i=50;i+)for(j=1;j=50;j+)if(end_lifeij) putpixel(490+2*i-1,330+2*j-1,draw_color);putpixel(490+2*i-1,330+2*j,draw_color);putpixel(490+2*i,330+2*j-1,draw_color);putpixel(490+2*i,330+2*j,draw_color);

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报