// 一个简单的小程序,没怎么注意格式。但是图形挺漂亮的保留一下。
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <cstdio>
using namespace std;
const int len = 60;
const int wid = 20;
const int alive = 1;
const int death = 0;
const int keep = -1;
const char ALIVE = '.';
const char DEATH = '*';
int cell[wid+1][len+1];
int dir[8][2] = {{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1},{0,1}};
int get_order(int m,int n);
int check(int x,int y);
void game_(int step);
void change();
void init();
void print_state();
void game_menu();
void author_menu();
void help_menu();
void game_over();
void menu_();
int main()
{
menu_();
return 0;
}
int get_order(int m,int n)
{
int x;
while(1)
{
scanf("%d",&x);
if(x>=m && x<=n)
{
break;
}
}
getchar();
return x;
}
int check(int x,int y)
{
int cnt = 0;
for(int i = 0; i < 8; i++)
{
int x_ = x + dir[i][0];
int y_ = y + dir[i][1];
if(x_ < 1 || y_ < 1 || x_ > wid || y_ > len)
return alive;
if(cell[x_][y_] == alive)
cnt ++;
}
if(cnt == 3)
return alive;
if(cnt == 2)
return keep;
return death;
}
void game_(int step)
{
system("cls");
printf("\n\n\n");
printf(" *******************\n");
printf(" * 1.手动播放 *\n");
printf(" * 2.自动播放 *\n");
printf(" *******************\n");
int n = get_order(1,2);
for(int i = 0; i < step;i++)
{
system("cls");
change();
print_state();
if(n == 2)
Sleep(500);
else
getchar();
}
printf("The game is over\n");
getchar();
}
void change()
{
int a[wid+1][len+1];
for(int i = 1; i <= wid; i++)
for(int j = 1; j <= len; j++)
{
int tmp = check(i,j);
if(tmp == keep)
a[i][j] = cell[i][j];
else
a[i][j] = tmp;
}
for(int i = 1; i <= wid; i++)
for(int j = 1; j <= len; j++)
{
cell[i][j] = a[i][j];
}
}
void init()
{
for(int i = 0; i <= wid;i++)
for(int j = 0; j <= len; j++)
cell[i][j] = alive;
}
void print_state()
{
for(int i = 1; i <= wid; i++)
{
for(int j = 1; j <= len; j++)
if(cell[i][j] == alive)
printf("%C",ALIVE);
else
printf("%C",DEATH);
printf("\n");
}
}
void game_menu()
{
system("cls");
init();
printf("请输入迭代次数(注意:错误输入不被接受)\n");
int n = get_order(1,100);
game_(n);
}
void author_menu()
{
int n;
system("cls");
printf("\n");
printf("主策划 mi");
printf("技术指导 sumoon");
printf("\n");
printf("1.返回\n");
n = get_order(1,1);
if(n == 1)
return;
}
void help_menu()
{
int n;
system("cls");
printf("\n");
printf("\"*\" alive\n");
printf("\".\" death\n");
printf("\n");
printf("1.return\n");
n = get_order(1,1);
if(n == 1)
return;
}
void game_over()
{
system("cls");
printf("\n");
printf("祝您游戏愉快");
printf("Game Over");
printf("\n");
exit(0);
}
void menu_()
{
while(1)
{
system("cls");
printf("\n The Game Of Life\n\n\n\n");
printf(" ******************\n");
printf(" ** 1.play **\n");
printf(" ** 2.help **\n");
printf(" ** 3.author **\n");
printf(" ** 4.exit **\n");
printf(" ******************\n");
int n = get_order(1,4);
if(n == 1)
game_menu();
else if(n == 2)
help_menu();
else if(n == 3)
author_menu();
else
game_over();
}
}