Форум программистов, компьютерный форум CyberForum.ru

Крестики-нолики - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Глобальные переменные http://www.cyberforum.ru/cpp-beginners/thread932271.html
Подскажите пожалуйста, почему данные в глобальной переменной перезаписываются, а не плюсуются? Пример: int peremennaya; void foo(); void main() { char ans;
C++ Не использовать имя класса при его реализации Из-за того, что не смог грамотно сформулировать свой вопрос, не нашел ничего в гугле :( Поэтому объясню на примере: Допустим, есть некий класс Example, объявление которого заключено в заголовочный файл Example.h: #ifndef EXAMPLE_H #define EXAMPLE_H class Example { Example(); http://www.cyberforum.ru/cpp-beginners/thread932270.html
C++ Указатель,объект класса размещенный в динамической памяти
Ребят,такой маленький нелепый вопрос. Как можно обратиться к объекту класса созданному в динамической памяти(через "new")?; В моей книге описано два способа. Первый ,к примеру вот #include <iostream> using namespace std; class cat { public: int a; }; int main()
Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' C++
Есть такой файл complex.h #ifndef COMPLEX_H #define COMPLEX_H template<class Type> class complex{ public: Type Re; Type Im; complex(Type re = 0, Type im = 0):Re(re),Im(im){}
C++ Перехват значений параметров шаблона http://www.cyberforum.ru/cpp-beginners/thread932253.html
Вопрос, собственно, в развитие этой темы - http://www.cyberforum.ru/cpp-beginners/thread930128.html Есть вот такой код: namespace spec { template <int... Idx> struct index { }; template <int N, int... Idx> struct sequence : sequence<N - 1, N - 1, Idx...> { };
C++ OpenGL для новичка Всем привет. Никак не могу найти книгу по OpenGL и C++, хотя нет, вру, находил. Но они так сказать далеко не первой свежести. Я хотел бы написать змейку (в консоле с графикой), и вот думаю использовать GL. Встречал так же уроки и видеоуроки, но мне хотелось бы книгу. Что подскажете по этотому поводу? Купить старую книгу? Учиться по урокам? Или вообще использовать другую библиотеку? подробнее

Показать сообщение отдельно
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 00:10  [ТС]     Крестики-нолики
В общем очередная проблема возникла Вроде программу дописал, условие проверки конца игры специально полностью списал из книги, а вот все равно где то есть ошибка. Заключается она в проверке окончания игры. Чтобы легче было проверять, ходы совершает только компьютер и выиграть он может в разных условиях, вот скрины:
1ый - нолики и в строке, и в столбце. Игра не закончилась вовремя.
2ой - нету 3ех ноликов ни в строке, ни в столбце.

Был бы очень благодарен за помощь.

Код
#pragma warning(disable:4996);
#include <iostream>
#include <conio.h>
#include <time.h>

using namespace std;

char matrix[3][3];

void init_matrix(); // инициализируем матрицу
void display_matrix(); // выводим матрицу на экран
void get_player_move(); // ход игрока
void get_comp_move(); // ход компьютера
bool is_nothing(int, int); // проверка правильности хода
char is_over(); // проверка конца игры

int main()
{
	srand(time(NULL));
	setlocale(LC_ALL, "Russian");
	char over = ' ';
	init_matrix();
	do
	{
		system("cls");
		display_matrix();
		/*get_player_move();
		over = is_over();
		if (over != ' ')
		{
			break;
		}*/
		get_comp_move();
		over = is_over();
	}
	while (over == ' ');
	system("cls");
	display_matrix();
	if (over == 'X')
	{
		cout << "Ты выиграл. " << endl;
	}
	else if (over == 'O')
	{
		cout << "Ты проиграл. " << endl;
	}
	system("pause");
	return 0;
}

void init_matrix()
{
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			matrix[i][j] = ' ';
		}
	}
}

void display_matrix()
{
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << matrix[i][j] << ' ';
		}
		cout << endl;
	}
}

void get_player_move()
{
	int x, y;
	cout << "Введите координаты: ";
	cin >> x >> y;
	while (!is_nothing(x, y))
	{
		cout << "Неверный ход. " << endl;
		cout << "Введите координаты: ";
		cin >> x >> y;
	}
	matrix[--x][--y] = 'X';
}

void get_comp_move() // ставит О в случайную клетку
{
	int x, y;
	x = rand() % 3 + 1;
	y = rand() % 3 + 1;
	while (!is_nothing(x, y))
	{
		x = rand() % 3 + 1;
		y = rand() % 3 + 1;
	}
	matrix[--x][--y] = 'O';
}

bool is_nothing(int x, int y)
{
	if (x <= 0 || x > 3 || y <= 0 || y > 3) // если введены неверные координаты
	{
		return false;
	}
	return (matrix[--x][--y] == ' ') ? true : false; // если клетка уже занята
}

char is_over()
{
	int i;
	for (i = 0; i < 3; i++) // проверяем строки
	{
		if (matrix[i][0] == matrix[i][1] && matrix[i][0] == matrix[i][2])
		{
			return matrix[i][0];
		}
	}
	for (i = 0; i < 3; i++) // проверяем столбцы
	{
		if (matrix[0][i] == matrix[1][i] && matrix[0][i] == matrix[2][i])
		{
			return matrix[0][i];
		}
	}
	if (matrix[0][0] == matrix[1][1] && matrix[1][1] == matrix[2][2]) // проверяем главную диагональ
	{
		return matrix[0][0];
	}
	if (matrix[0][2] == matrix[1][1] && matrix[1][1] == matrix[2][0]) // проверяем побочную диагональ
	{
		return matrix[0][2];
	}
}
Миниатюры
Крестики-нолики   Крестики-нолики  
 
Текущее время: 03:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru