[問題] 生命遊戲...

看板C_and_CPP (C/C++)作者 (小瓜)時間16年前 (2009/12/08 01:20), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
目前正在進行寫生命遊戲的程式 說明 生命遊戲(game of life)為1970年由英國數學家J. H. Conway所提出,某一細胞的鄰居 包括上、下、左、右、左上、左下、右上與右下相鄰之細胞,遊戲規則如下: 孤單死亡:如果細胞的鄰居小於一個,則該細胞在下一次狀態將死亡。 擁擠死亡:如果細胞的鄰居在四個以上,則該細胞在下一次狀態將死亡。 穩定:如果細胞的鄰居為二個或三個,則下一次狀態為穩定存活。 復活:如果某位置原無細胞存活,而該位置的鄰居為三個,則該位置將復活一細胞。 在24*24的方格中模擬各世代生物體的狀態 程式寫出來compile有過 可是生物體都沒有死亡的現象,一直不斷增加到飽和 不曉得是什麼緣故 可以麻煩各位幫忙看看嗎@@ 謝謝<(_ _)> #include "stdafx.h" #include "consola.h" #include "iostream" #include "time.h" using namespace std; void showlife ( void ); void nextlife ( void ); int checksquare ( int , int ); void copylife ( void ); int lifeA[24][24] = {0}; int lifeB[24][24] = {0}; int _tmain(int argc, _TCHAR* argv[]) { srand ( time(NULL) ); // initial life for ( int i = 0; i < 300; i++ ) { int x = rand() % 24; int y = rand() % 24; lifeA[x][y] = 1; } while (1) { showlife(); delay(1000); nextlife(); copylife(); } gotoxy(40,20); system("pause"); return 0; } void showlife ( void ) { for ( int i = 0; i < 24; i++ ) { for ( int j = 0; j < 24; j++ ) { if( lifeA[i][j] == 1 ) { gotoxy(i,j); textcolor( LIGHTGREEN ); cout << "o" ; } } } } void nextlife ( void ) { // There are three conditions: // Condition 1: born for ( int i = 0; i < 24; i++ ) { for ( int j = 0; j < 24; j++ ) { if ( lifeA[i][j] == 0 && checksquare(i,j) == 3) { lifeB[i][j] = 1; } } } // Condition 2: dead for ( int i = 0; i < 24; i++ ) { for ( int j = 0; j < 24; j++ ) { if ( lifeA[i][j] == 1 && checksquare(i,j) >= 4 || checksquare(i,j) <= 1) { lifeB[i][j] = 0; } } } // Condition 3: live for ( int i = 0; i < 24; i++ ) { for ( int j = 0; j < 24; j++ ) { if ( lifeA[i][j] == 1 && checksquare(i,j) == 2 || checksquare(i,j) == 3 ) { lifeB[i][j] = 1; } } } } int checksquare ( int x, int y ) { int sum = 0; if ( lifeA[x-1][y-1] == 1 ) // upper left { sum = sum + 1; } if ( lifeA[x][y-1] == 1 ) // upper middle { sum = sum + 1; } if ( lifeA[x+1][y-1] == 1 ) // upper right { sum = sum + 1; } if ( lifeA[x-1][y] == 1 ) // left { sum = sum + 1; } if ( lifeA[x+1][y] == 1 ) // right { sum = sum + 1; } if ( lifeA[x-1][y+1] == 1 ) // lower left { sum = sum + 1; } if ( lifeA[x][y+1] == 1 ) // lower middle { sum = sum + 1; } if ( lifeA[x+1][y+1] == 1 ) // lower right { sum = sum + 1; } return sum; } void copylife ( void ) { for ( int i = 0; i < 24; i++ ) { for ( int j = 0; j < 24; j++ ) { lifeA[i][j] = lifeB[i][j]; } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.5.44

12/08 10:02, , 1F
沒有把舊的畫面清掉
12/08 10:02, 1F
文章代碼(AID): #1B7Jbc7U (C_and_CPP)
文章代碼(AID): #1B7Jbc7U (C_and_CPP)