|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Морской бой - Оптимизация |
|
|
C/C++ - Морской бой - Оптимизация
|
|
Новый участник Сообщения: 17 |
Здравствуйте! У меня такой вопрос.. Как можно упростить данную часть? Данный блок проверяет смежные клетки на присутствие кораблей. Если корабли отсутствуют - новый корабль устанавливается.
void set (player *human, int deck)
{
int isset = 0;
int e = 0;
int dir, x, y;
//Направлении
enum direction
{
h = 0,
v = 1
};
// srand(time(NULL));
while (isset == 0)
{
dir = static_cast<direction>(rand()%2);
x = rand()%10;
y = rand()%10;
e = 0;
switch (dir)
{
case 0:
if (human->ships[x][y+deck-1] == 1)
{
if (human->ships[x-1][y-1] == 2)
{
e = 1;
/*
345678
#-------
2|X
3| 2222
4|
*/
}
if (human->ships[x-1][y+deck] == 2)
{
e = 1;
/*
345678
#-------
2| X
3| 2222
4|
*/
}
if (human->ships[x+1][y-1] == 2)
{
e = 1;
/*
345678
#-------
2|
3| 2222
4|X
*/
}
if (human->ships[x+1][y+deck] == 2)
{
e = 1;
/*
345678
#-------
2|
3| 2222
4| X
*/
}
if (human->ships[x][y-1] == 2)
{
e = 1;
/*
345678
#-------
2|
3|X2222
4|
*/
}
if (human->ships[x][y+deck] == 2)
{
e = 1;
/*
345678
#-------
2|
3| 2222X
4|
*/
}
for (int i = 0; i < deck; i++)
{
if (human->ships[x-1][y+i] == 2)
{
e = 1;
/*
345678
#-------
2| XXXX
3| 2222
4|
*/
}
if (human->ships[x+1][y+i] == 2)
{
e = 1;
/*
345678
#-------
2|
3| 2222
4| XXXX
*/
}
}
if (e == 0)
{
for (int i = 0; i < deck; i++)
{
human->ships[x][y+i] = 2; // размещаем корабль в массиве ships
}
isset = 1;
}
}
break;
case 1:
if (human->ships[x+deck-1][y] == 1)
{
if (human->ships[x-1][y-1] == 2)
{
e = 1;
/*
345678
#-------
2|X
3| 2
4| 2
5| 2
6| 2
7|
*/
}
if (human->ships[x-1][y+1] == 2)
{
e = 1;
/*
345678
#-------
2| X
3| 2
4| 2
5| 2
6| 2
7| X
*/
}
if (human->ships[x+deck][y-1] == 2)
{
e = 1;
/*
345678
#-------
2|
3| 2
4| 2
5| 2
6| 2
7|X
*/
}
if (human->ships[x+deck][y+1] == 2)
{
e = 1;
/*
345678
#-------
2|
3| 2
4| 2
5| 2
6| 2
7| X
*/
}
if (human->ships[x-1][y] == 2)
{
e = 1;
/*
345678
#-------
2| X
3| 2
4| 2
5| 2
6| 2
7|
*/
}
if (human->ships[x+deck][y] == 2)
{
e = 1;
/*
345678
#-------
2|
3| 2
4| 2
5| 2
6| 2
7| X
*/
}
for (int i = 0; i < deck; i++)
{
if (human->ships[x+i][y-1] == 2)
{
e = 1;
/*
345678
#-------
2|
3|X2
4|X2
5|X2
6|X2
7|
*/
}
if (human->ships[x+i][y+1] == 2)
{
e = 1;
/*
345678
#-------
2|
3| 2X
4| 2X
5| 2X
6| 2X
7|
*/
}
}
if (e == 0)
{
for (int i = 0; i < deck; i++)
{
human->ships[x+i][y] = 2;
}
isset = 1;
}
}
break;
}//switch
}// while
}//set
|
|
|
Отправлено: 14:08, 14-11-2012 |
|
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Выдели блок "корабль+1 клетка по периметру", да проверь циклом на отсутствие в нем кораблей/мин.
В С++ массивы начинаются с нуля. Сделай поле от 0 до 11, рабочее от 1 до 10. Чуть больше затрат, зато единая функция проверки кораблей, стоящих на линии игрового поля. |
|
------- Отправлено: 15:25, 14-11-2012 | #2 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| [решено] Сетевой морской бой для Windows 7/8 | Morpheus | Игры | 3 | 15-07-2012 12:34 | |
| Дата-центр Google будет охлаждаться морской водой | OSZone News | Новости информационных технологий | 2 | 27-05-2011 10:12 | |
| Установка - оптимизация | alik777 | Microsoft Windows 2000/XP | 1 | 24-07-2010 22:58 | |
| Службы - Оптимизация | Malfatto | Microsoft Windows Vista | 2 | 06-09-2008 15:08 | |
| Оптимизация | pashka-88 | Хочу все знать | 2 | 30-10-2005 20:49 | |
|