Life Game
何か作らないと、と思いつつ、でもGUIはしんどい。
何かないかなあと思ったときに、ライフゲームを思いついた
Haskellでの多重配列の良い扱い方がわからないので、とりあえずC++で。
長くなってしまった。
オブジェクトにしてるけど、jの扱いなど、安全性もへったくれもない。
とりあえず動くものを作ろうという精神笑
Haskellで短く書いている例をブログなどでいくつか見かけたので、
次はそれを参考にしようと思います
#include<iostream> #include<string> #define N 10 using namespace std; class LifeGame{ int life[N][N],i,j; private: int aroundLife(int l,int k){ return (life[l-1][k-1] + life[l-1][k] + life[l-1][k+1] +life[l][k-1] + life[l][k+1] +life[l+1][k-1] + life[l+1][k] + life[l+1][k+1]); } public: void getData(){ string str; i = 1; for(int k = 0; k < N ; k++) life[0][k] = 0; while(1){ cin >> str; if(str == "0") break; j = str.length(); for(int k = 0; k <= j+1 ; k++){ if(k == 0 || k == j+1) life[i][k] = 0; else life[i][k] = str[k-1] - '0'; } i++; } for(int k = 0; k <= j+1 ; k++) life[i][k] = 0; } void updataLife(){ int nextLife[N][N]; int sum; for(int l = 1 ; l < i ; l++){ for(int k = 1 ; k <= j ; k++){ sum = aroundLife(l,k); if(sum == 3) nextLife[l][k] = 1; else if(life[l][k] == 1 && sum == 2) nextLife[l][k] = 1; else nextLife[l][k] = 0; } } for(int l = 1 ; l < i ; l++){ for(int k = 1 ; k <= j ; k++) life[l][k] = nextLife[l][k]; } } void showLife(){ for(int l = 1; l < i ; l++){ for(int k = 1 ; k <= j ; k++){ if(life[l][k]==1) cout << "*"; else cout << "-"; } cout << endl; } } };