Londinium |
Отправлено: 15.10.2005, 13:50 |
|
Не зарегистрирован
|
Здравствуйте, Господа!
Решил вот написать свой "Морской бой" и заткнулся на автоматической генерации кораблей комьютера. Просьба ко всем, кто знает, как это сделать на С++Buider, поделиться этим знанием со мной.
Заранее всем спасибо.
|
|
Grigoriy |
Отправлено: 15.10.2005, 14:18 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (Londinium @ 15/10/2005, 13:50) | Здравствуйте, Господа!
Решил вот написать свой "Морской бой" и заткнулся на автоматической генерации кораблей комьютера. Просьба ко всем, кто знает, как это сделать на С++Buider, поделиться этим знанием со мной.
Заранее всем спасибо. |
Ну Вы и спросили.
Приложение консольное хотите создать или оконное?
Ну если оконное, тогда используем свойство формы
Form1->Canvas->...
и вперед !
|
|
Londinium |
Отправлено: 15.10.2005, 19:43 |
|
Не зарегистрирован
|
Вы меня немного неправильно поняли или я криво сказал. Мне необходимо написать именно алгоритм генерации кораблей — т.е. корректно разместить корабли — чтобы они не соприкасались, не были под углом, чтобы их было положенное число, а нарисовать их на форме можно по-разному — это не проблема. |
|
Grigoriy |
Отправлено: 16.10.2005, 07:11 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (Londinium @ 15/10/2005, 19:43) | ... Мне необходимо написать именно алгоритм генерации кораблей ... |
Ну так это же чисто алгоритмическая задача.
А перевести такой алгоритм на язык C++ не составит проблем.
Я в прошлый раз задавал Вам вопрос, Вы ответили мне на него, и в этот раз задаю следующий вопрос. Будем производить дискуссию
Алгоритм генерации кораблей этот нужен для изначального создания кораблей или для определения очередного хода компьютера ?
|
|
Londinium |
Отправлено: 16.10.2005, 12:48 |
|
Не зарегистрирован
|
Если Вы можете подсказать алгоритм для обеих случаев — буду благодарен, если для одного из них — тоже буду |
|
olegenty |
Отправлено: 17.10.2005, 06:47 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
я делел так (для автоматической расстановки кораблей):
1. Сканирую поле по горизонтали и по вертикали, получаю список отрезков по вертикали и горизонтали. Отфильтровываю только те, которые большей или нужной длины.
2. Рандомайзом выбираю, вертикально, или горизонтально ставить корабль
3. Рандомайзом выбираю, в какой из отрезков поместить корабль
4. Если отрезок большей, чем требуемая длина, — рандомайзом выбираю смещение, также рандомайзом выбираю край, от которого применять это смещение
5. Ставлю корабль
6. Перехожу к п.1, пока не кончатся корабли.
естественно, для гарантированной расстановки, корабли ставятся от больших к меньшим.
лучшего алгоритма, чем этот — не встречал. остальные были "от балды". этот придумал сам (с).
Отредактировано Konstantine — 17/10/2005, 08:12
|
|
Konstantine |
Отправлено: 17.10.2005, 08:13 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
QUOTE (olegenty @ 17/10/2005, 06:47) | ...также рандомайзом выбираю край, от которого применять это смещение... |
этот шаг лишний....
|
|
olegenty |
Отправлено: 17.10.2005, 09:46 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
хотелось большей рандомайзности — я тоже долго спорил с самим собой, нужен он, или нет. в конце концов оставил.
|
|
Konstantine |
Отправлено: 17.10.2005, 17:11 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
если верить теории вероятности — то ничего ты этим не выиграешь...
хотя и не проигруешь (кроме пары микросекунд )
|
|
olegenty |
Отправлено: 18.10.2005, 07:52 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Ну как тебе сказать... чисто с практической точки зрания... первым встаёт 4-хпалубный корабль. Для него доступны 10 отрезков по горизонтали и 10 по верстикали. Лафа. Да ещё всё 10 клеток в длину. И вот получил я смещение — 1. Ну и получается большущая разница в положении корабля в зависимости от того, с какого края это смещение применить.
|
|
Konstantine |
Отправлено: 18.10.2005, 08:02 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
да, но число-то у тебя генериться от 0 до 6... с равномерным законом распределения...
с той же вероятностью могла бы получиться и 5...
|
|
olegenty |
Отправлено: 18.10.2005, 08:05 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
а оставил я это именно на случай когда получится 1.
|
|
Konstantine |
Отправлено: 18.10.2005, 08:18 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
но всё равно это неправильно...
ты в ВУЗе учился (судя по аватарке — если это твоя фотка — то нет), так вот, там как раз нету случая... там есть вероятность и ничего более...
поверь.
и я ж говорю — грубой ошибки при этом нету — вероятность выпадения каждого события в моём случае — 1/6, а в твоём — 2/12, что одно и то же....
|
|
olegenty |
Отправлено: 18.10.2005, 09:19 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
фотка моя, как раз времён учёбы в вузе (через несколько дней мне будет 27).
я специально подумаю над этим вопросом и освежу в памяти алгоритм. если действительно получится 2/12-х, я соглашусь. но реализация алгоритма может несколько откорректировать "события".
заодно и подумаю, как случайность увеличить.
|
|
Dimon.Ru |
Отправлено: 18.10.2005, 15:15 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
Помню, что делал..... как точно не скажу, но поищу дома в старинных исходниках..... |
|
olegenty |
Отправлено: 19.10.2005, 06:36 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
2 Konstantine — ты меня убедил.
|
|
Konstantine |
Отправлено: 19.10.2005, 08:04 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Отож!
с наступающим тебя!
|
|