Мой код работает, но он ничего не печатает на доске. Я почти уверен, что сделал пару вещей неправильно, и если бы кто-то мог указать мне правильное направление, это было бы здорово .. Спасибо за любую помощь!
#include<iostream>
#include<iomanip>
using namespace std;
void drawBoard(char board[][3]);
char checkWinner3by3(char board[][3]);
.
//
// DO NOT MODIFY THE MAIN FUNCTION
//
int main()
{
// This array of chars represents the game board, and it holds the content
// of each space. By default all spaces are set to a blank space.
char board[3][3] = {{' ',' ',' '},{' ',' ',' '},{' ',' ',' '}};
// The current player. Because X plays first, initialize to X
char player = 'X';
// The winner. either 'X', 'O', or 't' if it's a tie.
// Or a blank space if the game has not finished.
char winner = ' ';
// These variables will hold the number of the row and column selected
// by the players.
int row;
int column;
// boolean variables used to verify if the move is valid.
bool is_move;
bool is_row;
bool is_column;
cout<<"************ TIC TAC TOE ************\n";
// The game loops again and again until the game is over
while(winner == ' ')
{
//set the boolean variables back to false for a new turn.
is_move = false;
is_row = false;
is_column = false;
//draw the board.
drawBoard(board);
// If the game is not yet over show who`s the next player to move
cout << "Player ";
if(player == 'X')
{
cout << 1;
}
else
{
cout << 2;
}
cout << "'s turn:" << endl;
// Loop until the player selects a valid space for their move
is_move = false;
while(!is_move)
{
// Loop until the player selects a valid row
// Assume the user inputs a valid integer
is_row = false;
while(!is_row)
{
cout << "Row: ";
cin >> row;
if(row == 1 || row == 2 || row == 3)
{
is_row = true;
}
else
{
cout << endl << "Invalid row!" << endl;
}
} // end of input row loop
// Loop until the player selects a valid column
// Assume the user inputs a valid integer
is_column = false;
while(!is_column)
{
cout << "Column: ";
cin >> column;
if(column == 1 || column == 2 || column == 3)
{
is_column = true;
}
else
{
cout << endl << "Invalid column!" << endl;
}
} // end of input column loop
// If the space is empty, mark the chosen space and swich players
if(board[row-1][column-1] == ' ')
{
// Mark the space and end the player's turn
board[row-1][column-1] = player;
is_move = true;
// Switch to the other player
if(player == 'X')
{
player = 'O';
}
else
{
player = 'X';
}
} // end of marking space and changing players
// If the space is occupied
else
{
cout<<"The selected space is occupied!" << endl;
cout << "Select a different space:" << endl << endl;
drawBoard(board);
}
} // end of player's move loop
cout << endl; // for nice output formatting
//check if the player won.
winner = checkWinner3by3(board);
//If there's a winner
if(winner == 'X' || winner == 'O')
{
drawBoard(board);
//Display congratulations message
cout<<"Congratulations! Player ";
if(winner == 'X')
{
cout << 1;
}
else
{
cout << 2;
}
cout<<" is the winner!"<<endl;
}
else if(winner == 'T')
{
drawBoard(board);
//Display a message if it`s tie
cout << "It's a tie!" << endl;
}
} // End of player's turn loop
system("pause");
return 0;
}//
// Prints the game board
// We know the board is 3 by 3 so we don't need to have the number of rows as
// a parameter.
//
// WRITE THIS FUNCTION
//
void drawBoard(char board[][3])
{
char print[][3] = {{' ',' ',' '},
{' ',' ',' '},
{' ',' ',' '}};
cout << " 1 2 3" << endl;
cout << " +---+---+---+" << endl;
cout << " 1" << " | " << print[0][0] << " | " << print[0][1] << " | " << print[0][2] << " | " << endl;
cout << " +---+---+---+" << endl;
cout << " 2" << " | " << print[1][0] << " | " << print[1][1] << " | " << print[1][2] << " | " << endl;
cout << " +---+---+---+" << endl;
cout << " 3" << " | " << print[2][0] << " | " << print[2][1] << " | " << print[2][2] << " | " << endl;
cout << " +---+---+---+" << endl;
}
//
// Checks the whole board if there is a winner.
// We know the board is 3 by 3 so we don't need to have the number of rows as
// a parameter.
//
// WRITE THIS FUNCTION
//
char checkWinner3by3(char board[][3])
{for(i=0; i<3; i++) /* check rows */
{
if(board[i][0]==board[i][1] && board[i][0]==board[i][2])
{
return board[i][0];
}
}
for(i=0; i<3; i++) /* check columns */
{
if(board[0][i]==board[1][i] && board[0][i]==board[2][i])
{
return board[0][i];
}
}
/* test diagonals */
if(board[0][0]==board[1][1] && board[1][1]==board[2][2])
{
return board[0][0];
}
if(board[0][2]==board[1][1] && board[1][1]==board[2][0])
{
return board[0][2];
}
return ' ';
}
Drawboard
не использует его board
аргумент.
for(i=0; i<3; i++) /* check rows */
{
if(board[i][0]==board[i][1] && board[i][0]==board[i][2])
{
return board[i][0];
}
}
Вы получите ошибку здесь. Если это домашнее задание, постарайтесь выяснить, в чем именно заключается ошибка.
Кроме того, я не вижу ничего в функции рисования досок, которая фактически позволяла бы ей использовать ваш массив досок.
Это две самые большие проблемы, которые я вижу. Удачи в назначении.
// If the space is occupied
else
{
cout<<"The selected space is occupied!" << endl;
cout << "Select a different space:" << endl << endl;
drawBoard(board);
}
Эта часть также проблема. основываясь на твоей петле, он будет работать вечно.
Вам нужно завершить цикл while (! Is_move), чтобы получить новый ввод для хода игрока, если выбранное место занято.