人工生命研究中有一种被称作“生命游戏”的小游戏,这种游戏相当简单。假设有一个象棋盘一样的方格网,每个方格中放置一个生命细胞,生命细胞只有两种状态:“生”或者“死”游戏规则如下:
(1)如果一个细胞周围有3个细胞为生(一个细胞周围总共有8个细胞)则该细胞为生,即若原先为死则转为生,若原先为生则保持不变;
(2)如果一个细胞周围有2个细胞为生,则该细胞的生死状态不变;
(3)在其他情况下,该细胞为死,即该细胞若原先为生,则转为死,若原先为死则保持不变。
注:在微软的vs上最容易配置,作者的ege库函数就是在vs上配置,其他环境配置代码通用
如何配置:https://blog.csdn.net/HuachengGJ/article/details/79183790
(1)头文件使用
#include "stdafx.h"
#include
#include
#include
#include
#include //里面包含PlaySound()函数(播放音乐)
#pragma comment(lib, "winmm.lib")//PlaySound是Windows用于播放音乐的API函数(方法)。
(2)使用的宏定义以及一些函数:
#define High 100 //数组大小
#define Width 100
#define Hight 10*High //画面大小
#define Widths 10*Width
// 全局变量
int cells[High][Width]; // 所有位置细胞生1或死0
void my_playsoundbk();//播放开头音乐
void my_playsound();//播放游戏中音乐
void gotoxy(int x, int y);//清屏函数,时间比system(“pause”)短
void startup();//初始化
void show();//展示
void updateInput();//更新下一次的细胞状态
int Input_yonghu();//用户输入迭代次数
(3)清屏函数:(网上都有这种,比system(“cls“)要快,也可以用cleardevice()
void gotoxy(int x, int y)//类似于清屏函数
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
(4)细胞数组初始化(我默认的是最外面一圈刚开始全活,动的时候,最外面一圈不动)
void startup() // 数据初始化
{
int i, j;
for (i = 0; i
(5)细胞更新状态(根据游戏规则)
注:要将每一个细胞更新后的状态放进新数组
void updateInput() // 细胞更新
{
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];
}
(6)细胞状态显示
void show() // 显示画面
{
gotoxy(0, 0); // 清屏
int i, j;
for (i = 0; i < High; i++)
{
for (j = 0; j
(7)音乐播放函数
//开头音乐
void my_playsoundbk() {
PlaySound(TEXT("back.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
}
//细胞变化过程中音乐
void my_playsound() {
PlaySound(TEXT("cell.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);//一遍遍地播放,直到结束
}
(8)用户可控制迭代次数(输入制定代数)
int Input_yonghu() {
char s[10];//提示用户输入迭代次数
InputBox(s, 10, _T("请输入您想实现迭代次数:"), _T("生命游戏演示"));
// 将用户输入转换为数字
int r;
sscanf(s, "%d", &r);
return r;
}
#include "stdafx.h"
#include
#include
#include
#include
#include //里面包含PlaySound()函数
#pragma comment(lib, "winmm.lib")//PlaySound是Windows用于播放音乐的API函数(方法)。
#define High 100 //数组大小
#define Width 100
#define Hight 10*High //画面大小
#define Widths 10*Width
// 全局变量
int cells[High][Width]; // 所有位置细胞生1或死0
void my_playsoundbk();//播放开头音乐
void my_playsound();//播放游戏中音乐
void gotoxy(int x, int y);//清屏函数,时间比system(“pause”)短
void startup();//初始化
void show();//展示
void updateInput();//更新下一次的细胞状态
int Input_yonghu();//用户输入迭代次数
int main()
{
initgraph(Hight, Widths);//建立画布
my_playsoundbk();//片头音乐
int r = Input_yonghu();//提示用户输入迭代次数
my_playsound();//播放音乐
startup(); // 数据初始化
int i = 0;//限定迭代次数
while (i <= r) // 游戏循环执行
{
show(); // 显示画面
updateInput(); //细胞更新
i++;
}
_getch();
closegraph();//退出画布
}
void gotoxy(int x, int y)//类似于清屏函数
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void startup() // 数据初始化
{
int i, j;
for (i = 0; i
5.实现过程中出现的一些错误或者提示,请自行百度。附上下载地址
https://download.csdn.net/download/qq_27148893/10553191
版权声明:本文为博主原创文章,如若转载,请说明出处。