@radesd

Крестики-нолики.Проблемы с ходом Х?

Есть работающий код только у меня возникла проблема с тем что ход нолика работает как надо,а ход Х вообще не появляеться спустя один ход.Как это исправить?

#include <iostream>
using namespace std;
#include <ctime>
int main() {
  srand(time(NULL));
  int a,b;
  string pole[3][3] = {{"_", "_", "_"}, {"_", "_", "_"}, {"_", "_", "_"}};
  string us;

  cout<<"   A B C"<<endl;
  for(int i=0;i<3;i++){
    cout<<i+1<<"  ";
    for(int r=0;r<3;r++){
      cout<<pole[i][r]<<" ";
    }
      cout<<endl;
  }
    while(true){
  while(true){
    cout << "Ход(X) -> ";
    cin >> us;
    cout<<endl;
    if (us == "A1") {
      if (pole[0][0] == "_") {
        pole[0][0] = "X";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "B1") {
      if (pole[0][1] == "_") {
        pole[0][1] = "X";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "C1") {
      if (pole[0][2] == "_") {
        pole[0][2] = "X";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
  else if (us == "A2") {
      if (pole[1][0] == "_") {
        pole[1][0] = "X";
      }
    else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "B2") {
      if (pole[1][1] == "_") {
        pole[1][1] = "X";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "C2") {
      if (pole[1][2] == "_") {
        pole[1][2] = "X";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "C3") {
      if (pole[2][2] == "_") {
        pole[2][2] = "X";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
      
  else if (us == "B3") {
      if (pole[2][1] == "_") {
        pole[2][1] = "X";
      }
    else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "A3") {
      if (pole[2][0] == "_") {
        pole[2][0] = "X";
      }
      else{
        cout<<"Занято"<<endl;
        continue;
      }
      }
  while(true){
    cout << "Ход(0) -> ";
    cin >> us;
    cout<<endl;
    if (us == "A1") {
      if (pole[0][0] == "_") {
        pole[0][0] = "0";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "B1") {
      if (pole[0][1] == "_") {
        pole[0][1] = "0";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "C1") {
      if (pole[0][2] == "_") {
        pole[0][2] = "0";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
  else if (us == "A2") {
      if (pole[1][0] == "_") {
        pole[1][0] = "0";
      }
    else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "B2") {
      if (pole[1][1] == "_") {
        pole[1][1] = "0";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "C2") {
      if (pole[1][2] == "_") {
        pole[1][2] = "0";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "C3") {
      if (pole[2][2] == "_") {
        pole[2][2] = "0";
      }
      else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
      
  else if (us == "B3") {
      if (pole[2][1] == "_") {
        pole[2][1] = "0";
      }
    else{
        cout<<"Занято"<<endl;
        continue;;
      }
    }
    else if (us == "A3") {
      if (pole[2][0] == "_") {
        pole[2][0] = "0";
      }
      else{
        cout<<"Занято"<<endl;
        continue;
      }
      }
    cout<<"  A B C"<<endl;
  for(int i=0;i<3;i++){
    cout<<i+1<<" ";
    for(int r=0;r<3;r++){
      cout<<pole[i][r]<<" ";
    }
      cout<<endl;
  }
  if ((pole[0][1]=="X" && pole[1][1]=="X" && pole[2][1]=="X")||(pole[0][0]=="X" && pole[1][0]=="X" && pole[2][0]=="X") || (pole[0][2]=="X" && pole[1][2]=="X" && pole[2][2]=="X")||(pole[0][0]=="X" && pole[0][1]=="X" && pole[0][2]=="X")||(pole[1][0]=="X" && pole[1][1]=="X" && pole[1][2]=="X")||(pole[2][0]=="X" && pole[2][1]=="X" && pole[2][2]=="X")||(pole[0][0]=="X" && pole[1][1]=="X" && pole[2][2]=="X")||(pole[0][2]=="X" && pole[1][1]=="X" && pole[2][0]=="X")){
    cout<<"Победа"<<endl;
    break;
    }
else if ((pole[0][1]=="0" && pole[1][1]=="0" && pole[2][1]=="0")||(pole[0][0]=="0" && pole[1][0]=="0" && pole[2][0]=="0") || (pole[0][2]=="0" && pole[1][2]=="0" && pole[2][2]=="0")||(pole[0][0]=="0" && pole[0][1]=="0" && pole[0][2]=="0")||(pole[1][0]=="0" && pole[1][1]=="0" && pole[1][2]=="0")||(pole[2][0]=="0" && pole[2][1]=="0" && pole[2][2]=="0")||(pole[0][0]=="0" && pole[1][1]=="0" && pole[2][2]=="0")||(pole[0][2]=="0" && pole[1][1]=="0" && pole[2][0]=="0")){
    cout<<"Проигрыш"<<endl;
    break;
    }
}
}
  }
}
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 3
mayton2019
@mayton2019
Bigdata Engineer
Нет-нет дружище этот код надо выбросить. Переписывать или улучшать его нет смысла. Он плох. У тебя есть координатная сетка. Но ты почему-то не пользуешся этим а вычисляешь какие-то частные случаи.

Вообще в изучении программирования - копирование чужого кода - это не плохо. Это вполне себе метод. Только скопировать нужно разобравшись как новый код работает. И сравнить его со своим решением. Я тоже так делал когда изучал бейсик для БД1001 или для Sinclair. Я просто копировал всякие текстовые игры-квесты и потом изменял и улучшал их.

Найди любые крестики-нолики на С++. И в качестве критерия - код должен быть хотя-бы короче чем твой.
Ответ написан
Комментировать
GavriKos
@GavriKos
Самое время изучить отладку, брейкпоинты и вот это все.
Ответ написан
Комментировать
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
У вас там бесконечный цикл, который читает ход Х. Без единого break внутри - поэтому нет даже теоретической возможности, что вы из него выйдите.

Упростите код: эти 9 if else условий заменяются на такой код:
if (us.length() != 2) {
  cout << "?????" << endl;
  continue;
}
int row = us[0]-'A';
int col = us[1]-'0';
if (row < 0 || row > 2 || col < 0 || col > 2) {
  cout << "????" << endl;
  continue;
}
if (pole[row][col] != '_') {
  cout  << "занято" << endl;
  continue;
}
pole[row][col] = 'X';
break;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы