Всім привіт. Вирішив трохи побавитись і написав прогу недо-"Хрестики-нолики". Завдання полягає в тому, що є заданий фіксований двовимірний масив char, який складається з ноликів "0", хрестиків "Х" і пробіла " ", замість якого користувач згодом вводить 0 або Х.
char board[ROW][COLUMN] = { { '0', 'X', '0' },
{ ' ', 'X', 'X' },
{ 'X', '0', '0' } };
Програма на підставі введеного символа визначає хто переміг - Х, 0 чи нічия. Визначення проводиться тільки по вертикалі і горизонталі.
Питання: чи можливо якось заповнити даний вище масив рандомно, наприклад, за допомогою функції rand чи якимось іншим способом? Причому заповнити іксами "Х", нулями "0" і тільки одним пробілом, а "Х" має бути на 1 більше або менше "0".
P.S. Знаю, що можна все це реалізувати за допомогою одновимірного масиву і не паритись. Але хочу саме так.
▼Власне програма
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(static_cast<unsigned int>(time(NULL)));
const int ROW = 3;
const int COLUMN = 3;
char arr[] = { '0', 'X', ' '};
char board[ROW][COLUMN] = { { '0', 'X', '0' },
{ ' ', 'X', 'X' },
{ 'X', '0', '0' } };
int i, j;
char newItem;
bool winner1, winner2, exit;
cout << "\tTic-Tac-Toe\nBoard:" << endl;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COLUMN; j++)
{
cout << board[i][j];
}
cout << endl;
}
//заміна пробілу введеним значенням Х або 0
cout << "Input 0 or X instead space (0/X) - ";
cin >> newItem;
if (newItem == '0' || newItem == 'X')
{
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COLUMN; j++)
{
if (board[i][j] == ' ')
{
board[i][j] = newItem;
}
}
}
}
else
cout << "Wrong Symbol." << endl;
//перевірка X по горизонталі
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COLUMN; j++)
{
if (board[i][j] == 'X')
{
winner1 = true;
winner2 = false;
if (j == COLUMN-1)
{
exit = true;
}
}
else
{
winner1 = false;
break;
}
}
if (exit == true)
break;
}
//перевірка X по вертикалі
if (winner1 == false)
{
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COLUMN; j++)
{
if (board[j][i] == 'X')
{
winner1 = true;
winner2 = false;
if (j == COLUMN - 1)
{
exit = true;
}
}
else
{
winner1 = false;
break;
}
}
if (exit == true)
break;
}
}
//перевірка 0 по горизонталі
if (winner1 == false)
{
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COLUMN; j++)
{
if (board[i][j] == '0')
{
winner1 = false;
winner2 = true;
if (j == COLUMN - 1)
{
exit = true;
}
}
else
{
winner2 = false;
break;
}
}
if (exit == true)
break;
}
}
//перевірка 0 по вертикалі
if (winner1 == false && winner2 == false)
{
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COLUMN; j++)
{
if (board[j][i] == '0')
{
winner1 = false;
winner2 = true;
if (j == COLUMN - 1)
{
exit = true;
}
}
else
{
winner2 = false;
break;
}
}
if (exit == true)
break;
}
}
//вивід виграшу
if (winner1 == true)
{
cout << "X wins!" << endl;
}
else if (winner2 == true)
{
cout << "0 wins!" << endl;
}
else
{
cout << "Nobody's win!" << endl;
}
//таблиця хрестики-нолики після маніпуляцій
cout << "Board now:" << endl;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COLUMN; j++)
{
cout << board[i][j];
}
cout << endl;
}
return 0;
}