2016-10-18 2 views
0

Я не могу понять, чего он хочет от меня в конце. Этот Tic-tac-toe убивает меня. Ошибка в последних 4 «}» в соответствии с кодовыми блоками:Tic-tac-toe prog

// Author: Aaron Yi 
// Date:  17 October 2016 
// Contact: [email protected] /347-570-5723 
// MAC 125-3005/Lab 03 
# 
include <iostream> 
using namespace std; 
int main() { 
    int Option; 
    char s1('1'); 
    char s2('2'); 
    char s3('3'); 
    char s4('4'); 
    char s5('5'); 
    char s6('6'); 
    char s7('7'); 
    char s8('8'); 
    char s9('9'); 

    int PlayerTurn(1); 
    bool GameOverDecider(true); 

    cout << "\tActivating T^3" << endl; 
    cout << endl << endl; 
    cout << "\t(1)Begin!" << endl; 
    cout << "\t(2)Quit" << endl; 
    cout << endl; 
    cout << "Choose 1 or 2:"; 
    cin >> Option; 

    if (Option == 1) { 
     do { 
      int PlayerTurn(1); 
      bool GameOverDecider(true); 
      cout << "  " << s1 << " | " << s2 << " | " << s3 << endl; 
      cout << "  -----+-----+-----" << endl; 
      cout << "  " << s4 << " | " << s5 << " | " << s6 << endl; 
      cout << "  -----+-----+-----" << endl; 
      cout << "  " << s7 << " | " << s8 << " | " << s9 << endl; 
      cout << "  -----+-----+-----" << endl; 
      char PlayerMarker; 
      if (PlayerTurn = 1) { 
       PlayerMarker = 'X'; 
      } else { 
       PlayerMarker = 'O'; 
      } 
      bool ValidTurn; 
      do { 
       char CurrentMove; 
       cout << "Player" << PlayerTurn << "'s turn, set move on what square: " << endl; 
       cin >> CurrentMove; 
       ValidTurn = true; 

       if (CurrentMove == '1' && s1 == '1') { 
        s1 = PlayerMarker; 
       } else if (CurrentMove == '2' && s1 == '2') { 
        s2 = PlayerMarker; 
       } else if (CurrentMove == '3' && s1 == '3') { 
        s3 = PlayerMarker; 
       } else if (CurrentMove == '4' && s1 == '4') { 
        s4 = PlayerMarker; 
       } else if (CurrentMove == '5' && s1 == '5') { 
        s5 = PlayerMarker; 
       } else if (CurrentMove == '6' && s1 == '6') { 
        s6 = PlayerMarker; 
       } else if (CurrentMove == '7' && s1 == '7') { 
        s7 = PlayerMarker; 
       } else if (CurrentMove == '8' && s1 == '8') { 
        s8 = PlayerMarker; 
       } else if (CurrentMove == '9' && s1 == '9') { 
        s9 = PlayerMarker; 
       } else { 
        cout << "Invalid Move, make another one:" << endl; 
        ValidTurn = false; 
       } 
      } while (!ValidTurn); 

      GameOverDecider = false; 
      bool WinGame = true; 
      if (s1 != '1') { 
       if (s2 == s1 && s3 == s1) { 
        GameOverDecider = true; 
       } 
       if (s4 == s1 && s7 == s1) { 
        GameOverDecider = true; 
       } 
      } 
      if (s1 != '9') { 
       if (s3 == s9 && s6 == s9) { 
        GameOverDecider = true; 
       } 
       if (s7 == s9 && s8 == s9) { 
        GameOverDecider = true; 
       } 
      } 
      if (s1 != '5') { 
       if (s1 == s5 && s9 == s5) { 
        GameOverDecider = true; 
       } 
       if (s2 == s5 && s8 == s5) { 
        GameOverDecider = true; 
       } 
       if (s4 == s5 && s6 == s5) { 
        GameOverDecider = true; 
       } 
       if (s3 == s5 && s7 == s5) { 
        GameOverDecider = true; 
       } 
      } 
      if (s1 != '1' && 
       s2 != '2' && 
       s3 != '3' && 
       s4 != '4' && 
       s5 != '5' && 
       s6 != '6' && 
       s7 != '7' && 
       s8 != '8' && 
       s9 != '9' && 
       !GameOverDecider) { 
       GameOverDecider = true; 
       WinGame = false; 
       if (GameOverDecider) { 
        if (WinGame) 

         { 
          cout << "Player " << PlayerTurn << " totally wins!" << endl; 
         } 
        cout << "  " << s1 << " | " << s2 << " | " << s3 << endl; 
        cout << "  -----+-----+-----" << endl; 
        cout << "  " << s4 << " | " << s5 << " | " << s6 << endl; 
        cout << "  -----+-----+-----" << endl; 
        cout << "  " << s7 << " | " << s8 << " | " << s9 << endl; 
        cout << "  -----+-----+-----" << endl; 
        cout << "\tGame Over!" << endl; 
        cout << "\tAgain?(Y/N)?: "; 

        char PlayAgain; 
        cin >> PlayAgain; 
        if (PlayAgain = 'y') { 
         GameOverDecider = false; 
         s1 = '1'; 
         s2 = '2'; 
         s3 = '3'; 
         s4 = '4'; 
         s5 = '5'; 
         s6 = '6'; 
         s7 = '7'; 
         s8 = '8'; 
         s9 = '9'; 
        } 

        PlayerTurn = 1; 
       } else { 
        if (PlayerTurn == 1) { 
         PlayerTurn = 2; 
        } else { 
         PlayerTurn = 1; 
        } 
       } 
      } 
      while (!GameOverDecider) { 
       if (Option == 2) { 
        cout << "Ok....." << endl; 
       } 
       return (0); 
      } 
     } 
    } 
} 

ошибка возникает сразу после «возвращения (0);}» линия, и я не знаю, что еще делать.

+0

При размещении вопроса о ошибках сборки, пожалуйста, укажите полный вывод ошибки в полном объеме, неотредактированный, с любыми возможными информационными примечаниями и * в виде текста *. Пожалуйста, отредактируйте свой вопрос и скопируйте вставьте результат сборки в свой вопрос. –

+0

О, и вы действительно не должны использовать круглые скобки для инициализации переменных, как вы. С этим стилем вы, вероятно, ударите [самый неприятный синтаксический разбор] (https://en.wikipedia.org/wiki/Most_vexing_parse) до начала. Вместо этого, например, 'char s1 = '1';' –

+0

Добро пожаловать в переполнение стека! См. [Ask] и [mcve]. – Mat

ответ

1

Ваше пока условие:

while (!GameOverDecider) { 
    if (Option == 2) { 
     cout << "Ok....." << endl; 
    } 
    return (0); 
    } 

это один находится внутри do и сразу же завершается он не может получить время, и, следовательно, ошибка. Уменьшите одну фигурную скобку между четырьмя скобками, представленными ниже, и добавьте 1 скобу перед этим.

+0

@JoachimPileborg Есть 2 дела, и один из них присутствует внутри другого. У 'do', внутри которого есть значение while (! ValidTurn);' и для этого внешнего do, нет, этот 'while (! GameOverDecider)' находится внутри, который делает и должен быть снаружи. –

0

На линии после

if (Option == 1) { 

у вас есть do {. Но в конце этого блока нет while или until. Похоже, что это должно быть

do { 
    ... 
} while (!GameOverDecider); 

И тогда код внутри этого ошибочного while петли не должны быть в стороне его, она должна быть на том же уровне, что и первый if.