Перейти к содержимому

Фотография

Новые уроки по с++. 11 урок. Игра крестики нолики

автор денис марков

Сообщений в теме: 11

#1 DenisMD

DenisMD

    Продвинутый пользователь

  • Модераторы
  • 40 сообщений
  • ГородМагнитогорск

Отправлено 16 Июль 2013 - 01:46

Напишем всем известную игру в крестики нолики.



#2 Денис

Денис

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Отправлено 12 Декабрь 2013 - 19:09

#include <iostream>
#include <conio.h>
#include <random>
#include <time.h>
#include <Windows.h>

using namespace std;
char name1[30];
char name2[30];
char table[3][3];
bool step;

void instruction()
{
	cout << "\t\t Крестики-нолики \n\n";
	cout << " Правила:\n";
	cout << " Играю два игрока на поле 3х3\n";
	cout << " Побеждает тот кто составит выйграшную комбинацию\n";
	cout << " Вид поля\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 + 1);
			l++;
		}
		cout << '|';
		cout << endl;
	}
	cout << " \n Для ходя нажмите цифру яцейки поля \n";
	cout << " Для начала игры нажмите клавишу: ";
	_getch();
}
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 << " : ";
	int n;
	cin >> n;
	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 false;

		else
			if ((table[0][i] == table[1][i]) && (table[0][i] == table[2][i]))
				return false;
			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 main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	instruction();
	system("cls");

	cout << " Введите имя 1 игрока: ";
	cin.getline(name1, 30);
	cout << " Введите имя 2 игрока: ";
	cin.getline(name2, 30);

	srand(time(NULL));
	if (rand() & 1)
	step = true;
	else step = false;

	while (!win())
	{
		system("cls");
		if (!input())
		{
			cout << " Вы ввели неверные данные! Повторите!";
			_getch();
		}
	}
	system("cls");
	if (step)
		cout << " Победил! " << name2 << endl;
	else
		cout << " Победил! " << name1 << endl;
	_getch();
}

Не могу понять в чем ошибка.



#3 Administrator

Administrator

    Администратор

  • Администраторы
  • 89 сообщений
  • ГородПенза

Отправлено 12 Декабрь 2013 - 20:33

#include <iostream>
#include <conio.h>
#include <random>
#include <time.h>
#include <Windows.h>

using namespace std;
char name1[30];
char name2[30];
char table[3][3];
bool step;

void instruction()
{
	cout << "\t\t Крестики-нолики \n\n";
	cout << " Правила:\n";
	cout << " Играю два игрока на поле 3х3\n";
	cout << " Побеждает тот кто составит выйграшную комбинацию\n";
	cout << " Вид поля\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 + 1);
			l++;
		}
		cout << '|';
		cout << endl;
	}
	cout << " \n Для ходя нажмите цифру яцейки поля \n";
	cout << " Для начала игры нажмите клавишу: ";
	_getch();
}
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 << " : ";
	int n;
	cin >> n;
	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 false;

		else
			if ((table[0][i] == table[1][i]) && (table[0][i] == table[2][i]))
				return false;
			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 main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	instruction();
	system("cls");

	cout << " Введите имя 1 игрока: ";
	cin.getline(name1, 30);
	cout << " Введите имя 2 игрока: ";
	cin.getline(name2, 30);

	srand(time(NULL));
	if (rand() & 1)
	step = true;
	else step = false;

	while (!win())
	{
		system("cls");
		if (!input())
		{
			cout << " Вы ввели неверные данные! Повторите!";
			_getch();
		}
	}
	system("cls");
	if (step)
		cout << " Победил! " << name2 << endl;
	else
		cout << " Победил! " << name1 << endl;
	_getch();
}

Не могу понять в чем ошибка.

 

а что именно вам не нравится в работе вашей программы?



#4 Денис

Денис

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Отправлено 12 Декабрь 2013 - 23:15

93107_Bez_imeni-1.jpg

 

Не могу понять почему таблица заполняется двойками. проверил код несколько раз.



#5 Administrator

Administrator

    Администратор

  • Администраторы
  • 89 сообщений
  • ГородПенза

Отправлено 14 Декабрь 2013 - 12:58

93107_Bez_imeni-1.jpg

 

Не могу понять почему таблица заполняется двойками. проверил код несколько раз.

