Arkadaşlar, bir kitaptan ilerlerken Tic Tac Toe örneği vermişti, ben de birkaç konu geçince bakmadan sıfırdan kafadan bunu yazmaya çalıştım. Fakat oyun çalışmasına rağmen AI de bir sorun var. Örneğin Dikey satırlarda 3 adet taş olmasını engellerken, yatay ve çaprazda bu çalışmıyor. Nedenini bulan ve çözümünü anlatan olursa çok sevineceğim...
// Tic Tac Toe Oyunu #include <cstdlib> #include <iostream> #include <vector>
using namespace std;
// Fonksiyon Prototipleri void gostBaslangic(); char gostBoard(vector<char>& board); char insanTasi(char tas); char compTasi(char humanChoice); char checkKazanma(vector<char>& board); char computerOyna(vector<char> board); int soruSor(vector<char>& board); int yeneniBelirt(); bool isLegal(vector<char>& board, int choice);
// Degisken Deklerasyonu const char X = 'X'; const char O = 'O'; const char emp = ' '; const char tie = 'T'; const char noOne = 'N'; char macDurumu = noOne; char tasSecim; char human = emp; char comp = emp; char kazanan = emp; int secim; int yapilanSecim; int compSecim; bool playerTurn = false;
vector<char> tttBoard(9,emp); int main(int argc, char *argv[]) { gostBaslangic();
void gostBaslangic(){ cout << "Hahahaha!! Zavalli Insan !! Bu tehlikeli TicTacToe oyununa hosgeldin!\n" << "Umitlerini fazla tutma, cunku beni yenebilme gibi bir sans sana taninmayacak!\n" << "Sonsuz Makina vs. Insan gosterisine hosgeldin !!\n";
int yeneniBelirt(){ if(kazanan == human){ cout << "\n\nOlamaz !! Hile yaptigini biliyorum insan !!\nBen,Bilgisayar, Yemin ederim ki bir daha sana yenilmeyecegim !\n"; } if(kazanan == comp){ cout << "\n\nHahaha!! Insanlardan ustun oldugum bir kez daha kanitlandi !!"; } if(kazanan == tie){ cout << "\n\nHmph!! Sevin insan, çünkü yapabileceginin en iyisi buydu !!"; } }
char computerOyna(vector<char> board){ cout << "\nHmm... Ben su kareyi alacagim..";
for(int hareket = 0; hareket < board.size(); hareket++){ if(isLegal(board,hareket)){ board[hareket] = comp; checkKazanma(board); if( kazanan == comp ){ return hareket; } board[hareket] = emp; } } for(int hareket = 0; hareket < board.size(); hareket++){ if(isLegal(board,hareket)){ board[hareket] = human; checkKazanma(board); if( kazanan == human ){ return hareket; } else { board[hareket] = emp; } } } const int enIyiHareketler[9] = {4,0,2,6,8,1,3,5,7}; for(int i = 0; i < 9; i++){ int hareket = enIyiHareketler; if(isLegal(board,hareket)){ return enIyiHareketler; } } }
// Tic Tac Toe Oyunu
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
// Fonksiyon Prototipleri
void gostBaslangic();
char gostBoard(vector<char>& board);
char insanTasi(char tas);
char compTasi(char humanChoice);
char checkKazanma(vector<char>& board);
char computerOyna(vector<char> board);
int soruSor(vector<char>& board);
int yeneniBelirt();
bool isLegal(vector<char>& board, int choice);
// Degisken Deklerasyonu
const char X = 'X';
const char O = 'O';
const char emp = ' ';
const char tie = 'T';
const char noOne = 'N';
char macDurumu = noOne;
char tasSecim;
char human = emp;
char comp = emp;
char kazanan = emp;
int secim;
int yapilanSecim;
int compSecim;
bool playerTurn = false;
vector<char> tttBoard(9,emp);
int main(int argc, char *argv[])
{
gostBaslangic();
while(checkKazanma(tttBoard) == noOne){
if(playerTurn == true){
yapilanSecim = soruSor(tttBoard);
tttBoard[yapilanSecim] = human;
gostBoard(tttBoard);
playerTurn = false;
}
if(playerTurn == false){
compSecim = computerOyna(tttBoard);
tttBoard[compSecim] = comp;
gostBoard(tttBoard);
playerTurn = true;
}
}
yeneniBelirt();
system("PAUSE");
return EXIT_SUCCESS;
}
void gostBaslangic(){
cout << "Hahahaha!! Zavalli Insan !! Bu tehlikeli TicTacToe oyununa hosgeldin!\n"
<< "Umitlerini fazla tutma, cunku beni yenebilme gibi bir sans sana taninmayacak!\n"
<< "Sonsuz Makina vs. Insan gosterisine hosgeldin !!\n";
cout << "\n\t-------------\n"
<< "\t| 0 | 1 | 2 |\n"
<< "\t-------------\n"
<< "\t| 3 | 4 | 5 |\n"
<< "\t-------------\n"
<< "\t| 6 | 7 | 8 |\n"
<< "\t-------------\n";
cout << "\nIlk sen baslamak ister misin? <E-Evet,H-Hayir>\n" << "Secim: ";
cin >> tasSecim;
if(tasSecim == 'e'){
cout << "Iyi secim insan, buna ihtiyacin olacak!\n";
insanTasi(X);
compTasi(human);
playerTurn = true;
} else {
cout << "HAH! Alcakgonullulugun seni yenilgiye surukleyecek!\n";
insanTasi(O);
compTasi(human);
playerTurn = false;
}
}
char gostBoard(vector<char>& board){
cout << "\n|" << board[0] << "|" << board[1] << "|" << board[2] << "|\n"
<< "|" << board[3] << "|" << board[4] << "|" << board[5] << "|\n"
<< "|" << board[6] << "|" << board[7] << "|" << board[8] << "|\n";
}
char insanTasi(char tas){
if(tas == X){
human = X;
return human;
} else {
human = O;
return human;
}
}
char compTasi(char humanChoice){
if(humanChoice == X){
comp = O;
return comp;
} else {
comp = X;
return comp;
}
}
inline int soruSor(vector<char>& board){
cout << endl << endl << "Nereye oynayacaksin ?? <0-8>\n" << "Secim: ";
cin >> secim;
while(!isLegal(board,secim)){
cout << "\nSalak Insan !! O kare zaten dolu !! HAHAHA !!\n";
cout << "Nereye oynayacaksin ?? <0-8>\n" << "Secim: ";
cin >> secim;
}
cout << "Peki...\n";
return secim;
}
char checkKazanma(vector<char>& board){
const int kazananHamleler[8][3] ={
{0,1,2},
{3,4,5},
{6,7,8},
{0,3,6},
{1,4,7},
{2,5,8},
{0,4,8},
{2,4,6}
};
for(int rows = 0;rows<8;rows++){
if( (board[kazananHamleler[rows][0]]) != emp &&
(board[kazananHamleler[rows][0]]) == (board[kazananHamleler[rows][1]]) &&
(board[kazananHamleler[rows][1]]) == (board[kazananHamleler[rows][2]]) )
{
kazanan = board[kazananHamleler[rows][0]];
return kazanan;
}
}
if(count(board.begin(), board.end(), emp) == 0)
{
kazanan = tie;
return kazanan;
}
return noOne;
}
int yeneniBelirt(){
if(kazanan == human){
cout << "\n\nOlamaz !! Hile yaptigini biliyorum insan !!\nBen,Bilgisayar, Yemin ederim ki bir daha sana yenilmeyecegim !\n";
}
if(kazanan == comp){
cout << "\n\nHahaha!! Insanlardan ustun oldugum bir kez daha kanitlandi !!";
}
if(kazanan == tie){
cout << "\n\nHmph!! Sevin insan, çünkü yapabileceginin en iyisi buydu !!";
}
}
char computerOyna(vector<char> board){
cout << "\nHmm... Ben su kareyi alacagim..";
for(int hareket = 0; hareket < board.size(); hareket++){
if(isLegal(board,hareket)){
board[hareket] = comp;
checkKazanma(board);
if( kazanan == comp ){
return hareket;
}
board[hareket] = emp;
}
}
for(int hareket = 0; hareket < board.size(); hareket++){
if(isLegal(board,hareket)){
board[hareket] = human;
checkKazanma(board);
if( kazanan == human ){
return hareket;
} else {
board[hareket] = emp;
}
}
}
const int enIyiHareketler[9] = {4,0,2,6,8,1,3,5,7};
for(int i = 0; i < 9; i++){
int hareket = enIyiHareketler;
if(isLegal(board,hareket)){
return enIyiHareketler;
}
}
}
inline bool isLegal(vector<char>& board, int choice){
if(board[choice] == emp){
return true;
} else {
return false;
}
}
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.