|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
Помогите с алгоритмом (треугольный морской бой)09.03.2012, 19:23. Показов 3875. Ответов 26
Метки нет (Все метки)
у меня курсач треугольный морской бой, с чего начать писать алгоритм для генерации кораблей, при условии, что поле нарисовано программно в виде шестиугольной сетки, состоящей из треугольников?
и ещё корабли могут соприкасаться углами, но не сторонами.((((((( сетка такая:
0
|
|
| 09.03.2012, 19:23 | |
|
Ответы с готовыми решениями:
26
Морской бой. Помогите разобраться в коде
Морской бой С++ |
|
88 / 65 / 2
Регистрация: 04.01.2010
Сообщений: 265
|
|
| 10.03.2012, 11:10 | |
|
Во-первых вам нужно определиться с выбором, как хранить значения клеток в памяти. Собственно, у вас, по сути, 2 выбора:
1) Хранить каждую клетку как запись с 4-мя полями: а) Состояние клетки (пуста, корабль, ранен, убит), б,в,г) "Ссылки" на соседние клетки. Этот метод сложнее, но не потребует математики. 2) Хранить все клетки в одномерном массиве, при этом потребуется разработать алгоритм, по которому можно будет определить любого соседа, имея только индекс текущей клетки. Определитесь с выбором - приходите снова.
0
|
|
|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
| 10.03.2012, 11:22 [ТС] | |
|
у меня не нужно корабли расставить, это упрощает задачу?
0
|
|
|
88 / 65 / 2
Регистрация: 04.01.2010
Сообщений: 265
|
|
| 10.03.2012, 11:27 | |
|
0
|
|
|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
| 10.03.2012, 11:35 [ТС] | |
|
головоломка такая: на поле нужно расставить корабли один четырёхпалубник, два трёх-, три двух-,
4 однопалубника(они могут соприкасаться углами, но не сторонами),алгоритм должен сгенерировать их, а пользователь найти.
0
|
|
|
Почетный модератор
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
|
|
| 10.03.2012, 11:53 | |
|
0
|
|
|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
| 10.03.2012, 11:57 [ТС] | |
|
мне нужно просто расставить, нажать на кнопку проверить и должно высветиться сообщение
если правильно "вы выиграли " или "неверная расстановка"
0
|
|
|
Заблокирован
|
|
| 10.03.2012, 13:08 | |
|
zangetsu,
Нифига непонятно. ты нарисуй картинку как эти корабли должный выглядеть. То есть игровое поле с кораблями. А я те расскжу как из сгенерировать. Вся загвоздка как это визуально должно выглядеть. Корабль это закрашеные треугольники?
0
|
|
|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
| 10.03.2012, 13:27 [ТС] | |
|
да корабли это закрашенные треугольники
0
|
|
|
Заблокирован
|
|
| 10.03.2012, 15:43 | |
|
Ну если закрашивать надо треугольники, тогда так...
1 Составить таблицу смежных полей Для этого пронумеруем поля в обычном порядке и запишем для каждого в массив смежные поля, поскольку сторон у треугольника 3, то и смежных поля 3, но поскольку треугольники имеют разную ориентацию, рассмативать будем 4 стороны лево верх право низ. значение 0 - это поля нет. Ну и ещё надо для каждого поля запомнить его ориентацию 0 - вверх 1 - вниз Ну например 1 поле ориентация 0 смежные поля 0,0,2,9 2 поле oриентация 1 смежные поля 1,0,3,0 и так далее до конца То есть получается 2 мерный массив 2 Составим таблицу положений корабля. В зависимости от ориентации начального треугольника, оно меняется. То есть самих положений 4, ориентации 2 следовательно нужно составить 8 карт на самый длинный корабль. 3 Приступаем у генерации. - Выбираем случайным образом поле. - Проверяем, занято оно или нет - Выбираем положение корабля - по карте положений генерируем корабль - при вычислении по карте положений, определяем поле и проверяем, занято оно или нет, потом проверяем, заняты ли смежные поля. Если все условия выполнены, занимаем полле, если условие не выполняется, приступаем к новой генерации корабля. выбирая его другое положение если при всех положениях сгенерировать неаозможно, выбираем другое поле и генерируем корабль заново. Если и это невозможно, приступаем к новой расстановке кораблей. проверка на смежные поля исключает установку кораблей бортами друг к другу. таблица положений делается только на самый длтнный корабль. А короткие, это просто проход этой карты в зависимости от длины корабля. одноклеточные генериуются простым выбором поля и проверкой смежных полей
0
|
|
|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
| 10.03.2012, 15:48 [ТС] | |
|
а если у меня каждый треугольник это Image?
0
|
|
|
Заблокирован
|
|||||||
| 11.03.2012, 01:16 | |||||||
|
Так что для начала возмите рисунок поля. пронумеруйте треугольники и составьте массив таблицы смежных полей. Как это сделать я написал. А потом скажу что делать дальше. Добавлено через 7 часов 33 минуты Ну дак что, уже не надо? Такими темпами ничего не сделаете. Вот что должно получиться. Вот такая таблица смежных полей
Какое-то задание странное. В одном посту одно, в другом другое. Так ты коробли сам расставишь на поле, а программа должна проверить расстановку, так чтоли?
0
|
|||||||
|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
| 11.03.2012, 12:08 [ТС] | |
|
так точно)
0
|
|
|
Заблокирован
|
|
| 11.03.2012, 13:45 | |
|
zangetsu,
ну дак подробней. как ты их расставляешь. или просто даёшь картинку, а прога должна проанализировать? В любом случае нужны эти таблицы. И кстати, поле как рисуется? или он готовое? Как будешь вычитслят попадание в треугольник? вычислением или другим методом? Добавлено через 34 минуты В общем если ты собрался анализировать готовую картинку, то алгоритм такой 1. Составляешь массив координат. По точке на треугольник. Это место откуда программа будет брать данные для анализа. 2. Ищем сначала самый длинный корабль, и потом в порядке убывания. 3 Поиск корабля ведйтся так. берём точку из списка всех полей и с этого места считываем цвет пикселя. Если это цвет корабля, то при помощи карты корабля, анализируем возможность его построения из этой точки. Если карта совпадёт с рисунком, значит корабль найден. Теперь надо проверить на сцепление этого корабля с другим кораблём. Для этого корабль стирается (досточно стереть точки) и строится заново по полученным данным, но при этом анализируются смежные поля. Если в смежных полях ничего нет, значит корабль корректен и все его поля исключаются из общего списка полей. 4 Так ищутся все корабли. если список точек пройден до конца значит корабли расставлены правильно, любое отклонение сразу же указывает на некорректность расстановки.
0
|
|
|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
| 11.03.2012, 17:00 [ТС] | |
|
поле ресуется при нажатии кнопки начать игру.
попадание в треугольник я сделал при помощи пустых image, при клике на первый высвечивается первый треугольник и так далее.
0
|
|
|
Заблокирован
|
|
| 11.03.2012, 17:31 | |
|
zangetsu,
Ну как хочешь так и делай. если нет желания делать как надо.
0
|
|
|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
| 11.03.2012, 17:52 [ТС] | |
|
как надо я просто не понимаю как сделать, и то что ты мне отправил большая часть мне не понятна(
Добавлено через 52 секунды и ещё как по точке на треугольник, если треугольник состоит из 3-х точек? Добавлено через 9 минут а можешь доступнее объяснить?
0
|
|
|
Заблокирован
|
|
| 11.03.2012, 19:19 | |
|
zangetsu,
Да куда уж проще... Если вы сам корабли рассставляете в процессе игры, то подход один Если даёте программе готовый рисунок - подход другой Если хотите, чтобы программа сама корабли расставила - подход третий Но во всех случаях должны быть составлены таблицы. полей и кораблей. Я таблицу смежных полей вам уже дал. В ней записано, какая у каждого поля ориентация, и какие поля соседние. Теперь, предположим у вас есть игровое поле. Я не знаю как оно у вас сделаго, но тут только два варианта может быть, или поле попросту нарисовано или генерируенеттся программой В первом случае нужна сенсорная карта поля. во втором набор координат каждого треугольника. В первом случае клетка определяется по карте сенсоров, во втором случае вычислиятся математически. Вот вы расставляете корабли. То есть просто щёлкаете по клеткам и они запоминаются в буфере. а клетка окрашивается. А потом нажимаете кнопку проверки и программа проверяет корректность расстановки. Алгоритм я уже написал. То есть тем или иным способом получаем сведиение о занятости поля. Пытаемся построить сначала самый длинный корабль по карте кораблей. Если он построен, проверяем его на соединение бортами с другим. Если тут всё чисто, поля с кораблём исключаются из списка проверки. Можно так же исключить и смежные поля, которые всё равно пусты. Как только все корабли найдены, фиксируем выигрыш, в любос другом случае - проигрыш. Вот и всё. сколько у вас времени? И тут мы ничего не сделаем. общение должно быть постоянным и для этого лучше перейти в аську. Сюда потом выложите готовый материал если захотите. А так.. по сообщению в день это не дело.
0
|
|
|
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
|
|
| 11.03.2012, 19:41 [ТС] | |
|
а у вас скайп есть?
Добавлено через 41 секунду времени у меня или 3 дня( на черновик) или 2 месяца на полную версию. Добавлено через 2 минуты или вк как вариант?
0
|
|
|
Люша
|
|
| 11.03.2012, 19:42 | |
|
Хе-хе! Я в такой Морской Бой и на бумаге не играла, не то что на компьютере! Спасибо огромное CyberForum! Где бы ещё я такое увидела!!!
|
|
| 11.03.2012, 19:42 | |
|
Помогаю со студенческими работами здесь
20
Морской бой=) Морской бой C++ Морской бой Морской Бой на C++ Морской бой в С Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|