|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Морской бой - Оптимизация |
|
C/C++ - Морской бой - Оптимизация
|
Новый участник Сообщения: 17 |
Профиль | Отправить PM | Цитировать Здравствуйте! У меня такой вопрос.. Как можно упростить данную часть? Данный блок проверяет смежные клетки на присутствие кораблей. Если корабли отсутствуют - новый корабль устанавливается.
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 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить 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 |
|