у вас в первом цикле есть строка table[i][j] = char(49 + 1);  Вы каждый раз присваиваете двойку так как в ASCII таблице 49 - это символ однерки, а 49+1 это символ двойки!



#6 Денис

Денис

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Отправлено 14 Декабрь 2013 - 14:27

Точно. там же переменная L должна быть. спасибо.



#7 stiler1st

stiler1st

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 02 Май 2014 - 19:37

 

93107_Bez_imeni-1.jpg

 

Не могу понять почему таблица заполняется двойками. проверил код несколько раз.

у вас в первом цикле есть строка table[i][j] = char(49 + 1);  Вы каждый раз присваиваете двойку так как в ASCII таблице 49 - это символ однерки, а 49+1 это символ двойки!

 

Я сделал, чтоб после победы поле не стирается, чтоб игрок видел свою комбинацию, но есть одна проблемка: после победного нажатия ячейка не заменяется X/O, но строка о победе выводится
 



#8 frost7412359

frost7412359

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 27 Май 2015 - 00:32


Спасибо автору за программу, она мне очень помогла!
Но я переписал программу на "модифицированные крестики нолики" добавив еще одну ячейку к главному полю и написал функцию которая определяет ничью!
#include <iostream>
#include <conio.h>


using namespace std;


class noname
{
private:
char name1[30];
char name2[30];
char table[3][4];
bool step;
public:
void game()
{
instruction();
cout << " Vvedit imya 1 gravcia: ";
cin.getline(name1, 30);
cout << " Vvedit imya 2 gravcia: ";
cin.getline(name2, 30);


step = true;


while ((win()!=true))
{
clrscr();
                if (draw()==true) break;




if (input()!=true)
{
cout << " Vu vvelu nevirni dani! Povtorit!";
_getch();
}
}
clrscr();
        if (draw()!=true)
        {
if (step==true)
cout << " Vugrav " << name2 << endl;
else
cout << " Vugrav " << name1 << endl;
        }
        else
                cout<< " Nichyya! Peremohla druzhba! "<<endl;


getch();
}
void instruction()
{
cout << "\t\t Hrestuku nyluku\n\n";
cout << " Vud polya\n";


int l = 0;


for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << "| " << l + 1 << ' ';
table[i][j] = char(49 + l);
l++;
}
cout << '|';
cout << endl;


};
        l=6;
        for (int j = 0; j < 3; j++)
        {
        cout << "| " << l + 1 << ' ';
table[2][j] = char(49 + l);
        l++;
        } cout << '|';
        cout << " " << 0 << ' ';
table[2][3] =char(48);
        cout << '|';






cout << " \n Dlya hody natusnit tsufry klitinku polya \n";
cout << " Dlya pochatky gry nazhmit klavishy: "<<endl;
_getch();
}
bool input()
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << "| " << table[i][j] << ' ';
}
cout << '|';
cout << endl;
}
                for (int j = 0; j < 4; j++)
                {
                        cout << "| " << table[2][j] << ' ';
                }
                cout << '|';
cout << endl;
if (step==true)
cout << " Hodut " << name1 << " : ";
else
cout << " Hodut " << name2 << " : ";
int n;
cin >> n;
if (n < 0 || n > 9)
return false;
int i, j;


        if (n == 0)
        {       i=2;
                j=3;
        }
        else
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==true)
{
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])) ||
                                   ((table[0][1] == table[1][2]) && (table[0][1] == table[2][3])) ||
                                   ((table[2][1] == table[2][2]) && (table[2][1] == table[2][3])))
                                        return true;
                        return false;
}


bool draw()
{
        if (((table[0][0]=='X') || (table[0][0]=='O')) &&
            ((table[0][1]=='X') || (table[0][1]=='O')) &&
            ((table[0][2]=='X') || (table[0][2]=='O')) &&
            ((table[1][0]=='X') || (table[1][0]=='O')) &&
            ((table[1][1]=='X') || (table[1][1]=='O')) &&
            ((table[1][2]=='X') || (table[1][2]=='O')) &&
            ((table[2][0]=='X') || (table[2][0]=='O')) &&
            ((table[2][1]=='X') || (table[2][1]=='O')) &&
            ((table[2][2]=='X') || (table[2][2]=='O')) &&
            ((table[2][3]=='X') || (table[2][3]=='O')))
                 return true;
                 else
                 return false;
}




};
int main()
{
     noname diana;
     diana.game();
     getch();
}

 



