Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2013, 23:20   #11
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Ну я поставил return -1, других ошибок не вижу. А изменений никаких, все равно игра заканчивается неправильно. В общем у меня вот так вот щас:
Код:
#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];
	}
	return -1;
}
Dima-War вне форума Ответить с цитированием
Старый 04.08.2013, 00:53   #12
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

Не благодари.
Код:
#include <stdio.h>
#include <stdlib.h>

char matrix[3][3];

void init_matrix(){
	int x, y;
	for (y = 0; y < 3; y++)
		for (x = 0; x < 3; x++)
			matrix[y][x] = ' ';
}

void display_matrix(void){
	int x, y;
	puts("   1  2  3");
	for (y = 0; y < 3; y++){
		printf("%d  ", y + 1);
		for (x =  0; x < 3; x++){
			putchar(matrix[y][x]);
			putchar(' ');
			putchar(' ');
		}
		puts("\n");
	}
}

int get_player_move(void){
	int x = 0, y = 0;
	puts("Введите координатy Y: ");
	scanf("%d", &y);
	puts("Введите координатy X: ");
	scanf("%d", &x);
	if(x > 0 || x < 4 || y > 0 || y < 4){
		if(matrix[y - 1][x - 1] == ' '){
			matrix[y - 1][x - 1] = 'X';
		}
		else return -1;
	}
	else return -1;
	
	return 0;
}

void get_comp_move(void){
	int x, y;
	do{
		x = 0 + rand() % 3;
		y = 0 + rand() % 3;
	}
	while(matrix[y][x] != ' ');
	matrix[y][x] = 'O';
}

char is_over(void){
	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];

	return ' ';
}

void play_X(void){
	char over = ' ';
	int counter = 0;
	init_matrix();
	display_matrix();
	do{
		while(get_player_move() == -1){
			system("clear");
			display_matrix();
		}
		counter++;
		if(counter < 9){
			get_comp_move();
			counter++;
			system("clear");
			display_matrix();
		}
		over = is_over();
	}while(over == ' ' && counter < 9);
	if(over == 'X') puts("\nYou win!\n");
	else if(counter == 9) puts("\nNo winer!\n");
	else puts("\nComp win!\n");
}

int main(){
	do{
		system("clear");
		play_X();
		puts("again? y/n ");
	}while(getchar() == 'y');
	
	return 0;
}
do not use your brain

Последний раз редактировалось Кащей; 04.08.2013 в 01:00.
Кащей вне форума Ответить с цитированием
Старый 04.08.2013, 01:02   #13
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Спасибо
Dima-War вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Крестики - Нолики на С# RaTyS Фриланс 3 28.11.2011 23:11
Крестики-Нолики Jasper92 Помощь студентам 3 01.11.2010 18:35
крестики нолики neformalblack Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 18.04.2010 19:04
крестики нолики neformalblack Qt и кроссплатформенное программирование С/С++ 3 15.04.2010 21:33