ожидаемый неопознанный идентификатор перед 'if'
#include <iostream>
using namespace std;
char board[3][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'}};
char turn='X';
int draw=0;
int row,column;
void display_board()
{
system("cls");
cout<<"\n\n TIC TAC TOE GAME:";
cout<<"\n\n PLAYER[1]==O\t\t\t PLAYER[2]==X";
cout<<"\t\t | | \n";
cout<<"\t\t | | \n";
cout<<"\t\t "<<board[0][0]<<" | "<<board[0][1]<<" | "<<board[0][2]<<" \n";
cout<<"\t\t | | \n";
cout<<"\t\t_____|_____|_____\n";
cout<<"\t\t | | \n";
cout<<"\t\t | | \n";
cout<<"\t\t "<<board[1][0]<<" | "<<board[1][1]<<" | "<<board[1][2]<<" \n";
cout<<"\t\t | | \n";
cout<<"\t\t_____|_____|_____\n";
cout<<"\t\t | | \n";
cout<<"\t\t | | \n";
cout<<"\t\t "<<board[2][0]<<" | "<<board[2][1]<<" | "<<board[2][2]<<" \n";
cout<<"\t\t | | \n";
cout<<"\t\t | | \n";
}
void player_turn()
{
int choice;
if(turn=='X')
{
cout<<"\n\t PLAYER[1]==O's turn";
}
if(turn=='O')
{
cout<<"\n\t PLAYER[2]==X's turn";
}
cin>>choice;
switch(choice)
{
case 1:row=0; column=0; break;
case 2:row=0; column=1; break;
case 3:row=0; column=2; break;
case 4:row=1; column=0; break;
case 5:row=1; column=1; break;
case 6:row=1; column=2; break;
case 7:row=2; column=0; break;
case 8:row=2; column=1; break;
case 9:row=2; column=2; break;
default:
cout<<"Invalid input";
break;
}
if(turn=='X' && board[row][column]!='X' && board[row][column]!='O')
{
board[row][column]=='X';
turn='O';
}
else if(turn=='O' && board[row][column]!='X' && board[row][column]!='O')
{
board[row][column]=='O';
turn='X';
}
else
{
cout<<"Box already filled!\nplease try again!!";
player_turn();
}
display_board();
}
int gameover()
{
for(int i=0;i<3;i++)
{
if(board[i][0]==board[i][1] && board[i][0]==board[i][2] || board[0][i]==board[1][i] && board[0][i]==board[2][i])
return 0;
else if(board[0][0]==board[1][1] && board[0][0]==board[2][2] || board[0][0]==board[1][1] && board[0][0]==board[2][2])
return 0;
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(board[i][j]!='X' && board[i][j]!='O')
return 1;
}
}
draw=1;
return 0;
}
int main()
{
system("cls");
while(gameover())
{
display_board();
player_turn();
gameover();
}
return 0;
}
if(turn=='X' && draw=0)
{
cout<<"PLAYER[2] WINS!!!";
}
else if(turn=='O' && draw==0)
{
cout<<"PLAYER[1] WINS!!!";
}
else
{
cout<<"GAMEDRAW!!!";
}
@nilesh, 👍-2
Обсуждение1 ответ
Этот фрагмент находится вне функции:
if(turn=='X' && draw=0)
{
cout<<"PLAYER[2] WINS!!!";
}
else if(turn=='O' && draw==0)
{
cout<<"PLAYER[1] WINS!!!";
}
else
{
cout<<"GAMEDRAW!!!";
}
Другие замечания:
Вместо нескольких операторов
return
лучше создать локальную переменную, установить ее и вернуть ее в конце. Поэтому используйте только один операторreturn
для каждой функции (которая имеет возвращаемое значение).Как упоминает Крисл: у Arduino нет cin или cout. Используйте для этого класс Serial.
Вы можете заменить следующий код:
Переключатель
switch(choice)
{
case 1:row=0; column=0; break;
case 2:row=0; column=1; break;
case 3:row=0; column=2; break;
case 4:row=1; column=0; break;
case 5:row=1; column=1; break;
case 6:row=1; column=2; break;
case 7:row=2; column=0; break;
case 8:row=2; column=1; break;
case 9:row=2; column=2; break;
от
row = (int) ((choice - 1) / 3);
column = (choice - 1) % 3;
Используйте перечисление в качестве возвращаемого типа для функции
gameover()
Например, EGameState { Running, PlayerOneWon, PlayerTwoWon, Draw};Это также удаляет глобальную переменную
draw
.Вы вызываете функцию
gamover
дважды, один раз в цикле while, не проверяя результат.Не используйте char для переменной
turn
, используйте только номер игрока, логическое значение (XPlayerHasTurn) или перечисление.
Для человека, отрицающего мой ответ, почему?, @Michel Keijzers
1. это не Arduino 2. это просто опечатка. Я думаю, что мы должны применить здесь, на Arduino SE, это «правило» StackOverflow https://meta.stackoverflow.com/questions/252256/behavior-on-questions-caused-by-typographical-errors, @Juraj
Полностью согласен с 1, но я не вижу, что является опечаткой в этой задаче (если вы не имеете в виду, что это может быть неправильно скопировано/вставлено). Однако его можно легко преобразовать в Arduino (заменив cin/cout вызовами класса Serial)., @Michel Keijzers
по аналогии, в Movies SE вопросы идентификации фильма не по теме. потому что это было бесконечное количество тривиальных вопросов, @Juraj
Итак, только замечание о cin/cout для класса Serial относится к Arduino (но на самом деле это не был сам вопрос). В следующий раз я просто сделаю замечание и проголосую за закрытие., @Michel Keijzers
согласно моему комментарию выше, зачем вам прикладывать какие-либо усилия к «вопросу», в котором ОП был чрезвычайно ленив к а) казалось бы, случайно выбранному Arduino SE, когда код не предназначен для Arduino, слишком ленив, чтобы на самом деле объяснить эту проблему, слишком ленив даже попытаться найти опечатку, слишком ленивы для форматирования кода и, вероятно, слишком ленивы, чтобы принять ваш ответ +1 за ваш ответ (хороший ответ) +2 для @juraj за попытку сохранить сайт в чистоте. -10 (если бы я мог) к ОП., @GMc
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- Как работать с аналоговыми контактами в цикле?
- Какие есть другие IDE для Arduino?
- Как использовать переменные и функции в нескольких файлах .ino
- Разница между void setup() и void setup(void)
- Будет ли .ino-скетч ардуино компилироваться непосредственно на GCC-AVR?
В какой строке вы получили ошибку?, @Michel Keijzers
Это не код Arduino, а код C++ для ПК. Для Arduinos нет ни cin, ни cout., @chrisl
if
после основной функции не находится в функции, @JurajЭто вообще вопрос? Или это просто сообщение с каким-то случайным кодом в игре «угадай, где ошибка»? Почему люди даже прилагают какие-либо усилия, чтобы ответить, когда ОП даже не удосужился приложить какие-либо усилия к ошибочному «вопросу»?, @GMc