Ребят помогите плеазе
.
Я написал шаблонную функцию для расстановки кораблей. Когда я вызываю её в функции setup(), но вырисовывается только первая вызванная функция, а остальные игнорируются. Хотя по одной они каждая выводятся.
Код:
#include <iostream>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
using namespace std;
const int N = 11;
char my_map[N][N] = { 0 };
char comp_map[N][N] = { 0 };
int x, y, x1, a1, x2, y2, x3, y3, x4, y4;
int dir = 0;
int count_ship = 0;
template <typename T>
void insert_ship(T first, T second, T three, T four)
{
while (count_ship < three)
{
//Первичная позиция
first = rand() % N;
second = rand() % N;
int temp_x = first;
int temp_y = second;
//Генерация направления
dir = rand() % 4;
bool setting_is_possible = 1;
//Проверка возможности постаовки корабля
for (int i = 0; i < four; i++)
{
if (first < 0 || second < 0 || first >= N || second >= N)
{
setting_is_possible = 0;
break;
}
//Проверка границ ячейки
if (comp_map[first][second] == 98 ||
comp_map[first][second + 98] == 98 ||
comp_map[first][second - 98] == 98 ||
comp_map[first + 98][second] == 98 ||
comp_map[first + 98][second + 98] == 98 ||
comp_map[first + 98][second - 98] == 98 ||
comp_map[first - 98][second] == 98 ||
comp_map[first - 98][second + 98] == 98 ||
comp_map[first - 98][second - 98] == 98)
{
setting_is_possible = 0;
break;
}
//Изменение координат в зависимости от направления
switch (dir)
{
case 0:
first++;
break;
case 1:
second++;
break;
case 2:
first--;
break;
case 3:
second--;
break;
}
}
//если есть возможность поставить корабль,ставим.
if (setting_is_possible == 1)
{
first = temp_x;
second = temp_y;
//Расстановка кораблей
for (int i = 0; i < four; i++)
{
switch (dir)
{
case 0:
comp_map[first][second] = 98;
first++;
break;
case 1:
comp_map[first][second] = 98;
second++;
break;
case 2:
comp_map[first][second] = 98;
first--;
break;
case 3:
comp_map[first][second] = 98;
second--;
break;
}
}
count_ship++;
}
}
}
//template <typename T>
//void razmesh(T kolvo, T first, T second)
//{
// for (int i = 0; i < kolvo; i++)
// {
// first = rand() % N;
// second = rand() % N;
// comp_map[first][second] = 98;
// //comp_map[x][y] = 45;
// }
//}
void setup()
{
srand(time(0));
//Размещение однопалубных кораблей
//for (int i = 0; i < 4; i++)
//{
// x = rand() % N;
// y = rand() % N;
// comp_map[x][y] = 98;
// //comp_map[x][y] = 45;
//}
//razmesh(4, x1, a1);
insert_ship(x1, a1, 4, 1);
insert_ship(x2, y2, 3, 2);
insert_ship(x3, y3, 2, 3);
insert_ship(x4, y4, 1, 4);
}
//void setup_1()
//{
// insert_ship(x1, a1, 4, 1);
//}
//
//void setup_2()
//{
// insert_ship(x2, y2, 3, 2);
//}
//
//void setup_3()
//{
// insert_ship(x3, y3, 2, 3);
//}
//
//void setup_4()
//{
// insert_ship(x4, y4, 1, 4);
//}
void draw()
{
//Отрисовка моего поля
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (my_map[j][i] == 0)
{
cout << "-";
}
else
{
cout << my_map[j][i];
}
}
cout << endl;
}
cout << endl;
//Отрисовка поля для компа
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (comp_map[j][i] == 0)
{
cout << "-";
}
else
{
cout << comp_map[j][i];
}
}
cout << endl;
}
}
void func()
{
my_map[0][0] = 48;
my_map[1][0] = 49;
my_map[2][0] = 50;
my_map[3][0] = 51;
my_map[4][0] = 52;
my_map[5][0] = 53;
my_map[6][0] = 54;
my_map[7][0] = 55;
my_map[8][0] = 56;
my_map[9][0] = 57;
my_map[10][0] = 49;
my_map[0][1] = 49;
my_map[0][2] = 50;
my_map[0][3] = 51;
my_map[0][4] = 52;
my_map[0][5] = 53;
my_map[0][6] = 54;
my_map[0][7] = 55;
my_map[0][8] = 56;
my_map[0][9] = 57;
my_map[0][10] = 49;
comp_map[0][0] = 48;
comp_map[1][0] = 49;
comp_map[2][0] = 50;
comp_map[3][0] = 51;
comp_map[4][0] = 52;
comp_map[5][0] = 53;
comp_map[6][0] = 54;
comp_map[7][0] = 55;
comp_map[8][0] = 56;
comp_map[9][0] = 57;
comp_map[10][0] = 49;
comp_map[0][1] = 49;
comp_map[0][2] = 50;
comp_map[0][3] = 51;
comp_map[0][4] = 52;
comp_map[0][5] = 53;
comp_map[0][6] = 54;
comp_map[0][7] = 55;
comp_map[0][8] = 56;
comp_map[0][9] = 57;
comp_map[0][10] = 49;
system("cls");
draw();
}
template <typename T>
void install(T first, T second)
{
while (true)
{
cout << "Введите координаты вражеского корабля по оси X" << endl;
cin >> first;
cout << "Введите координаты вражеского корабля по оси Y" << endl;
cin >> second;
if (comp_map[first][second] == 98)
{
cout << "Попал." << endl;
comp_map[first][second] = 0;
comp_map[first][second] = 88;
system("cls");
draw();
//Счётчик обнаружения кораблей
bool detect = false;
//Поиск подбитых кораблей
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (comp_map[i][j] == 98)
{
detect = true;
}
}
}
//Заканчивает игру
if (detect == false)
{
cout << "вы победили!!" << endl;
break;
}
//cout << detect;
}
else if (comp_map[first][second] != 98)
{
cout << "Промах." << endl;
comp_map[first][second] = 42;
system("cls");
draw();
}
}
}
void logic()
{
//Стрельба по кораблям
install(x1, a1);
/*while (true)
{
cout << "Введите координаты вражеского корабля по оси X" << endl;
cin >> x;
cout << "Введите координаты вражеского корабля по оси Y" << endl;
cin >> y;
if (comp_map[x][y] == 98)
{
cout << "Попал." << endl;
comp_map[x][y] = 0;
comp_map[x][y] = 88;
system("cls");
draw();
//Счётчик обнаружения кораблей
bool detect = false;
//Поиск подбитых кораблей
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (comp_map[i][j] == 98)
{
detect = true;
}
}
}
//Заканчивает игру
if (detect == false)
{
cout << "вы победили!!" << endl;
break;
}
//cout << detect;
}
else
{
cout << "Промах." << endl;
}
}*/
}
void input()
{
}
void main()
{
setlocale(LC_ALL, "rus");
setup();
/*setup_2();
setup_3();
setup_4();*/
draw();
func();
logic();
}