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