السلام عليكم ورحمة الله وبركاته
لتحريك الأجواء قليلاً , الكود التالي بسي++ يقوم بتنفيذ لعبة الحياة بشكل عشوائي
الكود very dirty مكتوب في خمس دقائق لذلك سامحونا , ويستخدم win-api (يعمل على ويندوز فقط ) لتسريع الخرج
#include <iostream>#include <windows.h>#include <cstdlib>#include <ctime>using namespace std;int main(){ const int Size=200; char *x[Size]; for(int i=0;i<Size;i++) x=new char[Size]; HANDLE H; SMALL_RECT Window; H=GetStdHandle(STD_OUTPUT_HANDLE); Window= {0,0,Size,Size}; CHAR_INFO *Screen=new CHAR_INFO[Size*Size]; srand(time(0)); for(int i=1;i<Size-1;i++) for(int j=1;j<Size-1;j++) x[j]=rand()%100==0?'#':0; //HDC dc=GetDC(GetDesktopWindow()); for(int time=0;;time++){ Sleep(100); SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),{0,0}); //cin.get(); for(int i=0;i<Size;i++) { for(int j=0;j<Size;j++) { // SetPixel(dc,i,j,x[j]?0:0xFFFFFF); //cout<<x[j]; Screen[j+Size*i].Attributes=x[j]?0x00:0xFF; } //cout<<endl; } WriteConsoleOutputA(H,Screen,{Size,Size},{0,0},&Window); //0 dead //1 will born //'#' alive //'%' will diy for(int i=1;i<Size-1;i++) for(int j=1;j<Size-1;j++) { int n=0; for(int q=-1;q<=1;q++) for(int qq=-1;qq<=1;qq++) { if(q||qq) if(x[i+q][j+qq]!=0)//alive n++; } if(x[j]>1)//alive { if(n>3)//will die due to overcrouded x[j]='@'; else if(n<2)//will die due to isolation x[j]='@'; else if(n==3||n==2)//survive x[j]='#'; }else {//dead or gonna born if(n==3)//born x[j]=1; else if(n!=3)//still dead x[j]=0; } } for(int i=0;i<Size;i++) for(int j=1;j<Size;j++){ if(x[j]=='@') x[j]=0;//dead :( else if(x[j]==1) x[j]='#';//it's alive :) } } return 0;}وهذه نسخة بدون تسريع الخرج السابق .
#include <iostream>#include <windows.h>#include <cstdlib>#include <ctime>using namespace std;int main(){ const int Size=50; char x[Size][Size]={0}; srand(time(0)); for(int i=1;i<Size-1;i++) for(int j=1;j<Size-1;j++) x[j]=rand()%10==0?'#':0; for(int time=0;;time++){ //Sleep(100); SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),{0,0}); //cin.get(); for(int i=0;i<Size;i++) { for(int j=0;j<Size;j++) { cout<<x[j]; } cout<<endl; } //0 dead //1 will born //'#' alive //'%' will diy for(int i=1;i<Size-1;i++) for(int j=1;j<Size-1;j++) { int n=0; for(int q=-1;q<=1;q++) for(int qq=-1;qq<=1;qq++) { if(q||qq) if(x[i+q][j+qq]!=0)//alive n++; } if(x[j]>1)//alive { if(n>3)//will die due to overcrouded x[j]='@'; else if(n<2)//will die due to isolation x[j]='@'; else if(n==3||n==2)//survive x[j]='#'; }else {//dead or gonna born if(n==3)//born x[j]=1; else if(n!=3)//still dead x[j]=0; } } for(int i=0;i<Size;i++) for(int j=0;j<Size;j++){ if(x[j]=='@') x[j]=0;//dead :( else if(x[j]==1) x[j]='#';//it's alive :) } } return 0;}إذا شاهدت خرج البرنامج وتفاجأت , فستتفاجأ أكثر بمعرفة أنه مبني على ثلاثة قواعد بسيطة جداً
يمكنكم القراءة عن اللعبة في ويكبيديا , وهذا رابط لتنفيذها on-line
هذا الاختراع الرياضي , لا حدود لجماله , أنصحكم بمشاهدة بعض الفيديوهات أيضاً , لمعرفة جمالية هذا الاختراع
والله ولي التوفيق