■
sunriseは注文した。
- 作者: 相田裕
- 出版社/メーカー: メディアワークス
- 発売日: 2002/11/01
- メディア: コミック
- 購入: 6人 クリック: 145回
- この商品を含むブログ (242件) を見る
コンウェイのライフゲームを作った。Wikipediaにのってる初期状態入れたら正しく動かないこともあったからどっか間違えた。過密のcaseをdefaultにまとめた時と動作が変わった気がしてもうだめだと思う。
#include<iostream> #include<windows> #define G_SIZE 9 /* status見て回って変化するならChange=Trueに 最後にChage=TrueのGridのStatusを入れ替えて1ループ終わり */ /////////////////////////////////////////////////////// class grid{ private: bool status;//True=live bool change;//True=状態変化 void set_change(){ change=true; } public: grid(){ status=true; change=false; } grid(bool s){ status=s; change=false; } bool get_status(){ return status; } bool get_change(){ return change; } void solve_status(int count); void change_grid(); }; void grid::solve_status(int count){ switch(count){ case 1:if(status==true)set_change(); break;//過疎 case 2:;break; //維持 case 3:if(status==false)set_change(); break;//誕生 case 4:if(status==true)set_change(); break;//過密 case 5:if(status==true)set_change(); break;//過密 case 6:if(status==true)set_change(); break;//過密 case 7:if(status==true)set_change(); break;//過密 case 8:if(status==true)set_change(); break;//過密 } } void grid::change_grid(){//生死反転 if(change==true){ status=(!status); change=false; } } /////////////////////////////////////////////////////// class field{ private: grid **a; int x,y; int counter(int x,int y); void update(); public: field(); void next(); void print_field();//全体表示 }; field::field(){ bool s[G_SIZE][G_SIZE];//初期状態用 a=new grid*[G_SIZE]; for(x=0;x<G_SIZE;x++){ a[x]=new grid[G_SIZE]; } for(x=0;x<G_SIZE;x++){ for(y=0;y<G_SIZE;y++){ a[x][y]=grid(s[x][y]); } } } int field::counter(int x,int y){ int count=0; int i,j; for(i=x-1;i<x+2;i++){ for(j=y-1;j<y+2;j++){ if((i>=0&&j>=0)&&(i<G_SIZE&&j<G_SIZE)){ if(a[i][j].get_status()==true) count++; } } } if(a[x][y].get_status()==true) count--; return count; } void field::update(){ for(x=0;x<G_SIZE;x++){ for(y=0;y<G_SIZE;y++){ a[x][y].change_grid(); } } } void field::next(){ for(x=0;x<G_SIZE;x++){ for(y=0;y<G_SIZE;y++){ a[x][y].solve_status(counter(x,y)); } } update(); } void field::print_field(){ for(x=0;x<G_SIZE;x++){ for(y=0;y<G_SIZE;y++){ if(a[x][y].get_status()==true) std::cout<<"*"; else std::cout<<"+"; } std::cout<<std::endl; } } ////////////////////////////////////////////////////// void main(){ field a; int count=0; while(count<131){ std::cout<<count<<"世代"<<std::endl; a.print_field(); a.next(); std::cout<<std::endl; count++; } }