Здравствуйте я новенький в мире программирования c++. вот решил устроится стажером в фирму. Первое тестовое задание было сделать игру крестики нолики. Человек против компьютера чтоб компьютер всегда выигрывал. Вот взял шаблон с видео-уроков Дениса Маркова. Но что то не то не могу найти баг после 3-4 ходов прога проста не реагирует. Пожалуйста помогите.
personvscomp.h
#include<iostream>
#include<time.h>
#include<random>
#include<conio.h>
int n;
using namespace std;
class personvscomp {
protected:
char name1[30];
char name2[30]="computer";
char table[3][3];
bool step;
public:
void instruction()
{
cout << "\t\t*** Крестики-Нолики***\n\n";
cout << "Правила:\n";
cout << "Играют 2 игрока на поле 3x3\n";
cout << "Побеждает тот кто составит выйграшную комбинацию\n";
cout << "Вид поля:\n\n";
int l = 0;
for (int i(0); i < 3; i++)
{
for (int j(0); j < 3; j++)
{
cout << "| " << l + 1 << ' ';
table[i][j] = char(49 + l);
l++;
}
cout << '|';
cout << endl;
}
cout << "\nДля хода нажмите цифру ячейки поля\n";
cout << "Для начала игры нажмите клавишу:";
_getch();
system("cls");
}
bool input()
{
for (int i(0); i < 3; i++)
{
for (int j(0); j < 3; j++)
{
cout << "| " << table[i][j] << ' ';
}
cout << '|';
cout << endl;
}
cout << endl;
if (step)
cout << "Ходит " << name1 << " : ";
else cout << "Ходит " << name2 << " : ";
if (step)
{
cin >> n;
}
else
{
while (!step)
{
/*Нападение*/
if (((table[1][0] == 'O') && (table[2][0] == 'O')) || ((table[0][2] == 'O') && (table[0][1] == 'O')) || ((table[2][2] == 'O') && (table[1][1] == 'O')))
{
if ((table[0][0] != 'X') && (table[0][0] != 'O'))
{
n = 1;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'O') && (table[0][2] == 'O')) || ((table[1][1] == 'O') && (table[2][1] == 'O')))
{
if ((table[0][1] != 'X') && (table[0][1] != 'O'))
{
n = 2;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'O') && (table[0][1] == 'O')) || ((table[1][2] == 'O') && (table[2][2] == 'O')) || ((table[1][1] == 'O') && (table[2][0] == 'O')))
{
if ((table[0][2] != 'X') && (table[0][2] != 'O'))
{
n = 3;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'O') && (table[2][0] == 'O')) || ((table[1][1] == 'O') && (table[1][2] == 'O')))
{
if ((table[1][0] != 'X') && (table[1][0] != 'O'))
{
n = 4;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'O') && (table[2][2] == 'O')) || ((table[2][0] == 'O') && (table[0][2] == 'O')) || (((table[1][2] == 'O') && (table[1][0] == 'O')) || ((table[0][1] == 'O') && (table[2][1] == 'O'))))
{
if ((table[1][1] != 'X') && (table[1][1] != 'O'))
{
n = 5;
break;
}
else
{
continue;
}
}
else if (((table[1][0] == 'O') && (table[1][1] == 'O')) || ((table[0][2] == 'O') && (table[2][2] == 'O')))
{
if ((table[1][2] != 'X') && (table[1][2] != 'O'))
{
n = 6;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'O') && (table[1][0] == 'O')) || ((table[2][1] == 'O') && (table[2][2] == 'O')) || ((table[0][2] == 'O') && (table[1][1] == 'O')))
{
if ((table[2][0] != 'X') && (table[2][0] != 'O'))
{
n = 7;
break;
}
else
{
continue;
}
}
else if (((table[0][1] == 'O') && (table[1][1] == 'O')) || ((table[2][0] == 'O') && (table[2][2] == 'O')))
{
if ((table[2][1] != 'X') && (table[2][1] != 'O'))
{
n = 8;
break;
}
else
{
continue;
}
}
else if (((table[2][0] == 'O') && (table[2][1] == 'O')) || ((table[0][2] == 'O') && (table[1][2] == 'O')) || ((table[0][0] == 'O') && (table[1][1] == 'O')))
{
if ((table[2][2] != 'X') && (table[2][2] != 'O'))
{
n = 9;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'O') && (table[0][2] == 'O')) && ((table[0][0] == 'O') && (table[2][0] == 'O')))
{
if (((table[0][1] != 'O') && (table[0][1] != 'X')) && ((table[1][0] != 'O') && (table[1][0] != 'X')))
{
int array1[2] = { 2,4 };
int l;
l = rand() % 2;
n = array1[l - 1];
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'O') && (table[0][2] == 'O')) && ((table[0][2] == 'O') && (table[2][2] == 'O')))
{
if (((table[0][1] != 'O') && (table[0][1] != 'X')) && ((table[1][2] != 'O') && (table[1][2] != 'X')))
{
int array1[2] = { 2,6 };
int l;
l = rand() % 2;
n = array1[l - 1];
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'O') && (table[2][0] == 'O')) && ((table[2][2] == 'O') && (table[2][0] == 'O')))
{
if (((table[2][1] != 'O') && (table[2][1] != 'X')) && ((table[1][0] != 'O') && (table[1][0] != 'X')))
{
int array1[2] = { 8,4 };
int l;
l = rand() % 2;
n = array1[l - 1];
break;
}
else
{
continue;
}
}
else if (((table[2][0] == 'O') && (table[2][2] == 'O')) && ((table[2][0] == 'O') && (table[0][0] == 'O')))
{
if (((table[2][1] != 'O') && (table[2][1] != 'X')) && ((table[1][2] != 'O') && (table[1][2] != 'X')))
{
int array1[2] = { 8,6 };
int l;
l = rand() % 2;
n = array1[l - 1];
break;
}
else
{
continue;
}
}
/*Нападение*/
/*Оборона*/
else if (((table[0][2] == 'X') && (table[0][1] == 'X')) || ((table[2][0] == 'X') && (table[1][0] == 'X')) || ((table[2][2] == 'X') && (table[1][1] == 'X')))
{
if ((table[0][0] != 'X') && (table[0][0] != 'O'))
{
n = 1;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'X') && (table[0][2] == 'X')) || ((table[1][1] == 'X') && (table[2][1] == 'X')))
{
if ((table[0][1] != 'X') && (table[0][1] != 'O'))
{
n = 2;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'X') && (table[0][1] == 'X')) || ((table[1][2] == 'X') && (table[2][2] == 'X')) || ((table[1][1] == 'X') && (table[2][0] == 'X')))
{
if ((table[0][2] != 'X') && (table[0][2] != 'O'))
{
n = 3;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'X') && (table[2][0] == 'X')) || ((table[1][1] == 'X') && (table[1][2] == 'X')))
{
if ((table[1][0] != 'X') && (table[1][0] != 'O'))
{
n = 4;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'X') && (table[2][2] == 'X')) || ((table[0][2] == 'X') && (table[2][0] == 'X')) || ((table[0][1] == 'X') && (table[2][1] == 'X')) || ((table[1][2] == 'X') && (table[1][0] == 'X')))
{
if ((table[1][1] != 'X')&& (table[1][1] != 'O'))
{
n = 5;
break;
}
else
{
continue;
}
}
else if (((table[0][2] == 'X') && (table[2][2] == 'X')) || ((table[1][0] == 'X') && (table[1][1] == 'X')))
{
if ((table[1][2] != 'X') && (table[1][2] != 'O'))
{
n = 6;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'X') && (table[1][0] == 'X')) || ((table[1][1] == 'X') && (table[0][2] == 'X')) || ((table[2][1] == 'X') && (table[2][2] == 'X')))
{
if ((table[2][0] != 'X') && (table[2][0] != 'O'))
{
n = 7;
break;
}
else
{
continue;
}
}
else if (((table[2][0] == 'X') && (table[2][2] == 'X')) || ((table[1][1] == 'X') && (table[0][1] == 'X')))
{
if ((table[2][1] != 'X') && (table[2][1] != 'O'))
{
n = 8;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'X') && (table[1][1] == 'X')) || ((table[0][2] == 'X') && (table[1][2] == 'X')) || ((table[2][0] == 'X') && (table[2][1] == 'X')))
{
if ((table[2][2] != 'X') && (table[2][2] != 'O'))
{
n = 9;
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'X') && (table[0][2] == 'X')) && ((table[0][0] == 'X') && (table[2][0] == 'X')))
{
if (((table[0][1] != 'O') && (table[0][1] != 'X')) && ((table[1][0] != 'O') && (table[1][0] != 'X')))
{
int array1[2] = { 2,4 };
int l;
l = rand() % 2;
n = array1[l-1];
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'X') && (table[0][2] == 'X')) && ((table[0][2] == 'X') && (table[2][2] == 'X')))
{
if (((table[0][1] != 'O') && (table[0][1] != 'X')) && ((table[1][2] != 'O') && (table[1][2] != 'X')))
{
int array1[2] = { 2,6 };
int l;
l = rand() % 2;
n = array1[l-1];
break;
}
else
{
continue;
}
}
else if (((table[0][0] == 'X') && (table[2][0] == 'X')) && ((table[2][2] == 'X') && (table[2][0] == 'X')))
{
if (((table[2][1] != 'O') && (table[2][1] != 'X')) && ((table[1][0] != 'O') && (table[1][0] != 'X')))
{
int array1[2] = { 8,4 };
int l;
l = rand() % 2;
n = array1[l-1];
break;
}
else
{
continue;
}
}
else if (((table[2][0] == 'X') && (table[2][2] == 'X')) && ((table[2][0] == 'X') && (table[0][0] == 'X')))
{
if (((table[2][1] != 'O') && (table[2][1] != 'X')) && ((table[1][2] != 'O') && (table[1][2] != 'X')))
{
int array1[2] = { 8,6 };
int l;
l = rand() % 2;
n = array1[l-1];
break;
}
else
{
continue;
}
}
else {
srand(time(NULL));
int array[9] = { 1,2,3,4,5,6,7,8,9 };
int k;
k = rand() % 9;
n = array[k-1];
break;
}
}
}
if (n < 1 || n > 9)
return false;
int i, j;
if (n % 3 == 0)
{
i = n / 3 - 1;
j = 2;
}
else
{
j = n % 3 - 1;
i = n / 3;
}
if (table[i][j] == 'O' || table[i][j] == 'X')
return false;
if (step)
{
table[i][j] = 'X';
step = false;
}
else { table[i][j] = 'O'; step = true; }
return true;
}
bool win()
{
for (int i(0); i < 3; i++)
if ((table[i][0] == table[i][1]) && (table[i][0] == table[i][2]))
return true;
else
if ((table[0][i] == table[1][i]) && (table[0][i] == table[2][i]))
return true;
else if ((table[0][0] == table[1][1] && table[0][0] == table[2][2]) || (table[0][2] == table[1][1] && table[0][2] == table[2][0]))
return true;
return false;
}
int main1() {
//int i = 0;
cout << "Введите имя игрока: ";
cin >> name1;
/*srand(time(NULL));
if (rand() & 1)//
step = true;
else step = false;
*/
while (!win())
{
//if (i == 9)
//{
//cout << "Ничья!!";
//_getch();
//return -1;
// }
system("cls");
if (!input())
{
/*cout << "Вы ввели неверные данные повторите!" << endl;
_getch();*/
continue;
}
// i++;
}
system("cls");
if (step)
cout << "Победил " << name2 << endl;
else cout << "Победил " << name1 << endl;
_getch();
}
};
source.cpp
#include <iostream>
#include <conio.h>
#include<random>
#include<time.h>
#include"person vs person.h"
#include"comp vs comp.h"
#include"person vs comp.h"
using namespace std;
void greetings()
{
system("Color B2");
cout << "***Добро пожаловать в игру крестики нолики***" << endl;
cout << "***Выберите режим игры и нажмите клавишу ENTER***" << endl;
cout << "1 Против Компьютера\n";
cout << "2 Против Человека \n";
cout << "3 Компьютер против компьютера: ";
}
int main()
{
setlocale(LC_ALL, "russian");
int n;
greetings();
cin >> n;
system("cls");
while (true)
{
if (n < 1 || n>3)
{
cout << "Вы ввели неправильный номер пожалуйста повторите: ";
cin >> n;
}
else
break;
}
if (n == 1)
{
personvscomp *ptr = new personvscomp;
ptr->instruction();
ptr->main1();
}
/*else if (n == 2)
{
personvsperson *dp = new personvsperson;
system("cls");
dp->instruction();
_getch();
system("cls");
dp->main1();
_getch();
}
else if (n == 3)
{
compvscomp *ptr = new compvscomp;
ptr->instruction();
ptr->main1();
}*/
else
{
cerr << "Произошла ошибка!!!";
}
_getch();
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я использую Firebird API для программного создания базыДля создания базы я использую код из этого поста
Всем приветПомогите решить проблему