Tic Tac Toe ( XOX )

Oyun iki kişi tarafından oynanmaktadır. X -> 1.kişi , O -> 2.kişidir.

Örnek olarak 1.kişinin oyunu kazanması için aşağıda belirtilen üç maddeden birini yapması gerekmektedir.

  1. Bir satırın tamamen X olması
  2. Bir sütunun tamamen X olması
  3. Esas köşegen veya yedek köşegen tamamen X olmalıdır.

// main.cpp

#include <cstdlib>
#include <iostream>

using namespace std;

#include "oyun.h"

int main()
{
   Oyun oyna;
   int hYap;
   oyna.baslikYazdir();
   while((oyna.genelKontrol())!=2013){
      oyna.tahtaGoruntule();
      cout << "\nHamlenizi giriniz: " ;
      cin  >> hYap;
      oyna.hamleYap(hYap);
      oyna.kazanmaKontrol();
  }
   //oyna.deneme();
   system("PAUSE");
   return EXIT_SUCCESS;
}

//oyun.cpp

#include <iostream>

using namespace std;

#include "oyun.h"

Oyun::Oyun(){
   int dene[3][3]={{0,0,0},{0,0,0},{0,0,0}};
   for(sayac=0;sayac<3;sayac++){
      for (sayac2=0;sayac2<3;sayac2++)
         tahta[sayac][sayac2]=dene[sayac][sayac2]; 
         // İki boyutlu dizideki tüm alanlar 0 verilerek hamlelere izin veriliyor.
   }
   tHamle = 0;
}


void Oyun::tahtaGoruntule(){
   
   for(sayac=0;sayac<3;sayac++){
      for (sayac2=0;sayac2<3;sayac2++){
          
          if ((sayac2%3)==0)
             cout << "\n";
          
          if (tahta[sayac][sayac2]==0)
             cout << (sayac*3)+(sayac2+1) << "   ";
          
          else{
               if(tahta[sayac][sayac2]==1)
                  cout << "X   ";
               else if (tahta[sayac][sayac2]==2)
                  cout << "O   ";
               else 
                  cout << "Hata" ;
          }
      }
   }
}

void Oyun::baslikYazdir (){
     cout << "Bu program DELIMUHENDIS.COM tarafindan hazirlanmistir.\n"
          << "Programda numarali alanlar bos oldugunu gostermektedir.\n"
          << "(X) 1 numarali oyuncuyu, (O) ise 2 numarali oyuncuyu gostermektedir.\n"
          << endl;
}

void Oyun::hamleYap(int hamle){ 
     tHamle++;
     sira=tHamle%2;
     // Geçersiz hamleler önleniyor.
     if (((hamle<0)||(hamle>9))){
        cout << "Gecersiz hamle yaptiniz.\n"
             << "Yeni hamle yapiniz.\n";
        while((hamle<0)||(hamle>9)){
           cout << "Yeni hamleniz bekleniyor.";
           cin  >> hamle; 
         }  
      }
   // Hamlenin yeri belirleniyor.
   if (hamle<=3){
      if(tahta[0][hamle-1]==0){
         cout << "Hamleniz gerceklestirildi." << endl;
         tahta[0][hamle-1]=sira+1;
      }
      else{
         cout << "\nHamle yaptiginiz alan doludur.\n"
              << "Hamleniz gecersiz sayilacaktir.\n"
              << "Tahta goruntulendikten sonra yeni hamlenizi yapiniz.\n"
              << endl;
         tHamle--; 
      }
   }
   else if (hamle <=6){
      
      if(tahta[1][(hamle%4)]==0){
         cout << "Hamleniz gerceklestirildi." << endl;
         tahta[1][(hamle%4)]=sira+1;
      }
      else{
         cout << "\nHamle yaptiginiz alan doludur.\n"
              << "Hamleniz gecersiz sayilacaktir.\n"
              << "Tahta goruntulendikten sonra yeni hamlenizi yapiniz.\n"
              << endl;
         tHamle--; 
      }
   }
   else{
      if(tahta[2][((hamle%6)-1)]==0){
         cout << "Hamleniz gerceklestirildi." << endl;
         tahta[2][((hamle%6)-1)]=sira+1;
      }
      else{
         cout << "\nHamle yaptiginiz alan doludur.\n"
              << "Hamleniz gecersiz sayilacaktir.\n"
              << "Tahta goruntulendikten sonra yeni hamlenizi yapiniz.\n"
              << endl;
         tHamle--;
      }
   }
  
}

void Oyun::kazanmaKontrol(){
      if (tHamle==9)
         cout << "\n\n***Oyun berabere bitmistir.***" << endl;
      else{
           if((tahta[0][0]==1 && tahta[0][1]==1 && tahta[0][2]==1) 
              ||(tahta[0][0]==1 && tahta[1][0]==1 && tahta[2][0]==1) 
              ||(tahta[0][0]==1 && tahta[1][1]==1 && tahta[2][2]==1) 
              ||(tahta[0][1]==1 && tahta[1][1]==1 && tahta[2][1]==1) 
              ||(tahta[0][2]==1 && tahta[1][2]==1 && tahta[2][2]==1) 
              ||(tahta[0][2]==1 && tahta[1][1]==1 && tahta[2][0]==1) 
              ||(tahta[1][0]==1 && tahta[1][1]==1 && tahta[1][2]==1) 
              ||(tahta[2][0]==1 && tahta[2][1]==1 && tahta[2][2]==1))
              {
                 cout << "\n\nOyunu 2 numarali kisi kazanmistir.Tebrikler!" << endl;
                 tHamle=9;
              }
           else if ((tahta[0][0]==2 && tahta[0][1]==2 && tahta[0][2]==2) 
                    ||(tahta[0][0]==2 && tahta[1][0]==2 && tahta[2][0]==2) 
                    ||(tahta[0][0]==2 && tahta[1][1]==2 && tahta[2][2]==2) 
                    ||(tahta[0][1]==2 && tahta[1][1]==2 && tahta[2][1]==2) 
                    ||(tahta[0][2]==2 && tahta[1][2]==2 && tahta[2][2]==2) 
                    ||(tahta[0][2]==2 && tahta[1][1]==2 && tahta[2][0]==2) 
                    ||(tahta[1][0]==2 && tahta[1][1]==2 && tahta[1][2]==2) 
                    ||(tahta[2][0]==2 && tahta[2][1]==2 && tahta[2][2]==2))
           {
                    cout << "\n\nOyunu 1 numarali kisi kazanmistir.Tebrikler!" << endl;
                    tHamle=9;  
           };
      }
}

int Oyun::genelKontrol(){
   if (tHamle == 9)
      return 2013;
   else
      return 2012;
}

//oyun.h

#ifndef OYUN_h
#define OYUN_h

class Oyun {
   public:
      Oyun();
      void tahtaGoruntule();
      void hamleYap(int);
      void kazanmaKontrol();
      int  genelKontrol();
      void baslikYazdir();
   private:
      int tahta[3][3];
      int sayac, sayac2;
      int tHamle;
      int sira;
   
};
#endif

 

Become a patron at Patreon!

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogcu bunu beğendi: