C++ ile Üç Taş (Tic-Tac-Toe) Oyunu
İnternet üzerinde çeşitli dillerle yazılmış birçok üç taş (tic tac toe) oyunu kodu var. Ben de C++ ile bir şeyler karaladım. Aslında diğer kodlara göre biraz daha karışık ve uzun gelebilir ama burada amacım “en iyisini” yazmaktan ziyade antrenman yapmak. Kodu, Windows üzerinde denedim.
/// Batuhan Bayrakçı
/// 3 Taş Oyunu - Tic Tac Toe ///
#include <iostream>
#include <stdio.h>
using namespace std;
// GLOBALLER
int sayac=0;
char dizi[]={'1','2','3','4','5','6','7','8','9'};
bool kazanan=false;
// bölmeleri (sayıları) ekrana yazdıran fonksiyon:
void goster(char dizi_parametre[])
{
for (int i=0;i<9;i++)
{
if (i%3==0)
{
cout<<endl;
cout<<endl;
}
cout<<ends<<ends<<ends<<dizi_parametre[i]<<ends<<ends<<ends<<"|"<<ends;
}
}
// tüm bölmelerin dolup dolmadığını ve beraberliğin varlığını kontrol eden fonksiyon. 'sayac' değişkeniyle ile kontrol edilir.
bool beraberlik_mi(int s)
{
if (s==9){
cout<<"\n\nBeraberlik"<<endl;
return true;
}
return false;
}
// kazananın varlığını kontrol eden fonksiyon
bool kontrol(char k_dizi[])
{
/// X'in durumları:
if (
(k_dizi[0]=='X' && k_dizi[1]=='X' && k_dizi[2]=='X') ||
(k_dizi[0]=='X' && k_dizi[3]=='X' && k_dizi[6]=='X') ||
(k_dizi[3]=='X' && k_dizi[4]=='X' && k_dizi[5]=='X') ||
(k_dizi[1]=='X' && k_dizi[4]=='X' && k_dizi[7]=='X') ||
(k_dizi[8]=='X' && k_dizi[7]=='X' && k_dizi[6]=='X') ||
(k_dizi[8]=='X' && k_dizi[5]=='X' && k_dizi[2]=='X') ||
(k_dizi[0]=='X' && k_dizi[4]=='X' && k_dizi[8]=='X') ||
(k_dizi[2]=='X' && k_dizi[4]=='X' && k_dizi[6]=='X')
) return true;
/// O'nun durumları:
else if (
(k_dizi[0]=='O' && k_dizi[1]=='O' && k_dizi[2]=='O') ||
(k_dizi[0]=='O' && k_dizi[3]=='O' && k_dizi[6]=='O') ||
(k_dizi[3]=='O' && k_dizi[4]=='O' && k_dizi[5]=='O') ||
(k_dizi[1]=='O' && k_dizi[4]=='O' && k_dizi[7]=='O') ||
(k_dizi[8]=='O' && k_dizi[7]=='O' && k_dizi[6]=='O') ||
(k_dizi[8]=='O' && k_dizi[5]=='O' && k_dizi[2]=='O') ||
(k_dizi[0]=='O' && k_dizi[4]=='O' && k_dizi[8]=='O') ||
(k_dizi[2]=='O' && k_dizi[4]=='O' && k_dizi[6]=='O')
) return true;
else return false; // kazanan yok ise 'false' döndür...
}
void oyun_sifirla(){
sayac = 0;
kazanan = false;
char i;
int j;
for(i='1',j=0; i<='9', j<9; i++, j++) {
dizi[j] = i;
}
}
// ana fonksiyon
int main()
{
int b_sayi, i_sayi;
do // ana döngü...
{
goster(dizi);
while (!kazanan) // kazanan yoksa oyuna devam...
{
while (true)
{
cout<<endl<<"\n\nSira BIRINCI (X) oyuncuda:"<<ends;
cin>>b_sayi; // birinci oyuncudan sayiyi al
if (dizi[b_sayi-1]=='X' or dizi[b_sayi-1]=='O' or b_sayi>9 or b_sayi<1)
// oynanan hamleyi kontrol et
{
cout<<"\nOynandi veya gecersiz hamle. Baska bir sayi deneyin\n";
continue;
}
dizi[b_sayi-1]='X';
sayac++; // her hamlede sayacı artır. Ta ki 9 olana kadar...
goster(dizi);
if (kontrol(dizi)) // her hamleden sonra kazanan var mı diye kontrol et
{
cout<<"\n\nBirinci oyuncu (X) kazandi\n";
kazanan=true;
}
break;
}
/// Oyuncular arası geçişte bazı kontroller yapmaya başla...
if (beraberlik_mi(sayac))
break;
if (kazanan) break ;
/// Oyuncular arası geçişte bazı kontroller yapıldı.
while (true) // ikinci oyuncu oyna... Birinci oyuncuyla aynı durumlar ikinci oyuncu için de geçerli
{
cout<<endl<<"\n\nSira IKINCI (O) oyuncuda:"<<ends;
cin>>i_sayi;
if (dizi[i_sayi-1]=='X' or dizi[i_sayi-1]=='O' or i_sayi>9 or i_sayi<1)
{
cout<<endl<<"\nOynandi veya gecersiz hamle. Baska bir sayi deneyin\n";
continue;
}
dizi[i_sayi-1]='O';
sayac++;
goster(dizi);
if (kontrol(dizi)) // bool kontrol
{
cout<<"\n\nIkinci oyuncu (O) kazandi\n";
kazanan=true;
}
break;
}
if (beraberlik_mi(sayac))
break;
if (kazanan) break;
}
oyun_sifirla();
cout<<"\nOyun Tekrar Basliyor..."<<"\n__________________________________________";
cout<<endl<<endl<<endl;
continue;
} while(true);
return 0;
}
İyi Çalışmalar…

