⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 life_game.cpp

📁 生命游戏的控制台模拟程序
💻 CPP
字号:
// life_game.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "windows.h"
#include <stdio.h>
#include <stdlib.h> 
#include <ctype.h> 
#define MAXROW 35 
#define MAXCOL 50
#define DEAD 0 
#define ALIVE 1 
int map[MAXROW][MAXCOL], newmap[MAXROW][MAXCOL]; 
void init(); int neighbors(int, int);void outputMap();
void copyMap();
void auto_init();
bool isStatic();
int _tmain() 
{    
	int row, col;
	char ans;    
	auto_init();  
	/*
	int rd=rand();
	printf("%d ",rd);
	rd=rand();
	printf("%d ",rd);
	*/

	while(1) 
	{      
		outputMap();      
		for(row = 0; row < MAXROW; row++) 
		{         
			for(col = 0; col < MAXCOL; col++) 
			{            
				switch (neighbors(row, col)) 
				{               
				case 0:                
				case 1:                
				case 4:                
				case 5:                
				case 6:                
				case 7:                
				case 8:                   
					newmap[row][col] = DEAD;                   
					break;                
				case 2:                   
					newmap[row][col] = map[row][col];                   
					break;                
				case 3:                   
					newmap[row][col] = ALIVE;                   
					break;             
				}          
			}      
		}  
		
		copyMap();
		/*
		printf("\nContinue next Generation ? ");      
		getchar();      
		ans = toupper(getchar());      
		if(ans != 'Y')          
			break;   
			*/ 
		
		Sleep(100);
		system("cls");	
		
	}    
	getchar();
	return 0; 
} 
void init() 
{   
	int row, col;        
	for(row = 0; row < MAXROW; row++)       
		for(col = 0; col < MAXCOL; col++)          
			map[row][col] = DEAD;    
	puts("Game of life Program");    
	puts("Enter x, y where x, y is living cell");   
	printf("0 <= x <= %d, 0 <= y <= %d\n",        MAXROW-1, MAXCOL-1);    
	puts("Terminate with x, y = -1, -1");   
	while(1) 
	{      
		scanf("%d %d", &row, &col);       
		if(0 <= row && row < MAXROW &&          0 <= col && col < MAXCOL)         
			map[row][col] = ALIVE;      
		else if(row == -1 || col == -1)         
			break;      
		else          
			printf("(x, y) exceeds map ranage!");    
	}
}

void auto_init()
{
	int row, col; 
	int seed;
	printf("Please input a integer as a random seed: ");
	scanf("%d",&seed);
	for(int i=0;i<seed;i++)
	{
		rand();
	}
	for(row = 0; row < MAXROW; row++)       
		for(col = 0; col < MAXCOL; col++)          
			map[row][col] = ((int)rand())%2;  
	printf("auto init suceed!");


}

int neighbors(int row, int col) 
{   
	int count = 0, c, r;    
	for(r = row-1; r <= row+1; r++)      
		for(c = col-1; c <= col+1; c++)
		{          
			if(r < 0 || r >= MAXROW || c < 0 || c >= MAXCOL)      
				continue;         
			if(map[r][c] == ALIVE)            
				count++;       
		}  
		if(map[row][col] == ALIVE)     
			count--;        
		return count; 
}
void outputMap() 
{   
	int row, col;   
	//printf("\n\n%20cGame of life cell status\n"); 
	for(row = 0; row < MAXROW; row++) 
	{       
		printf("\n%20c", ' ');     
		for(col = 0; col < MAXCOL; col++)     
			if(map[row][col] == ALIVE)          
				putchar(1);        
			else           
				putchar(' ');  
	} 
} 
void copyMap() 
{ 
	int row, col;  
	for(row = 0; row < MAXROW; row++)      
		for(col = 0; col < MAXCOL; col++)    
			map[row][col] = newmap[row][col];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -