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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2017, 13:16   #1
Tim_Tanos
Новичок
Джуниор
 
Регистрация: 04.11.2017
Сообщений: 2
По умолчанию Морской бой

Ребят помогите плеазе.
Я написал шаблонную функцию для расстановки кораблей. Когда я вызываю её в функции 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();

}
Tim_Tanos вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Морской бой Girei C# (си шарп) 0 22.01.2017 14:13
морской бой Alexander1205 Общие вопросы C/C++ 0 21.06.2011 22:24
Морской бой на С++ Vacilica Помощь студентам 3 22.01.2011 23:15
Морской Бой DanaBaitik Помощь студентам 0 12.09.2010 21:24
морской бой zxcc Помощь студентам 1 05.05.2010 16:51