Conwayın Hayat Oyunu C ve C++ Kodu

      Hayat oyunu 1970’de İngiliz matematikçi Horton Conway tarafından geliştirirmiş bir hücresel otomattır. Hücresel otomatın en iyi bilinen örneğidir.

Bu oyun aslında, insan oyunculardan girdiye ihtiyaçsız başlangıç durumları tarafından evreleri saptanan anlamına gelen insansız bir oyundur. Birinin başlangıç yapılandırmasını yaratarak ve nasıl geliştiğini gözlemleyerek hayat oyununu etkilemesidir.

Kurallar

  • Bir canlı hücrenin, iki’den daha az canlı komşusu varsa “yalnızlık nedeniyle” ölür
  • Bir canlı hücrenin, üç’ten daha fazla canlı komşusu varsa “kalabalıklaşma nedeniyle” ölür
  • Bir canlı hücrenin, iki ya da üç canlı komşusu varsa değişmeden bir sonraki nesile kalır
  • Bir ölü hücrenin tam olarak üç canlı komşusu varsa canlanır.

C Dilinde Bununla ilgili bir oyun yazmak ister isek aşağıdaki kodları kullanabiliriz.Kodlarda başlangıç hücre matrisini ben hazır verdim kendinize göre değiştirebilirsiniz.Kodun Yorum satırlarında algoritmaya dair ipuçları zaten bulunmakta ancak biraz daha acıklayıcı olması acısından

Genel algoritma : 

  • 2 Boyutlu matristeki tüm elemanları taramaya başla
  • Sınır elemanlarının 8 den daha az komsu olma olasılıgı oldugu için onları ayır
  • ortadaki elemanlar için her eleman başına 8 komsu oldugu için 8 kontrol yap 
  • kontroller yapılırken eğer yasayan komsu var ise komsuyu bir değişken içinde tut ve sürekli arttır 
  • kontrol sonuclarıyla oyun kurallarını karsılastıralım

Not : Dev C++ Derleyicisinde Çalıştırılmıştır
#include <stdio.h>
#include <stdlib.h>
#define satir 6 
#define sutun 6
int i,j,komsu,ford=0,tablo_gecis[satir][sutun],table[satir][sutun]={ 
    {0, 0, 0, 0, 0, 0}, 
    {0, 0, 1, 0, 0, 0}, 
    {0, 0, 0, 1, 0, 0},
    {0, 1, 1, 1, 0, 0}, 
    {0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0} };
    char secim;

main () { 
     oyun_cizim();  // YAZDIRMA FONKSİYONUM
     oyun_menu(); // OYUN FONKSİYONUM

     system("pause");
     } 

     oyun_menu () {   // oyun menusu 
           for(;;) { 

           if(ford==12){ 
                         printf("Jenerasyon ayni oyun biter "); break; } 
           fflush(stdin);   

           printf("Continue <C> or <c>\n    Exit <E> or <e>  ");
           scanf("%c",&secim);

          if(secim=='C' || secim=='c' ) {
                 oyun_algoritma(); oyun_gecis(); 
                 oyun_cizim(); 
                 ford++; 
          }//KONTROLLERİ YAP DİZİYİ AKTAR OYUN SONUCUNU CİZ   
          else if(secim=='E' || secim=='e' ) { 
               printf("Oyun Bitmistir\n");
                break;  }
          else {  printf("Hatali Giris\n"); }                           

              } }
              /////
         oyun_gecis () { 
              for(i=0;i<6;i++){  
                                  for(j=0;j<6;j++) {  
                                                   table[i][j]=tablo_gecis[i][j];   
                                                   }    } 
                                                   } // Geri diziye alma fonksiyonum
                                                   //
     oyun_cizim () {  // oyunun cizdirmeyle ilgili islerini yapan fonksiyonu 

         for(i=0;i<satir;i++) { printf("|");  for(j=0;j<sutun;j++) {                    
         if(table[i][j]==1)     printf(" X |");
         else printf("   |"); } printf("\n");  } printf("\n");  }

     oyun_algoritma () { // KONTROLLERİM 

               for(i=0;i<satir;i++){ 
		       for(j=0;j<sutun;j++)  { komsu=0;
         // matris sınırdaki elemanlara şartlarla girmeyi kısıtladım iç elemanlarda 8 tarafa bakar 
            if(i>0 && j>0 )    {     if(table[i-1][j-1]==1) komsu+=1; }   
            if(i>0)            {     if(table[i-1][j]==1)   komsu+=1; }
            if(i>0 && j<sutun) {     if(table[i-1][j+1]==1) komsu+=1; }        
            if(j<sutun)        {     if(table[i][j+1]==1)   komsu+=1; }
            if(j>0)            {     if(table[i][j-1]==1)   komsu+=1; }
            if(i<satir && j>0) {     if(table[i+1][j-1]==1) komsu+=1; }
            if(i<satir)        {     if(table[i+1][j]==1)   komsu+=1; }
            if(i<satir && j<sutun ){ if(table[i+1][j+1]==1) komsu+=1; }

           // ELDELERİM  Ve Kurallarım

			 if ((table[i][j]==1) && komsu>3)  
              tablo_gecis[i][j] = 0;
             else if ((table[i][j] == 1) && komsu <2) 
              tablo_gecis[i][j] = 0;
             else if ((table[i][j] == 1) && (komsu == 2 || komsu == 3)) 
              tablo_gecis[i][j] = 1;
             else if ((table[i][j] == 0) && komsu == 3) 
              tablo_gecis[i][j] = 1;
               	}}}

 

 

Conwayın Hayat Oyunu C ve C++ Kodu” hakkında 2 yorum

    1. Error 5 error C3861: ‘oyun_algoritma’: identifier not found c:\users\levent\documents\visual studio 2013\projects\project1\project1\main.cpp 37 1 Project1

      Error 2 error C3861: ‘oyun_cizim’: identifier not found c:\users\levent\documents\visual studio 2013\projects\project1\project1\main.cpp 18 1 Project1

      17 IntelliSense: explicit type is missing (‘int’ assumed) c:\Users\levent\Documents\Visual Studio 2013\Projects\Project1\Project1\main.cpp 58 1 Project1

      ne yapmam lazım yardımcı olur muusnuz

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir