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; } } }