Тема: погано написані консольні хрестики нулики С++
#include <iostream>
#include <stdlib.h>
/*
* CONFIG
*/
#define SPACE ' ' //пустий символ, не трогайте :3
#define HOW_USERS 2 //кількість гравців
#define WIDTH 3 //висота
#define HEIGHT 3 //ширина
//кількість однакових символім в
//ряді/діагоналі/стовбці/оберненій діагоналі
#define LENGTH_WIN 3
//фігурки (хрестик, нолиік і тд) містяться у класі Game
//змінна "char symbols[HOW_USERS]" приватні поля
/*
* END CONFIG
*/
class User {
public:
User(char figure) {
this -> figure = figure;
}
int store = 0;
char figure;
};
class Game {
public:
Game() {
this -> run();
}
private:
int coord_1 = WIDTH;
int coord_2 = HEIGHT;
int player;
char fill[WIDTH][HEIGHT];
char symbols[HOW_USERS] = {'X', 'O'};
User* users[HOW_USERS];
User* createUser(int i) {
return new User(symbols[i]);
}
void createUsers() {
for (int i = 0; i < HOW_USERS; i++) {
this -> users[i] = this -> createUser(i);
}
}
void restartGame() {
this -> player = 0;
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHT; j++) {
this -> fill[i][j] = SPACE;
}
}
}
bool checkEndGames() {
char symbol_check = this -> users[(player+1) % HOW_USERS] -> figure;
int result = 0;
//по рядам
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHT; j++) {
if (this -> fill[i][j] == symbol_check) {
result++;
}
else {
result = 0;
}
if (result == LENGTH_WIN) {
return false;
}
}
}
//по стовпцям
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHT; j++) {
if (this -> fill[j][i] == symbol_check) {
result++;
}
else {
result = 0;
}
if (result == LENGTH_WIN) {
return false;
}
}
}
//по всім діагоналям
for (int k = 0; k < 2; k++) {
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHT; j++) {
if (k == 0) {
if (this -> fill[j+i][j] == symbol_check) {
result++;
}
else {
result = 0;
}
}
else {
if (this -> fill[j][j+i] == symbol_check) {
result++;
}
else {
result = 0;
}
}
if (result == LENGTH_WIN) {
return false;
}
}
}
}
//по всім оберненим діагоналям
for (int k = 0; k < 2; k++) {
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHT; j++) {
if (k == 0) {
if (this -> fill[HEIGHT - j - i - 1][j] == symbol_check) {
result++;
}
else {
result = 0;
}
}
else {
if (this -> fill[j][HEIGHT - j - i - 1] == symbol_check) {
result++;
}
else {
result = 0;
}
}
if (result == LENGTH_WIN) {
return false;
}
}
}
}
return true;
}
void printGameFill() {
for (int i = 0; i < WIDTH; i++) {
std::cout << "[ ";
for (int j = 0; j < HEIGHT; j++) {
std::cout << this -> fill[i][j] << ' ';
}
std::cout << "]\n";
}
std::cout << std::endl;
}
void printStore() {
std::cout << "--------------------------------";
for (int i = 0; i < HOW_USERS; i++) {
std::cout << "\nplayer: " << i + 1
<< " | store: " << this -> users[i] -> store
<< " | symbol: " << this -> users[i] -> figure;
}
std::cout << "\n--------------------------------\n\n";
}
void run() {
this -> createUsers();
while (true) {
this -> restartGame();
while (checkEndGames()) {
this -> coord_1 = WIDTH;
this -> coord_2 = HEIGHT;
system("cls");
this -> printStore();
this -> printGameFill();
std::cout << "player " << this -> player % HOW_USERS + 1 << " enter coords\n";
std::cout << "coord 1 (row): ";
std::cin >> this -> coord_1;
std::cout << "coord 2 (col): ";
std::cin >> this -> coord_2;
if (!std::cin) {
while (!std::cin) {
std::cin.clear();
std::cin.ignore();
}
continue;
}
if (0 < this -> coord_1 > WIDTH || 0 < this -> coord_2 > HEIGHT) {
std::cout << this -> coord_1 << " "
<< this -> coord_2 << "\n";
continue;
}
if (this -> fill[this -> coord_1-1][this -> coord_2-1] == SPACE) {
this -> fill[this -> coord_1-1][this -> coord_2-1] = this -> users[this -> player % HOW_USERS] -> figure;
this -> player++;
}
}
this -> users[(player+1) % HOW_USERS] -> store++;
}
//виходу немає :D
}
};
int main() {
Game game = Game();
}