Hele bir visual’a geçelim bunun bilgisayara karşı olanını da yaparız
…
inşallah
C++ ta yazmissiniz ama C++`in hic bir aracini kullanmamissiniz. Prosedurel bir program olmus C tadinda. Ama guzel tebrikler.
Evet öyle oldu. Maksat biraz antrenman zaten…
Teşekkürler…
devc++ da çalışmıyormu oyun
Şu an Dev c++ de denedim. Herhangi bir sorun görünmüyor.
Oyun şekilli oynanabilirmi bide programa sayi yerine harf girince sonsuz döngü oluyor nasıl düzeltilebilir.
Programda hata denetimi çok gelişmiş değil. Kodlarla oynama yapılarak harf girdiğinde programın çalışmasına devam ettirilebilir. Grafik arayüzü yapılabilir tabi. Bunu ben c++’ta antrenman olsun diye yazmıştım. Kısmet olursa C#’ta grafik arayüzlü bir tane yazmak isterim…
güzel bi program olmuş elinize sağlık kusura bakmayın çok soru soruyorm ama buna grafikde ekleyebilirmsnz.Bide rica etsem size ulaşmam için bir adres verseniz bilgisayar prgrmclkda okyrm size bikaç sorum daha olacaktıda.
[...] önce C++ ile basit bir tic tac toe (üç taş) oyunu yazmıştım. Bir süredir Java ile ilgileniyorum. Java’da da Swing ile dirsek teması [...]
arkadaşlar merhba anladıgım kadarıyla programlamayla aranız baya iyi
hacettepe üniversitesi elektrik-elektornik mühendisliğinde okuyorum “C” dersi alıyoruz bizde ama programlamayla aramın çok da iyi olduğu söylenemez :/ bilgisayara karşı tic tac toe konulu bi proje ödevim var ;bana yardımcı olabilme şansınız var mı acaba ?
biraz eski bi konu ama ilgisini ceken arkadaslar olabilir
eger bilgisayara karsi oynatmak icin yapiyorsaniz yapmaniz gereken 1-9 arasi random yasi uretmeniz
i_sayi= rand()%9; ben yaptim su an oynuyorum sahurdan sonra iyi sardi
biraz daha ugrasip bilgisayarin mantikli davranmasini saglayabilirsiniz ama surekli mantikli davranirsa ya yener ya berabere biter onuda random yapmalisiniz, onun icinde bool anahtar kullanin bunun (true-false)yaninda
dev c++ da hata veriyo yani dev c++ da calısmıyo emeğine sağlık
DEV C++’da denemiştim bu kodu, çalışmıştı. Eksik kopyalamış olabilirsiniz…
x için rakam girdiğimde kabul ediyor ama ikinci rakamı giremiyorum? bi daha başa dönüyor
Düzeltme yaptım. Linux’da test ettim. Windows’da problem var mı bilmiyorum şu an. Teşekkürler…
merhaba batuhan kardeş acaba c++ da brickbreaker oyunu bulabileceğimiz veya bildiğin birşey var mı?
şimdi den teşekkür ederim.
O tarz oyunlar genelde OpenGL, DirectX gibi grafik kütüphaneleri kullanılarak yapıldıkları için biraz daha karmaşık koda ve yapıya sahip oluyorlar. Python’da pygame üzerinde gerçekleştirilmiş o tarz oyunları araştırırsanız daha kolay çalışmalar bulabilirsiniz.
Çok güzel ve kullanışlı olmuş. Güzel mantık kurulmuş. Teşekkürler.