1. 程式人生 > >C++: 生命遊戲(模擬細胞群演化)

C++: 生命遊戲(模擬細胞群演化)

生命遊戲是由英國劍橋大學數學家John Conway提出的,遊戲的規則是這樣的,在一個M*N棋盤上,每格只有兩個狀態, “生”和“死”,分別表示是否被一個生命棋子所佔有.每個方格有八個鄰格,遊戲的規則如下:
a) 對於處在“生”狀態的格,若八個鄰居中當前有2個或3個“生命”,則繼續保持存活狀態,否則在下一個狀態,將因過於孤獨或過於擁擠而死亡.
b) 對於處在“死”態的空格,若八個鄰格中有3個“生命”,則該格在下一狀態將轉變為“生命”(代表繁衍過程),否則繼續空著. 
遊戲中的所有生命棋子依據上述確定的區域性規則作同步更新,一代繁殖一代地進行著。
用C++進行摸擬
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<unistd.h>
using namespace std;

void init();
void printArea();
void evol();
int surroundingLifeCount(int y, int x);

bool** cells;
int lenArea;
int amount;

int main(void) {
	cout << "輸入網格寬度: ";
	cin >> lenArea; 
	cells = new bool*[lenArea];
	for(int i=0;i<lenArea;i++) cells[i] = new bool[lenArea];
	cout << "輸入初始個數: ";
	cin >> amount;
	init();
	while(true) {
		system("cls");
		printArea();
		evol();
		sleep(1);
	}
}

void init() {
	srand(time(NULL));
	for(int i=0;i<lenArea;i++) for(int j=0;j<lenArea;j++) cells[i][j] = false;
	for(int i=0;i<amount;i++) {
		int m = rand()%lenArea,n = rand()%lenArea;
		if(cells[m][n]) {i--;continue;}
		else cells[m][n] = true;
	}
}

void printArea() {
	for(int i=0;i<lenArea;i++) {
		for(int j=0;j<lenArea;j++)
			if(cells[i][j]) cout << " " << "*";
			else cout << "  ";
		cout << endl;
	}
}

void evol() {
	int lifeCount, x, y;
	for(int i=0;i<lenArea;i++) {
		for(int j=0;j<lenArea;j++) {
			lifeCount = surroundingLifeCount(i,j);
			if(cells[i][j]) if(lifeCount<2 || lifeCount>3) cells[i][j] = false;
			if(cells[i][j]==false && lifeCount==3) cells[i][j] = true;
		}
	}
}

int surroundingLifeCount(int y, int x) {
	int curY, curX;
	int lifeCount = 0;
	for(curY=y-1;curY<=y+1;curY++)
		for(curX=x-1;curX<=x+1;curX++)
			if( !(curX==x&&curY==y) && curY>=0 && curY<lenArea && curX>=0 && curX<lenArea && cells[curY][curX]) lifeCount++;
	
	return lifeCount;
}


相關推薦

C++: 生命遊戲(模擬細胞演化)

生命遊戲是由英國劍橋大學數學家John Conway提出的,遊戲的規則是這樣的,在一個M*N棋盤上,每格只有兩個狀態, “生”和“死”,分別表示是否被一個生命棋子所佔有.每個方格有八個鄰格,遊戲的規則

生命遊戲細胞自動機的學習筆記

自動機 遊戲 Last updated: 23rd. July, 2012 野比 2012 版權所有(本文為學習筆記,知識淺薄。我會將學習中的實驗記錄和心得記錄在此。) 歡迎對這方面感興趣的愛好者一起研究。尋求技術指導。聯系QQ:1429013154我一直對人工智能很感興趣,苦於數學基礎太差,很多理論

pygame生命遊戲模擬_python Game of life生命棋畫素級別模擬作者:李興球

