Я новичок в c ++, и моим первым заданием было сделать игру реверси, но у меня возникли проблемы, когда дело доходит до ввода игроков в функцию playGame. Поэтому, когда я cin x и y, это изменит значение массива доски [x] [y] с пустого или » на ‘B’. Я также не знаю, как отнести массив к функции. Извините, если эти вопросы глупы для некоторых, но простите меня, я учусь здесь. Спасибо
#include <iostream>
#include <string>
using namespace std;
void displayTop();
void displayAlpha();
void displayNum();
int displayMenu();
void displayBoard();
char displayHelp();
void playGame();
int num = 8;
char board [8][8] = {
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ','W','B',' ',' ',' ',
' ',' ',' ','B','W',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
};
int main() {
int choice = displayMenu();
switch (choice) {
case 1:
displayBoard();
break;
case 2:
displayHelp();
break;
default:
cout << "Please enter a valid choice." << endl;
break;
}
playGame();
}
void displayBoard(){displayTop();
for (int row = 0; row < 8; row++){
displayNum();
cout << " |";
for (int column = 0; column < 8; column++){
cout << board[row][column] << " |";
}
cout << endl;
displayTop();
}
displayAlpha();
}
void displayTop(){
cout << " ";
for (int i = 0; i < 8; i++){
cout << "+----";
}
cout << endl;
}
void displayAlpha(){
cout << " ";
for( char i = 'a'; i <= 'h'; i++ ) {
cout << " " << i ;
}
}
void displayNum(){
if (num > 0) {
cout << num;
num = num - 1;
}
}
int displayMenu(){
int answer = 0;
cout << "Othello\n\n"<< "1.New Game\n2.Help\n3.Quit\nYour Choice: ";
cin >> answer;
system("clear");
return answer;
}
char displayHelp(){
char answer = ' ';
cout << "How to play Othello\n\nThe object of the game is to have the majority of your colour discs on the board at the end of the game.\n\nInput the cell where you want to place your disc in the form of (a-z 1-8) without the bracket and includng the space.\n\nThe one with the most discs wins!!!!\n\nSo, are you ready to play? (y or n)\n\nYour Choice: ";
cin >> answer;
if (answer == 'y')
displayBoard();
return answer;
}
void playGame(){
int plW = 2;
int plB = 2;
int x = 0;
int y = 0;
char player = 'B';
for(;;){
cout << "\n\nScore: W = " << plW << " B = " << plB;
cout << "\nPlayer: " << player;
cout << "\nPlease make your move : ";
cin >> x >> y;
cout << endl;
if (x < 9 && y < 9) {
board[x-1][y-1] = player;
displayBoard();
} else {
cout << "Invalid Input";
}
if (player == 'B') {
plB++;
player = 'W';
} else {
plW++;
player = 'B';
}
}
}
Чтобы сохранить ввод от cin и удерживать его на игровой доске, вам нужна функция playGame (), чтобы иметь ссылку на игровую доску. Вы можете объявить массив игровых досок перед main, чтобы сделать его глобальным по объему, что позволит вам ссылаться на него в любой из функций в этом файле.
char board[8][8] = {
{' ',' ',' ',' ',' ',' ',' ',' ',}
{' ',' ',' ',' ',' ',' ',' ',' ',}
{' ',' ',' ',' ',' ',' ',' ',' ',}
{' ',' ',' ','W','B',' ',' ',' ',}
{' ',' ',' ','B','W',' ',' ',' ',}
{' ',' ',' ',' ',' ',' ',' ',' ',}
{' ',' ',' ',' ',' ',' ',' ',' ',}
{' ',' ',' ',' ',' ',' ',' ',' ',}
};
int main() {
int choice = displayMenu();
switch (choice) {
case 1:
displayBoard();
break;
case 2:
displayHelp();
break;
default:
cout << "Please enter a valid choice." << endl;
break;
}
playGame();
}
тогда в playGame
void playGame(){
int plW = 0;
int plB = 0;
int x = 0;
int y = 0;
char player = 'B';
cout << "\n\nScore: W = " << plW << " B = " << plB;
cout << "\nPlayer: " << player;
cout << "\nPlease make your move : ";
cin >> x >> y;
board[x][y]=player;
}
Для отображения доски:
displayBoard(){
for (int row = 0; row < 8; row++){
cout << " |";
for (int column = 0; column < 8; column++){
cout << board[row][column] << " |";
}
cout << endl;
}
}
Не уверен насчет форматирования здесь, вы можете исправить это самостоятельно, я думаю.
Наконец, вам нужно многократно вызывать playGame () и diplayBoard (), поэтому поместите оператор switch в цикл while с условием останова. Это означает, что вы будете продолжать запрашивать ввод у игрока (не забудьте переключить игрока), читать его ход и помещать его в свой массив, и отображать доску. Прервите цикл while, когда пользователь наберет Exit или что-то в этом роде.