الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

The Game of Life لعالم الرياضيات Conway

بدأه مصطفى 36a2 في 6 يوليو 2014 · 0 رد · 949 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم ورحمة الله وبركاته

لتحريك الأجواء قليلاً , الكود التالي بسي++ يقوم بتنفيذ لعبة الحياة بشكل عشوائي

الكود 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

هذا الاختراع الرياضي , لا حدود لجماله , أنصحكم بمشاهدة بعض الفيديوهات أيضاً , لمعرفة جمالية هذا الاختراع

 

والله ولي التوفيق

4

مواضيع مشابهة