"""Conway's Game of Life),又稱康威生命棋,是英國數學家約翰·何頓·康威在1970年發明的細胞自動機。 本程式用pygame模擬這種現象,作者:李興球,風火輪少兒程式設計 www.scratch8.net 以前早就聽說過Game of Life,以為

C++ 生命遊戲

依然是跟著知乎上的Dalao學習。地址在這: https://zhuanlan.zhihu.com/p/24768071 以下程式碼: #include<iostream> #inc

Life Game生命遊戲C++實現

因為上了鮑老師的課,每週都要做一次課堂練習。所以大三才想起來開C++的坑= = 程式碼是課上一個半小時寫出來的。難免有考慮不周的地方。如果有什麼問題,請各位不吝賜教~ 首先解釋一下Life Game。開局一張棋盤,隨便放幾個棋子,然後每回合棋盤做一次更新,對棋盤的每個格子來說,看它周圍的

C語言——生命遊戲(初始

tput output lib 數據的初始化 turn art hand windows.h pre #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<

康威生命遊戲 第一部分-基本功能實現(C++ & Windows SDK)

生命遊戲簡介 生命遊戲其實是一個零玩家遊戲,它包括一個二維矩形世界,這個世界中的每個方格居住著一個活著的或死了的細胞。一個細胞在下一個時刻生死取決於相鄰八個方格中活著的或死了的細胞的數量。如果相鄰方格活著的細胞數量過多,這個細胞會因為資源匱乏而在下一個時

2017年第八屆藍橋杯 C++A組國賽 第二題 生命遊戲 題解

生命遊戲 康威生命遊戲是英國數學家約翰·何頓·康威在1970年發明的細胞自動機。 這個遊戲在一個無限大的2D網格上進行。 初始時,每個小方格中居住著一個活著或死了的細胞。 下一時刻每個細胞的狀態都由它周圍八個格子的細胞狀態決定。 具體來說:

51nod 1831 小C遊戲(博弈論+打表)

%d cstring tdi urn 博弈 ring stream 導出 logs 比較坑的題目。 題意就是:給出一堆石子,一次操作可以變成它的約數個,也可以拿只拿一個,不能變成一個,最後拿的人輸。 經過打表發現 幾乎所有質數都是先手必敗的,幾乎所有合數都是先手

CocosCreator生命遊戲

ima creator 文件 images 生命遊戲 zip blog life 遊戲 CocosCreator版本1.3.2 源文件 http://files.cnblogs.com/files/zzrom/lifegame.zip CocosCreator生命遊戲

CODE FESTIVAL 2017 qual A--C - Palindromic Matrix(模擬所有情況,註意細節)

需要 tip stream pac pos ear war sample element 個人心得:其實本來這題是有規律的不過當時已經將整個模擬過程都構思出來了,就打算試試,將每個字符和總和用優先隊列 裝起來,然後枚舉每個點,同時進行位置標誌,此時需要多少個點的時候拿出最大

C/S模型之TCP

cpp etl word client inet_addr accep 應用程序 with value 說明:利用TCP協議和多線程實現群聊功能。一個服務器,多個客戶端(同一個程序多次啟動)。客戶端向服務端發送數據,由服務端進行轉發到其他客戶端。 /服務端 // WSAS

c++小遊戲

小遊戲 ret 幫助 打怪 主函數 mes get() == post #include <iostream> using namespace std; double shengmingli=2000;//定義主角初始生命力 int gongjili=1

【ccf2017-12-2】遊戲(模擬)

個人感悟 num pos main clu div 參加 開始 給定 問題描述   有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,……,1號小朋友坐在n號小朋友的順時

BZOJ1025 [SCOI2009]遊戲 【置換 + 背包dp】

break algorithm http printf 問題 print 關系 class www 題目鏈接 BZOJ1025 題解 題意就是問一個\(1....n\)的排列在同一個置換不斷重復下回到\(1...n\)可能需要的次數的個數 和置換群也沒太大關系 我們只需知道

C語言/C遊戲編程學習之簡單 DLL 劫持,就是這麽任性

C語言 C++ C/C++ 遊戲編程C語言面向過程編程的語言;C++面向對象編程的語言。兩者有本質的區別,其實是完全不同的兩種語言,只不過C++兼容C語言而已。其中C++則一般看作是對C語言的擴展。因為C語言沒有面向對象的語法結構,而當時業界又迫切需要面向對象的編程特性,所以貝爾實驗室的開發者就為C語言添加了

瘋狂的圖形(利用C# + GDI plus模擬雜亂無章的現實場景)

ron 怎麽 private int sed get tps shc close 原文:瘋狂的圖形(利用C# + GDI plus模擬雜亂無章的現實場景) 本文給出了模擬竹葉、長葉

NOIP2011Mayan遊戲(模擬

wap 原來 流行 遊戲界面 ase truct htm swa 剪枝 Mayan puzzle是最近流行起來的一個遊戲。遊戲界面是一個77 行\times 5×5列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在

Xenko C#開源遊戲引擎入門

on() actor scale con 為什麽 pro and 三維 str 最近使有和 Three.js 開發三維頁面,覺得很有趣。以前在做WP應用的時候使用過MonoGame做過一點東西,後來Windows 10上來,MonoGame好像不怎麽支持了,也沒

生命遊戲的三種玩法

cas none 版本 clas lose .com size 一個接一個 max 生命遊戲 每個細胞有兩種狀態——存活或者死亡,每個細胞只與以其自身為中心的細胞產生互動。 當細胞為死亡狀態,若周圍有3個存活細胞,則該細胞變成存活狀態(模擬繁殖) 當細胞為存活狀態,若周圍