Şimdi Ara

Yardım Lütfen...

Bu Konudaki Kullanıcılar:
2 Misafir - 2 Masaüstü
5 sn
2
Cevap
0
Favori
661
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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;
    }
    }







  • 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.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.