C++ ile XOX Oyunu Kodları

C++ Programlama diliyle kodlanmış açıklama satırlı hazır teslim XOX oyunu


#include <iostream> // Kullanıcıdan değer almamızı sağlayan kütüphane.
#include<time.h> // zaman sayaç kütüphanemiz.
#include<stdlib.h> // RAndom için kullandığımız kütüphane.
using namespace std;
char bolge[10] = {'0','1','2','3','4','5','6','7','8','9'}; // 9 tane XOX bölgesi oluşturuyoruz.
// Yapay zeka oynama sayısı :
int yzsira = 1;
// Zorluk -> Kolay : 0 || Orta : 1 || Zor : 2
int zorluk = 1; // zorluk seviyesi.
// Oyunu Bitiren olup olmadığını kontrol eder :
bool bitirenvar = false; // Oyun basladiginde bitireni degerini sifirla. ( Oyun basladiginda bitiren olamaz. )
void zeminciz(){
// XOX oyunun tabanı olan 9 bölge oluşturuyoruz.
cout << endl << bolge[1] << " | " << bolge[2] << " | " << bolge[3] << endl // Bölge 1 | Bölge 2 | Bölge 3
<< "- | - | -" << endl
<< bolge[4] << " | " << bolge[5] << " | " << bolge[6] << endl // Bölge 4 | Bölge 5 | Bölge 6
<< "- | - | -" << endl
<< bolge[7] << " | " << bolge[8] << " | " << bolge[9] << endl << endl ; // Bölge 7 / Bölge 8 / Bölge 9
}
bool kontrol(int yer){
// Yeri kontrol et. Yer X'e ve 0'a eşit değilse oyuna devam et.
return ((bolge[yer] != 'X' && bolge[yer] != 'O' ? true : false));
}
int rndsayi(int sayi = 9){//Random sayı oluştur 9 değerini ver.
return (rand() % sayi + 1);
}
int rndkontrol(int rnd, int sayi = 9){// XOX alanlarında 1 ile 9 arasında (9 Bölgemiz var XOX'de) rastgele sayı oluşturuyor.
if(kontrol(rnd)){
return rnd;//
}else{
return (rndkontrol(rndsayi(sayi)));//
// Oluşturulan Rastgele sayı değeri daha önce oluşturulmuş mu diye kontrol ediyor.
}
}
int caprazolasilik(int bolge1, int bolge2, int yer){ // Çapraz olarak XXX veya OOO gelme olasılığını kontrol ediyor.
if(((bolge[bolge1] == 'X' && bolge[bolge2] == 'X') || (bolge[bolge1] == 'O' && bolge[bolge2] == 'O')) && (bolge[yer] != 'X' && bolge[yer] != 'O'))
return yer;
// Bölge1 = X ve Bölge2 = X veya Bölge1 = 0 ve Bölge2 = 0 ve Bölge eşit değilse X'e ve Bölge eşit değilse 0'a.
// Uygun yer bulunamadıysa :
return 0; // değeri döndür.
}
int zeka(){
// Zeka bölümü. Bu bölümde yapay zekanın, kullanıcı hamle yaptıktan sonra hangi alanları seçeceğini, dolu-boş alanları ayırt edebileceğini ve ona göre hamle yapacağının kodları yazılıdır.
// Olasılıklar:
// Dikey Olasılıklar : -------------------------------------------------------------------------------------------------------------------
// 1,2,3 ve 4,5,6 aynı cins doluysa 7,8,9'a koy.
for(int a = 1,b = 4, c = 7; a <= 3;a++,b++,c++){
if(((bolge[a] == 'X' && bolge[b] == 'X') || (bolge[a] == 'O' && bolge[b] == 'O')) && (bolge[c] != 'X' && bolge[c] != 'O'))
return c;
}
// 7,8,9 ve 4,5,6 aynı cins doluysa 1,2,3'a koy.
for(int a = 7,b = 4, c = 1; a <= 9;a++,b++,c++){
if(((bolge[a] == 'X' && bolge[b] == 'X') || (bolge[a] == 'O' && bolge[b] == 'O')) && (bolge[c] != 'X' && bolge[c] != 'O'))
return c;
}
// 1,2,3 ve 7,8,9 aynı cins doluysa 4,5,6'a koy.
for(int a = 1,b = 7, c = 4; a <= 3;a++,b++,c++){
if(((bolge[a] == 'X' && bolge[b] == 'X') || (bolge[a] == 'O' && bolge[b] == 'O')) && (bolge[c] != 'X' && bolge[c] != 'O'))
return c;
}
// Yatay Olasılıklar : ----------------------------------------------------------------------------------------------------------------------------
// 1,4,7 ve 2,4,8 aynı cins doluysa 3,6,9'a koy.
for(int a = 1; a <= 7; a += 3){
if(((bolge[a] == 'X' && bolge[a+1] == 'X') || (bolge[a] == 'O' && bolge[a+1] == 'O')) && (bolge[a+2] != 'X' && bolge[a+2] != 'O'))
return (a+2);
}
// 2,5,8 ve 3,6,9 aynı cins doluysa 1,4,7'a koy.
for(int a = 2; a <= 8; a += 3){
if(((bolge[a] == 'X' && bolge[a+1] == 'X') || (bolge[a] == 'O' && bolge[a+1] == 'O')) && (bolge[a-1] != 'X' && bolge[a-1] != 'O'))
return (a-1);
}
// 1,4,7 ve 3,6,9 aynı cins doluysa 2,5,8'a koy.
for(int a = 1; a <= 7; a += 3){
if(((bolge[a] == 'X' && bolge[a+2] == 'X') || (bolge[a] == 'O' && bolge[a+2] == 'O')) && (bolge[a+1] != 'X' && bolge[a+1] != 'O'))
return (a+1);
}
// Çapraz Olasılıklar : -------------------------------------------------------------------------------------------------------------------------
// 1 - 5 -> 9
if(caprazolasilik(1,5,9) != 0)
return caprazolasilik(1,5,9);
// 3 - 5 -> 7
if(caprazolasilik(3,5,7) != 0)
return caprazolasilik(3,5,7);
// 5 - 9 -> 1
if(caprazolasilik(5,9,1) != 0)
return caprazolasilik(5,9,1);
// 7 - 5 -> 3
if(caprazolasilik(7,5,3) != 0)
return caprazolasilik(7,5,3);
// 1 - 9 -> 5
if(caprazolasilik(1,9,5) != 0)
return caprazolasilik(1,9,5);
// 3 - 7 -> 5
if(caprazolasilik(3,7,5) != 0)
return caprazolasilik(3,7,5);
// Eğer ZOR seviye seçiliyse ve bir olasılık yoksa köşeye oyna :
int rnd = rndkontrol(rndsayi(4));
switch(rnd){
case 1:
return 1;
break;
case 2:
return 3;
break;
case 3:
return 7;
break;
case 4:
return 9;
break;
default:
cout << "Bir Hata Oluştu : Eğer zor seçiliyse ve bir olasılık yoksa köşeye oyna." << endl;
break;
}
// Hiçbir olasılık yoksa rastgele seç :
return rndkontrol(rndsayi());;
}
void yapayzeka(){ // Yapay zekanın oyun hamlesi bu metotun içerisinde:
if(yzsira == 1){
// Zor seçilmediyse ilk oyunda rastgele yer seç :
if(zorluk != 2) {
int rnd = rndsayi();
if (kontrol(rnd)) {
bolge[rnd] = 'O';
} else {
yapayzeka();
}
}else {
if((bolge[5] != 'X' && bolge[5] != 'O')){
// Orta Boşsa :
bolge[5] = 'O';
}else{
// Orta Boş Değilse :
bolge[zeka()] = 'O';}
}
}else{
bolge[zeka()] = 'O';
}
// Eğer kolay seçilmişse hep raskele oynar :
if(zorluk != 0)
yzsira++;
}
void oyna(char oyuncu){
if(oyuncu == 'X'){// Kullanıcı .
int yer;
cout << "Sira X'de : X'i Yerlestireceginiz Alan Numarasini Yaziniz."; // Kullanıcının sırası.
cin >> yer;
if(kontrol(yer)){// Kullanıcı hamle yapacağı alanı seçiyor. Eğer o alan boş ise oraya X değerini veriyor.
bolge[yer] = 'X';
}else{ // O alana daha önce değer verilmişse Hatalı Giriş uyarısı alıyor.
cout << "Hatalı Giriş !" << endl;
oyna('X');
}
}else{
cout << "Sira O'da ..." << endl ;
yapayzeka(); // 0'ları Yapay Zeka Kontrol Ediyor.Yapay Zeka metodunda işlem gerçekleşiyor.
}
}
void kimbitirdi(int yer){
// Oyunu kimin kazandığının tespiti ;
if(bolge[yer] == 'X') { // X Kullanici idi. Kullanici 3 yanyana,dikey veya capraz koymayi basardiysa kullanici kazandi.
cout << "Kazanan : X\n! Tebrikler Siz Kazandiniz.. !" << endl;
} else{ // Degilse Gulsen'in yapay zekasi kazandi :)))
cout << "Kazanan : O\n! Gulsen'in Yapay Zekasi Kazandi . !" << endl;
}
bitirenvar = true; // BitirenVar metodunu aktiflestir.
}
bool bittimi(){//Bitti mi kontrolunu sağlıyor.
// Yatay Kontrol
for(int i = 1; i <= 7; i += 3){
if((bolge[i] == 'X' && bolge[i+1] == 'X' && bolge[i+2] == 'X') || (bolge[i] == 'O' && bolge[i+1] == 'O' && bolge[i+2] == 'O')) {
kimbitirdi(i+1);
return true; // Yatay olarak XXX ya da 000 yan yana geldiyse.
/*
1 2 3
4 5 6 Bu alanlarda 123 veya 456 veya 789 alanlarının yanyana X ya da 0 olmasını kontrol eden if döngüsü yukarıda yazılıdır.
7 8 9
*/
}
}
// Dikey Kontrol
for(int i = 1; i <= 9; i++){
if((bolge[i] == 'X' && bolge[i+3] == 'X' && bolge[i+6] == 'X') || (bolge[i] == 'O' && bolge[i+3] == 'O' && bolge[i+6] == 'O')){
kimbitirdi(i+3);
return true;
}/*
1 2 3
4 5 6 Bu alanlarda 147 veya 258 veya 369 alanlarının dikey olarak X ya da 0 olmasını kontrol eden if döngüsü yukarıda yazılıdır.
7 8 9
*/
}
// Çapraz Kontrol :
if((bolge[1] == 'X' && bolge[5] == 'X' && bolge[9] == 'X') || (bolge[1] == 'O' && bolge[5] == 'O' && bolge[9] == 'O')){
kimbitirdi(5);
return true;
}
if((bolge[3] == 'X' && bolge[5] == 'X' && bolge[7] == 'X') || (bolge[3] == 'O' && bolge[5] == 'O' && bolge[7] == 'O')){
kimbitirdi(5);
return true;
}
/*
1 2 3
4 5 6 Bu alanlarda 159 veya 357 alanlarının çapraz olarak X ya da 0 olmasını kontrol eden if döngüsü yukarıda yazılıdır.
7 8 9
*/
return false;
}
void zorluksor(){ // Kullanıcıya zorluk sorusu sormanın metotu.
cout << endl << "0 - Kolay \n1 - Orta \n2 - Zor" << endl << "Zorluk Seviyesini Seciniz :" ; // 0 ise kolay, 1 ise orta 2 ise zor.
char zorluksecimi = '3';
cin >> zorluksecimi;
switch(zorluksecimi){
case '0':
zorluk = 0;
break;
case '1':
zorluk = 1; // 1,2 veya 3 girmek zorundasın. Başka sayı ve rakamda Hatalı Giriş Uyarısı verir.
break;
case '2':
zorluk = 2;
break;
default:
cout << "Hatali Giris !" << endl; // Hatalı giriş uyarısı. Verilen kriterlere uymadığından dolayı hata verdiriyoruz. 1-2-3 değeri istiyoruz.
zorluksor();
break;
}
}
int main() {
int tur = 1;
srand(time(NULL)); // Oyuna başladığımız andan bitirdiğimiz süreye kadar zaman sayacımız var. Oyunu açar açmaz sayaç başlıyor.
cout << endl << "Yapay Zeka X-O-X Oyunu " << endl; // Oyun başladı. İlk iletimiz oyunun adı oluyor.
zorluksor();
// Oyun :
cout << endl << "Oyun Basladi Basarilar..!" << endl; // Oyun başladı mesajımız.
do{
zeminciz(); // 123 456 789 sayılarını ekrana yazdıran metot.
oyna(tur%2 != 0 ? 'X' : 'O');
tur++;
if(bittimi()){
break; // Oyn bitti mi ?
}else{};
}while(tur <= 9); // 9 tane hamle sayısını while döngüsü ile kontrol ediyor.
zeminciz();// 123 456 789 sayılarını ekrana yazdıran metot.
if(!bitirenvar) // Eğer BitirenVar Metodundan oyunBitti sonucu gelmediyse oyun berabere bitti.
cout << "Guzel oyundu\n! Berabere !\n"; // Oyunda yeterli hamle sayın kalmadıysa, Yani yenişemediysek Oyun Bitti Berabere uyarısı ver.
cout << "Oyun Bitti ! " ;
}


 
Anahtar Kelimeler: C++ ile XOX kodlama. C ile XOX Kodlama. C ile XOX oyunu. C XOX oyun kodları. C++ xox oyunu. C++ xox oyun kodları