Remis na pełnej planszy
Kółko i krzyżyk w konsoli krok po kroku - Podstawy C++ (C++)
Gdy wszystkie pola są zajęte, a nikt nie wygrał, jest remis. isFull szuka pustego pola; jeśli go nie ma, plansza jest pełna. Ta partia kończy się remisem.
#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;
}
// osiem linii: trzy wiersze, trzy kolumny, dwie przekatne
int lines[8][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6},
{1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};
// numer linii z trzema takimi samymi znakami albo -1
int winningLine() {
for (int i = 0; i < 8; i++) {
char a = board[lines[i][0]];
if (a != '.' && a == board[lines[i][1]] && a == board[lines[i][2]]) {
return i;
}
}
return -1;
}
bool isFull() {
for (int i = 0; i < 9; i++) {
if (board[i] == '.') {
return false;
}
}
return true;
}
int main() {
int moves[9] = {0, 1, 2, 4, 3, 5, 7, 6, 8};
char player = 'X';
for (int i = 0; i < 9; i++) {
if (!play(moves[i], player)) {
continue;
}
if (winningLine() != -1) {
cout << "Wygrywa " << player << endl;
break;
}
if (isFull()) {
cout << "Remis" << endl;
break;
}
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.