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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2010, 13:17   #1
MiRiN
 
Регистрация: 31.05.2008
Сообщений: 3
Вопрос Морской Бой по сети C++

Приветствую всех! Очень нужна помощь... Не как не могу разобраться с Сокетами(( В общем есть программа вернее игра консольный Морской бой.. Нужно реализовать возможность игры по сети... То есть запускает игру один игрок и другой и рубят друг с другом, желательно реализовать это без сервера... Ну то есть может быть чтобы один из Игроков был сервером и клиентом... В общем что то как то я не могу додуматься как это реализовать... Вот моя исходник:
Код:

SeaWar.cpp


#include "MyHead.h"

player human;
player computer;

int main()
{
	setlocale(LC_CTYPE, "Russian");
	int message = 0; 
	srand( static_cast<unsigned int>(time(NULL)) );
	
	human.ships_init(); 
	computer.ships_init(); 
	map_init(map); 

	/*
	message может содержать три значения:
	0 - всё нормально
	1 - пользователь нажал неверную клавишу
	2 - кто-то победил, конец игры
	*/
	while (message != 2)
	{
		int user_input = 0;
		system("cls"); 
		show(map);     
		if (message == 1) 
			std::cout << "Вы ввели неверное значение!\n";
		message = 0;   

		char character, digit;
		user_input = input(character, digit); 
		if (user_input == 1)
		{
			message = 1;
			continue; 
		}

		human.turn(computer,character, digit);
		computer.turn(human);
		message = check_ending();
	}
	_getch();
	return 0;
}



void map_init(char map[s][c])
{
	for (int i=0;i < 10; i++)
	{
		for (int j=0; j < 10; j++)
		{
			if (human.ships[i][j] == 2)
				map[i+2][j+2] = 'К';
		}
	}
}


void show(char map[s][c])
{
	читаем массивы игрока и компьютера и выводит в массив меп значения X и О 
}



// ввод координат
int input(char& character, char& digit)
{
	character = _getche(); // ввод "горизонтальной" координаты
	int match = 0;
	for (int i = 0; i < 10; i++)
		if (numbers[i] == character)
		{
			match = 1;
			character = i;
		}
	if (match == 0)	
		return 1;
	std::cout << '-';
	match = 0;
	digit = _getche(); // ввод "вертикальной" координаты
	for (int i = 0; i < 10; i++)
		if (numbers[i] == digit)
		{
			match = 1;
			digit = i;
		}
	if (match == 0)
		return 1;
	return 0;	
}

// В функции устанавливаются и проверяются флаги defeat_flag игроков.
int check_ending()
{
	int flag = 0;
	int human_flag = 0;
	int computer_flag = 0;
	for (int i=0; i<10;i++)
	{
		for (int j=0; j<10;j++)
		{
			if (human.ships[i][j] == 2)
				human_flag = 1; // у пользователя ещё остались неповреждённые корабли
			if (computer.ships[i][j] == 2)
				computer_flag = 1; // у компьютера ещё остались неповреждённые корабли
		}
	}
	if (human_flag == 0)
		flag = 2;
	if (computer_flag == 0)
		flag = 1;
	if (flag == 1)
	{
		std::cout << "Победил игрок!\n";
		return 2;
	}
	if (flag == 2)
	{
		std::cout << "Победил компьютер!\n";
		return 2;
	}
}

void player::ships_init()
{
	// инициализация массивов hits и ships
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j< 10; j++)
		{
			ships[i][j] = 1;
			hits[i][j] = 0;
		}
	}

	// Установка кораблей
	set(4);
	set(3);
	set(3);
	set(2);
	set(2);
	set(2);
	set(1);
	set(1);
	set(1);
	set(1);
}

void player::set (int deck)
{
	int my = deck - 1;
	bool isset = 0;
	int s,c;
	direction dir;
	while (isset == 0) 
	{
		dir = static_cast<direction>(rand()%2); 
		
		s = rand()%10; 
		c = rand()%10;
		int e = 0;
		switch (dir)
		{
		case h:
			if (ships[s][c+deck-1] == 1)
			{
				e = place_ship(s,c,dir,deck); 
				if (e == 0)
				{
					for (int i = 0; i < deck; i++)
					{
						ships[s][c+i] = 2; 
					}
					isset = 1;
				}
			}
			break;
		case v:
			if (ships[s+deck-1][c] == 1)
			{
				e = place_ship(s,c,dir,deck);
				if (e == 0)
				{
					for (int i = 0; i < deck; i++)
					{
						ships[s+i][c] = 2;
					}
					isset = 1;
				}
			}
			break;
		} 
	} 
} 


int player::place_ship(int s, int c, direction dir, int deck)
{
	//тут проверяем можно ли поставить данных корабль в данные координаты...
}

// Ход компьютера: вносим изменения в массивы human.ships и computer.hits
void player::turn(player& enemy)
{
	bool flag = 0;
	while (flag == 0)
	{
		int character = rand()%10; // Координаты по которым будет стрелять компьютер
		int digit = rand()%10;     // выбираются случайно
		if (hits[character][digit] != 1) // проверка: выбирал ли уже компьютер эти координаты
		{
			hits[character][digit] = 1;
			flag = 1;
			if (enemy.ships[character][digit] == 2)
			{
				enemy.ships[character][digit] = 3;
			}
		}
	}
}

// Ход игрока: вносим изменения в массивы computer.ships и human.hits
void player::turn(player& enemy, int character, int digit)
{
	hits[character][digit] = 1;
	if (enemy.ships[character][digit] == 2)
	{
		enemy.ships[character][digit] = 3;
	}
}
Очень благодарен буду за помощь...
MiRiN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Морской бой flutt C++ Builder 10 12.10.2017 16:57
морской бой zxcc Помощь студентам 1 05.05.2010 16:51
Морской бой nikifor Фриланс 1 26.03.2009 16:19
Морской Бой Liska-Melisska Microsoft Office Excel 9 29.12.2008 00:11
Морской бой flutt Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 17.04.2008 22:40