2019年春第二次课程设计实验报告
2019年春第二次课程设计实验报告
一.实验项目名称
生命游戏
二.实验项目功能描述
生命游戏其实是一个零玩家游戏。它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。实际中,你可以设定周围活细胞的数目怎样时才适宜该细胞的生存。如果这个数目设定过高,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过低,世界中又会被生命充满而没有什么变化。实际中,这个数目一般选取2或者3;这样整个生命世界才不至于太过荒凉或拥挤,而是一种动态的平衡。这样的话,游戏的规则就是:当一个方格周围有2或3个活细胞时,方格中的活细胞在下一个时刻继续存活;即使这个时刻方格中没有活细胞,在下一个时刻也会“诞生”活细胞。在这个游戏中,还可以设定一些更加复杂的规则,例如当前方格的状况不仅由父一代决定,而且还考虑祖父一代的情况。你还可以作为这个世界的God,随意设定某个方格细胞的死活,以观察对世界的影响。
在游戏的进行中,杂乱无序的细胞会逐渐演化出各种精致、有形的结构;这些结构往往有很好的对称性,而且每一代都在变化形状。一些形状已经锁定,不会逐代变化。有时,一些已经成形的结构会因为一些无序细胞的“入侵”而被破坏。但是形状和秩序经常能从杂乱中产生出来。
三.项目模块结构介绍
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#define High 25 //游戏画面尺寸
#define Width 50
//全局变量
int cells[High][Width];//所有位置细胞生1或死0
void gotoxy(int x,int y)//将光标移到(x,y)位置
{
HANDLE handle = GetStdHsndle(std_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
void startup()//数据的初始化
{
int i,j;
for(i=0;i<High;i++)//随机初始化
for(j=0;j<Width;j++)
{
cells[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(cells[i][j]==1)
printf("*");//输出活的细胞
else
printf(" ");//输出空格
}
printf("\n");
}
sleep(50);
}
void updateWithoutInput()//与用户无关的输出
{
}
void updateWithInput()//与用户有关的输出
{
}
int main()
{
startup();//数据的初始化
while(1)//游戏循环执行
{
show();//显示画面
updateWithInput();//与用户无关的更新
updateWithInput();//与用户有关的更新
}
return o;
}
void startup()//数据初始化
{
int i,j;
for(i=0;i<High;i++)//初始化
for(j=0;j<Width;j++)
cells[i][j]=1;
}
void updateWithoutInput()//与用户无关的更新
{
int NewCells[High][Width];//下一帧的细胞情况
int NeibourNumber;//统计邻居的个数
int i,j;
for(i=1;i<=High-1;i++)
{
for(j=1;j<=Width-1;j++)
{
NeibourNumber = cells[i-1][j-1]+cells[i-1]{j}+cells[i-1][j+1]+cells[i][j-1]+cells[i][j+1]+cells[i+1][j-1]+cells[i+1][j]+cells[i+1][j+1]
if(NeibourNumber==3)
NewCells[i][j]=1;
else if(NeibourNumber==2)
NewCells[i][j]=cells[i][j];
else
NewCells[i][j]=0;
}
}
for(i=1;i<=High-1;i++)
for(j=1;j<=Width-1;j++)
cells[i][j]=NewCells[i][j];}
四.实现界面展示
五.代码托管链接
https://gitee.com/klaus0319/events
六.实验总结
好多东西都看不懂,老师说不懂的去百度看一下,然后看了一下还是好多不明白的地方,希望老师有时间来讲一下,然后关于这个游戏还是好多可以完善的地方,以后慢慢完善。