IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 生命游戏代码V2.0 -> 正文阅读

[C++知识库]生命游戏代码V2.0

这是V1.2的更新

V2.0:更新了初始化为空的修改机制为鼠标左右键单击,游戏体验提升了。

#include<iostream>
#include<conio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include <cwchar>
using namespace std;
#define SLEEP 50
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
int N;
bool a[1010][1010][5];
POINT p;
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
HWND h=GetForegroundWindow();
CONSOLE_FONT_INFO consoleCurrentFont;
void gotoxy(int x,int y){
	HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(handle,pos);
}
void HideCursor(){
	HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO CursorInfo;
	GetConsoleCursorInfo(handle,&CursorInfo);
	CursorInfo.bVisible=false;
	SetConsoleCursorInfo(handle,&CursorInfo);
}
void show(int g){
	HideCursor(); 
	gotoxy(0,0);
	int i,j;
	cout<<"           Second = "<<g<<"                                "<<endl;
	cout<<"  ";
	for(i=0;i<N;i++)
		cout<<"—"; 
	cout<<endl;
	g%=2;
	for(i=0;i<N;i++){
		cout<<"| ";
		for(j=0;j<N;j++){
			if(a[i][j][g]==1)
				cout<<"█ ";
			else if(a[i][j][g]==0)
				cout<<"  ";
		}
		cout<<" |"<<endl;
	}
	Sleep(SLEEP);
}
void update(int k){
	int i,j,count=0;
	k%=2;
	if(k==0){
		for(i=0;i<N;i++)
			for(j=0;j<N;j++){
				count=0;
				if(i==0&&j==0){
					if(a[i][j+1][k]==1)
						count++;
					else if(a[i+1][j][k]==1)
						count++;
					else if(a[i+1][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k+1]=0;
					else if(count==2)
						a[i][j][k+1]=a[i][j][k];
					else if(count==3)
						a[i][j][k+1]=1;
				}
				if(i==0&&j!=0&&j!=N-1){
					if(a[i][j-1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(a[i+1][j-1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(a[i+1][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k+1]=0;
					if(count==2)
						a[i][j][k+1]=a[i][j][k];
					if(count==3)
						a[i][j][k+1]=1;
				}
				if(i==0&&j==N-1){
					if(a[i][j-1][k]==1)
						count++;
					if(a[i+1][j-1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k+1]=0;
					if(count==2)
						a[i][j][k+1]=a[i][j][k];
					if(count==3)
						a[i][j][k+1]=1;
				}
				if(i!=0&&i!=N-1&&j==0){
					count=0;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i-1][j+1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(a[i+1][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k+1]=0;
					if(count==2)
						a[i][j][k+1]=a[i][j][k];
					if(count==3)
						a[i][j][k+1]=1;
				}
				if(i==N-1&&j==0){
					count=0;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i-1][j+1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k+1]=0;
					if(count==2)
						a[i][j][k+1]=a[i][j][k];
					if(count==3)
						a[i][j][k+1]=1;
				}
				if(i==N-1&&j!=0&&j!=N-1){
					count=0;
					if(a[i-1][j-1][k]==1)
						count++;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i-1][j+1][k]==1)
						count++;
					if(a[i][j-1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k+1]=0;
					if(count==2)
						a[i][j][k+1]=a[i][j][k];
					if(count==3)
						a[i][j][k+1]=1;
				}
				if(j==N-1&&i!=0&&i!=N-1){
					count=0;
					if(a[i-1][j-1][k]==1)
						count++;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i][j-1][k]==1)
						count++;
					if(a[i+1][j-1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k+1]=0;
					if(count==2)
						a[i][j][k+1]=a[i][j][k];
					if(count==3)
						a[i][j][k+1]=1;
				}
				if(i==N-1&&j==N-1){
					count=0;
					if(a[i-1][j-1][k]==1)
						count++;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i][j-1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k+1]=0;
					if(count==2)
						a[i][j][k+1]=a[i][j][k];
					if(count==3)
						a[i][j][k+1]=1;
				}
				else if(i!=0&&j!=0&&i!=N-1&&j!=N-1){
					count=0;
					if(a[i-1][j-1][k]==1)
						count++;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i-1][j+1][k]==1)
						count++;
					if(a[i][j-1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(a[i+1][j-1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(a[i+1][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k+1]=0;
					if(count==2)
						a[i][j][k+1]=a[i][j][k];
					if(count==3)
						a[i][j][k+1]=1;
				}
			}
	}else{
		for(i=0;i<N;i++)
			for(j=0;j<N;j++){
				count=0;
				if(i==0&&j==0){
					if(a[i][j+1][k]==1)
						count++;
					else if(a[i+1][j][k]==1)
						count++;
					else if(a[i+1][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k-1]=0;
					else if(count==2)
						a[i][j][k-1]=a[i][j][k];
					else if(count==3)
						a[i][j][k-1]=1;
				}
				if(i==0&&j!=0&&j!=N-1){
					if(a[i][j-1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(a[i+1][j-1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(a[i+1][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k-1]=0;
					if(count==2)
						a[i][j][k-1]=a[i][j][k];
					if(count==3)
						a[i][j][k-1]=1;
				}
				if(i==0&&j==N-1){
					if(a[i][j-1][k]==1)
						count++;
					if(a[i+1][j-1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k-1]=0;
					if(count==2)
						a[i][j][k-1]=a[i][j][k];
					if(count==3)
						a[i][j][k-1]=1;
				}
				if(i!=0&&i!=N-1&&j==0){
					count=0;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i-1][j+1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(a[i+1][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k-1]=0;
					if(count==2)
						a[i][j][k-1]=a[i][j][k];
					if(count==3)
						a[i][j][k-1]=1;
				}
				if(i==N-1&&j==0){
					count=0;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i-1][j+1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k-1]=0;
					if(count==2)
						a[i][j][k-1]=a[i][j][k];
					if(count==3)
						a[i][j][k-1]=1;
				}
				if(i==N-1&&j!=0&&j!=N-1){
					count=0;
					if(a[i-1][j-1][k]==1)
						count++;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i-1][j+1][k]==1)
						count++;
					if(a[i][j-1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k-1]=0;
					if(count==2)
						a[i][j][k-1]=a[i][j][k];
					if(count==3)
						a[i][j][k-1]=1;
				}
				if(j==N-1&&i!=0&&i!=N-1){
					count=0;
					if(a[i-1][j-1][k]==1)
						count++;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i][j-1][k]==1)
						count++;
					if(a[i+1][j-1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k-1]=0;
					if(count==2)
						a[i][j][k-1]=a[i][j][k];
					if(count==3)
						a[i][j][k-1]=1;
				}
				if(i==N-1&&j==N-1){
					count=0;
					if(a[i-1][j-1][k]==1)
						count++;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i][j-1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k-1]=0;
					if(count==2)
						a[i][j][k-1]=a[i][j][k];
					if(count==3)
						a[i][j][k-1]=1;
				}else if(i!=0&&j!=0&&i!=N-1&&j!=N-1){
					count=0;
					if(a[i-1][j-1][k]==1)
						count++;
					if(a[i-1][j][k]==1)
						count++;
					if(a[i-1][j+1][k]==1)
						count++;
					if(a[i][j-1][k]==1)
						count++;
					if(a[i][j+1][k]==1)
						count++;
					if(a[i+1][j-1][k]==1)
						count++;
					if(a[i+1][j][k]==1)
						count++;
					if(a[i+1][j+1][k]==1)
						count++;
					if(count<=1||count>=4)
						a[i][j][k-1]=0;
					if(count==2)
						a[i][j][k-1]=a[i][j][k];
					if(count==3)
						a[i][j][k-1]=1;
				}
			}
	}
}
void set(int g){
	g%=2; 
	int i=N,j=N; 
	while(!KEY_DOWN(VK_RBUTTON)) {                      		
		if(KEY_DOWN(VK_LBUTTON)){
			POINT p;
			GetCursorPos(&p);
			ScreenToClient(h,&p);             
			GetCurrentConsoleFont(hOutput, FALSE, &consoleCurrentFont);
			int x=p.x/=consoleCurrentFont.dwFontSize.X;
			int y=p.y/=consoleCurrentFont.dwFontSize.Y;
			a[y-3][(x-2)/2][0]=!a[y-3][(x-2)/2][0];
			while(KEY_DOWN(VK_LBUTTON));
		}
		show(0);
		cout<<"鼠标左键点击可更改,右键点击开始运行\n"; 
	}
	system("cls");
}
int main(){
	HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
	DWORD mode;
	GetConsoleMode(hStdin, &mode);
	mode &= ~ENABLE_QUICK_EDIT_MODE;
	SetConsoleMode(hStdin, mode);
	std::ios::sync_with_stdio(false);
	cout<<"输入大小(超过 100 屏幕刷新效果可能不佳):";
	cin>>N;
	system("cls"); 
	int i=N,j=N,k,count,n,t;
	srand(time(NULL));
	cout<<"请选择模板:\n";
	cout<<"输入 1:空\n";
	cout<<"输入 2:稀疏随机\n";
	cout<<"输入 3:中等随机\n";
	cout<<"输入 4:密集随机\n";
	cout<<"请输入:";
	cin>>t;
	system("cls"); 
	if(t==1){
		set(0);
	}else if(t==2){
		for(int i=1;i<=N*N/4;i++)
			a[rand()%N][rand()%N][0]=1;
	}else if(t==3){
		for(int i=1;i<=N*N/2;i++)
			a[rand()%N][rand()%N][0]=1;
	}else if(t==4){
		for(int i=1;i<=N*N/1.5;i++)
			a[rand()%N][rand()%N][0]=1;
	}else{
		cout<<"错误!退出。";
		exit(0); 
	}
	i=0;
	while(1){
		show(i);
		update(i);
		i++;
	}
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:40:26  更:2021-10-07 13:41:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 18:47:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计