#9 Max

Max

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 27 Март 2016 - 02:41

// кусок кода с ничьей

// ------------------------------------

 

int draw=0;

 

while (!win())

{

if (draw==9) break;

system("cls");

if (!input())

{

cout << "Вы ввели неверные данные, повторите\n";

_getch();

}

draw++;

}

 

system("cls");

 

if ((draw==9)&&win) cout << "Ничья\n";

else

if (step) cout << "Победил " << name2 << endl;

else cout << "Победил " << name1 << endl;



#10 Айдар

Айдар

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 04 Июнь 2016 - 14:31

#include<iostream>
#include<conio.h>
#include<random>
#include<time.h>
using namespace std;
 
char name1[30]; //строка имя 1 игрока
char name2[30]; // 2 игрока
char table[3][3]; // таблица  // 00 01 02
                             //  10 11 12
   //   20 21 22
bool step; // шаг
 
void instruction()
{
cout << "\t\t***Крестики_Нолики***\n\n";
cout << "Правила: \n";
cout << "Играют 2 игрока на поле 3х3\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 + 1);// 49 код единички
l++;
}
cout << '|';
cout << endl;
}
 
cout <<"\nДля хода нажмите цифру ячейки\n" ;
cout << "Для начала игры нажмите ENTER: ";
_getch();
}
 
 
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 << " : ";
// в зависимости от того чей ход, выводится чей ход Хд
 
int n;
cin >> n; // вводим число на которое будем ходить
if (n < 1 || n>9) // диапазон верных чисел
return false;
int i, j; // коэфициенты цифра 4: (10) 11 12
 
if (n % 3 == 0) // деление на 3 с ост.
{
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]))
// И по диагонали (их только 2)
return true;
 
return false;
}
 
 
int main()
{
setlocale(LC_ALL, "Russian");
 
instruction();
system("cls");
 
cout << "Введите имя 1 игрока: ";
cin.getline(name1, 30);
cout << "Введите имя 2 игрока: ";
cin.getline(name2, 30);// Ввод имени 2-ух игроков
 
srand(time(NULL)); // Случайным обр. определ кто ходит первым
if (rand() & 1) //битовое умн. на 1 (деление с остатком на 2)
  //Позволяет определить четное это число или не четное
step = true;
else step = false;
 
while (!win())
{
system("cls");
if (!input() ) // если ввод не удался
{
cout << "Вы ввели неверные данные, повторите: " ;
_getch;
}
}
 
 
system("cls");
if (step)
cout << "Победил " << name2 << endl;
else cout << "Победил " << name1 << endl;
 
_getch();
return 0;
}
 
 
 
 
Подскажите в чем ошибка, сам не могу найти
 


#11 Айдар

Айдар

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 04 Июнь 2016 - 14:39



 

#include<iostream>
#include<conio.h>
#include<random>
#include<time.h>
using namespace std;
 
char name1[30]; //строка имя 1 игрока
char name2[30]; // 2 игрока
char table[3][3]; // таблица  // 00 01 02
                             //  10 11 12
   //   20 21 22
bool step; // шаг
 
void instruction()
{
cout << "\t\t***Крестики_Нолики***\n\n";
cout << "Правила: \n";
cout << "Играют 2 игрока на поле 3х3\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 + 1);// 49 код единички
l++;
}
cout << '|';
cout << endl;
}
 
cout <<"\nДля хода нажмите цифру ячейки\n" ;
cout << "Для начала игры нажмите ENTER: ";
_getch();
}
 
 
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 << " : ";
// в зависимости от того чей ход, выводится чей ход Хд
 
int n;
cin >> n; // вводим число на которое будем ходить
if (n < 1 || n>9) // диапазон верных чисел
return false;
int i, j; // коэфициенты цифра 4: (10) 11 12
 
if (n % 3 == 0) // деление на 3 с ост.
{
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]))
// И по диагонали (их только 2)
return true;
 
