Zajęte pole nie zmienia gracza

Kółko i krzyżyk w konsoli krok po kroku - Podstawy C++ (C++)

Ruch na zajęte pole nadpisałby znak przeciwnika. Funkcja play stawia znak tylko na pustym polu i zwraca false, gdy pole jest zajęte; wtedy ten sam gracz ma ruch dalej. W liście ruchów pole 4 pojawia się dwa razy.

#include <iostream>
using namespace std;

// plansza: 9 pol, numer pola = wiersz * 3 + kolumna, '.' = puste
char board[9] = {'.', '.', '.', '.', '.', '.', '.', '.', '.'};

void printBoard() {
  for (int row = 0; row < 3; row++) {
    cout << " " << board[row * 3] << " | " << board[row * 3 + 1] << " | " << board[row * 3 + 2] << endl;
    if (row < 2) {
      cout << "---+---+---" << endl;
    }
  }
}

// ruch na pole index; false, gdy pole jest zajete
bool play(int index, char player) {
  if (board[index] != '.') {
    cout << "Pole " << index << " zajete" << endl;
    return false;
  }
  board[index] = player;
  return true;
}

int main() {
  int moves[6] = {4, 4, 0, 2, 6, 3};
  char player = 'X';
  for (int i = 0; i < 6; i++) {
    if (play(moves[i], player)) {
      player = player == 'X' ? 'O' : 'X';
    }
  }
  printBoard();
  return 0;
}

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Podstawy C++·Zaloguj się, aby zapisać postęp na koncie.