Arama butonu
Bu konudaki kullanıcılar: 1 misafir
1
Cevap
772
Tıklama
0
Öne Çıkarma
Yardım Lütfen...
D
16 yıl (1698 mesaj)
Binbaşı
Konu Sahibi

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();

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 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.

Üye Ol Şimdi Değil



D
16 yıl (1698 mesaj)
Binbaşı
Konu Sahibi

Sorun çözülmüştür. Öğrenmek isteyen olursa diye yazıyorum. Su kodlarda ;

for(int hareket = 0; hareket < board.size(); hareket++){
if(isLegal(board,hareket)){
board[hareket] = comp;

if( checkKazanma(board) == comp ){
return hareket;
}
board[hareket] = emp;
}
}
for(int hareket = 0; hareket < board.size(); hareket++){
if(isLegal(board,hareket)){
board[hareket] = human;
if( checkKazanma(board) == human ){
return hareket;
} else {
board[hareket] = emp;
}
}
}

checkKazanma(board)
if( kazanan == human ){ Şeklindeki kodlar;

if( checkKazanma(board) == human ){ olarak değiştirilmiştir. Böylece sorun giderildi.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.