|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
Реализация игры морской бой28.05.2014, 01:54. Показов 14149. Ответов 52
Метки нет (Все метки)
подскажите плз алгоритм написания морского боя и основные аспекты ...
мои мысли : поле Кликните здесь для просмотра всего текста
Как сделать поле ? что оно из себя будет представлять ? просто расположенные картинки на поле с определенными координатами ? или может быть вставить грид, а по ячейкам распихивать картинки ? не понятно ... корабли Кликните здесь для просмотра всего текста
Как сделать корабли ? что из себя представляют корабли различного размера ? если четырехпалубник, это 4 картинки однопалубных или одна большая картинка ? если одна большая картинка, как на ней фиксировать выстрелы ? если эту большую картинку распихать по гриду (можно ли вообще так, поместить 1 картинку в 4 ячейки ?), то какой событие будет срабатывать, клик на картинку или на ячейку грида ? немного важного для меня оффтопа Кликните здесь для просмотра всего текста
После того как построим поле с кораблями ( не важно каким способом ), стоит ли создать массив, в котором будут хранится -1, 0 и 1(не доступен, свободен, занят) ? Когда создаешь вариант игры с игроком и компьютером, как отследить какой вариант принят и как организовать код, чтобы не дублировать процедуры ? Если для этого использовать флаг, то каким его лучше сделать ? Если флаг разместить в классе и тоскать его по процедурам, не нарушает ли это принципов ООП ? Как из кода не получить костыль ? Не по теме: Как спойлерам дать заголовок ?
0
|
|
| 28.05.2014, 01:54 | |
|
Ответы с готовыми решениями:
52
Простейшая реализация игры "Морской бой"
Для игры компьютера в морской бой реализовать стратегию в виде дерева |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 30.05.2014, 22:10 | ||
![]() Там еще довольно неплохо можно оптимизировать отрисовку — все-таки код делался просто как пример, без заморочек. Например, в данный момент при каждом вызове Invalidate вся поверхность переотрисовывается полностью, если даже переотрисовать нужно последний ряд (изменение размера формы, например). Экземпляр Graphics, передаваемый в метод аргументом, "знает", что все подряд отрисовывать не нужно, но действие тем не менее происходит.
1
|
||
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
| 30.05.2014, 23:30 [ТС] | |
|
kolorotur, после того, как я закончу расстановку кораблей, не могли бы вы глянуть проект, может у вас получится оптимизировать отрисовку поля
Добавлено через 13 минут kolorotur, как по нажатию кнопки отрисовать всю панель заново с внесенными изменениями ?
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||
| 31.05.2014, 00:11 | ||||||||
1
|
||||||||
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
| 31.05.2014, 00:53 [ТС] | |
|
вот что есть на данный момент
0
|
|
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
| 31.05.2014, 01:29 [ТС] | |
|
для двухпалубных я разобрался, изменив метод проверки... для остальных не знаю пока-что ...
Добавлено через 28 минут появилась идея для универсальной проверки для всех размеров, чуть позже напишу
0
|
|
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
| 01.06.2014, 02:17 [ТС] | |
|
игра в предконечной стадии разработки, и тут появилась новая ошибка
не знаю, из-за чего, возникает, когда играешь с компом ...Не по теме: для начала игры нажмите автогенирация - готово, дальше клацайте на поле соперника
0
|
|
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
| 01.06.2014, 02:25 [ТС] | |
|
видимо, ошибка происходит, когда комп попадает в тебя ...
Добавлено через 6 минут исправил проблему, убрав рекурсию
0
|
|
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
| 01.06.2014, 02:44 [ТС] | |
|
kolorotur, вы обещали по окончанию попытаться оптимизировать отрисовку поля, проект уже готов, гляньте плз, так же может у вас получится сделать взрывы корабликов(типо когда взрывается двухпалубный, например, то соседнии от него клетки, закрашиваются в цвет промоха)
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 01.06.2014, 11:44 | ||
![]() У меня дома проект не открывается, т.к. имеется только 2010-я студия. Гляну с работы во время перерыва.
1
|
||
|
C#,XNA Game Studio
36 / 36 / 8
Регистрация: 26.04.2014
Сообщений: 195
|
|
| 01.06.2014, 12:04 | |
|
методы проверки по матрице по матрице по-моему достаточно просты скажем каждый элемент матрицы кроме координат икс и игрик имеет поле статуса, 0 -незанято,1- однопалубный,2-двупалубный, и так далее, плюс к этому нужно указать идентификатор корабля чтобы сослаться на него. Параллельно с этим список кораблей должен быть, List<List<Point>>, тоесть у каждого корабля список точек которые обозначают координаты клеток в матрице, но сюда кроме поинтов нужно добавить статус к каждой точке жив/мертв, и еще такой же статус ко всему кораблю, значит нам еще и количество оставшихся в живых клеток нужно каунтить для каждого корабля пр попадании.Помоему так проще..)наверное..)
1
|
|
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
| 01.06.2014, 14:01 [ТС] | |
|
kolorotur, чтобы с 2010 студии открывалось, нада просто фреймворк 4.5 поставить
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||||||||||
| 01.06.2014, 19:44 | ||||||||||||||||
|
Глянул.
Перво-наперво, оптимизация отрисовки. Вот код обработчика Paint:
Поставьте панельке свойство BorderStyle на FixedSingle — не придется вручную еще и рамку рисовать. Я, правда, так и не увидел, где вы сохраняете координаты предыдущего квадрата, чтобы переотрисовывать только при смене ячейки. Нет смысла постоянно рисовать ячейку, если возить мышкой в пределах ее границ. Добавил такое в класс Battle:
Общие соображения: 1. Не ленитесь давать элементам управления нормальные имена, потому что разбираться во всех этих button1 и checkbox5 очень скучно. 2. Цепляйте один и тот же обработчик на событие Paint обеих панелек — нет смысла копировать один и тот же код. 3. Старайтесь сразу же избавляться от т.н. "китайского" кода — это когда вместо циклов используется дублирование кода, что у вас очень бодренько наблюдается в классе Battle. Потому как вот такой метод читать решительно невозможно, не говоря уже о том, чтобы его понять: 18+
1
|
||||||||||||||||
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
||
| 01.06.2014, 21:12 [ТС] | ||
|
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 02.06.2014, 00:27 | |
|
Fene4ka_, конечно можно — надо всего лишь проверять, чтобы текущий индекс не выходил за пределы массива.
Вообще проверку же сделать очень просто: корабль — это прямоугольник с определенными длиной и шириной, измеряемыми в ячейках поля. Например, трехпалубник по горизонтали — это прямоугольник в 1х3 ячеек. По вертикали — 3х1. Так как нельзя, чтобы корабли соприкасались, то накиньте еще по две клетки на ширину или высоту, получится 3х5 по горизонтали или 5х3 по вертикали. Если какая-то из координат лежит у границы поля, то с той стороны отнимите единицу, т.е. вертикальный трехпалубник в колонке А будет иметь размер (для проверки) 5х2 ячеек. Он же в колонке Б и в ряду 1 будет 4х3, в колонке А в первом ряду — 4х2. Разобравшись с этим, достаточно в цикле пробежать по ячейкам, образованным этим кораблем. Если в массиве на этом месте уже есть хотя бы одна занятая ячейка, то корабль там разместить нельзя.
1
|
|
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
||||||
| 02.06.2014, 02:57 [ТС] | ||||||
|
kolorotur, ту страшную процедуру получилось переделать в такую
)))12+
Добавлено через 46 минут а также упростил 60% кода, исправил отрисовку, чтобы теперь обновлялся только прямоугольник, где кораблик ... ![]() Добавлено через 15 секунд kolorotur, где вы раньше были с своим советом ...
0
|
||||||
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
| 02.06.2014, 03:24 [ТС] | |
|
скидываю, что получилось
0
|
|
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
|
| 02.06.2014, 03:31 [ТС] | |
|
из побочных эффектов, программа стала ощутимо медленнее работать, вопрос о взрывах кораблей остается открытым
Добавлено через 44 секунды Не по теме: после переименования кнопок, имена их событий не переименовались, можно их как-то автоматом переименовать ? :) Добавлено через 3 минуты WhiteMaster, к сожеление на данный момент, матрица имеет след координаты - координаты
0 - клетка не занята 1 - клетка временно резервируется для отображения кораблика при формировании поля 2 - клетка занята ячейкой кораблика 3 - попадание 4 - промах Добавлено через 1 минуту Не по теме: возьму уроки создания не костыля :)
0
|
|
|
C#,XNA Game Studio
36 / 36 / 8
Регистрация: 26.04.2014
Сообщений: 195
|
|
| 02.06.2014, 09:36 | |
|
Fene4ka_, есть такая вещь XNA Game Studio, как раз для написания игр на си шарпе http://www.microsoft.com/en-us... x?id=23714
1
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||
| 02.06.2014, 11:46 | |||||||||
![]() Добавлено через 3 минуты
1
|
|||||||||
|
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
|
||
| 02.06.2014, 13:13 [ТС] | ||
![]() Добавлено через 3 минуты kolorotur, для того, чтобы это работало со взрывами, туда нада отправить координаты, а также размер отстреляного корабля, из-за этого может быть неоднозначно ...
0
|
||
| 02.06.2014, 13:13 | |
|
Аналог игры "Морской бой" Разработка класса "Корабль" для игры "Морской бой" Морской бой Морской бой
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|