return false;
}
 
 
int main()
{
setlocale(LC_ALL, "Russian");
 
instruction();
system("cls");
 
cout << "Введите имя 1 игрока: ";
cin.getline(name1, 30);
cout << "Введите имя 2 игрока: ";
cin.getline(name2, 30);// Ввод имени 2-ух игроков
 
srand(time(NULL)); // Случайным обр. определ кто ходит первым
if (rand() & 1) //битовое умн. на 1 (деление с остатком на 2)
  //Позволяет определить четное это число или не четное
step = true;
else step = false;
 
while (!win())
{
system("cls");
if (!input() ) // если ввод не удался
{
cout << "Вы ввели неверные данные, повторите: " ;
_getch;
}
}
 
 
system("cls");
if (step)
cout << "Победил " << name2 << endl;
else cout << "Победил " << name1 << endl;
 
_getch();
return 0;
}
 
 
 
 
Подскажите в чем ошибка, сам не могу найти

 

 

Вообщем вставить картинки не получается, объясню на словах: после ввода имен игроков сразу выходит, что победил 2 игрок. Из за чего это может быть, вроде все по примеру делал



#12 vadim1998

vadim1998

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 23 Май 2017 - 17:54

Помогите дописать алгоритм ничьей прогга та же не получается никак
#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;
#include &amp;amp;amp;lt;conio.h&amp;amp;amp;gt;
#include &amp;amp;amp;lt;random&amp;amp;amp;gt;
#include &amp;amp;amp;lt;time.h&amp;amp;amp;gt;
#include &amp;amp;amp;lt;Windows.h&amp;amp;amp;gt;

using namespace std;

char name1[30];
char name2[30];
char table[3][3];
bool step;


void instruction()
{
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Выполнил курсовой проект студент группы 16ВВ2 Анастасин Вадим\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"\t\t\tКрестики-Нолики\n\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Правила:\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Играют 2 игрока на поле 3х3\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Побеждает игрок, составивший выигрышную комбинацию\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Сделать ход можно в диапазоне от 1 до 9\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Вид игрового поля:\n\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"\t\t1 |2 |3\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"\t\t4 |5 |6\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"\t\t7 |8 |9\n";

int l = 0;

for(int i(0); i &amp;amp;amp;amp;lt; 3; i++)
{
for(int j(0); j &amp;amp;amp;amp;lt; 3; j++)
{

table[i][j] = char(49+l);
l++;
}

}

cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"\nДля хода нажмите цифру ячейки поля\n";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Для начала игры нажмите клавишу:";
_getch();

}
bool input()
{
for(int i(0); i &amp;amp;amp;amp;lt; 3; i++)
{
for(int j(0); j &amp;amp;amp;amp;lt; 3; j++)
{

cout &amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt; "|" &amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt; table[i][j] &amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt; ' ';
}
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"|";
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt; endl;
}
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt; endl;
if(step)
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Ходит 1 игрок\n";
else cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Ходит 2 игрок\n";

int n;
cin &amp;amp;amp;amp;gt;&amp;amp;amp;amp;gt; n;
if(n &amp;amp;amp;amp;lt; 1 || n &amp;amp;amp;amp;gt; 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 &amp;amp;amp;amp;lt; 3; i++)
if((table[i][0] == table[i][1]) &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; (table[i][0] == table[i][2]))
return true;

else
if((table[0][i] == table[1][i]) &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; (table[0][i] == table[2][i]))
return true;

else if((table[0][0] == table[1][1]) &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; (table[0][0] == table[2][2]) || (table[0][2] == table[1][1] &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; table[0][2] == table[2][0] == table[1][1] &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; table[0][0] == table[2][2]) || (table[0][2] == table[1][1] &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; table[0][2] == table[2][0]))

return true;
return false;
}
int main()
{
setlocale(LC_ALL , "Russian");
instruction();
system("cls");

cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Введите имя 1 игрока: \n";
cin.getline(name1,30);
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Введите имя 2 игрока: \n";
cin.getline(name2,30);

srand(time(NULL));
if(rand() &amp;amp;amp;amp;amp; 1)
step = true;
else step = false;

while(!win())
{
system("cls");
if( !input() )
{
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;" Вы ввели неверные данные,пожалуйста повторите!\n";
_getch();
}
}
system ("cls");
if (step)
cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Победил 2 игрок\n";
else cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;"Победил 1 игрок\n";
_getch();
}





Темы с аналогичным тегами автор денис марков