| Vinchkovsky |
12.10.2008 15:09
Сообщение
#1
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: 0 |
Здравствуйте
В общем, пишу сапер на Паскале, исключительно сам (впрочем, до этого момента), "от нечего делать", с псевдографикой и без использования приемов ООП. Возникли два вопроса совершенно разного рода. 1) На поле есть такая ситуация (создавал в Paint, правя другое расположение мин, так что если есть какие-то несоответствия - извиняйте. Отдельное извинение за качество, случайно сохранил в .джпг, что мог - то подправил. Ну и английский Допустим, все клетки поля не раскрыты. После нажатия клетки, которая "в фокусе" (выделенная зеленым), как должны открыться клетки? У меня варианта три: Склоняюсь в верхнему справа, а что думаете вы? 2) Как можно гибко менять размеры окна (не в полноэкранном режиме)? Как я понял, с помощью процедуры TextMode гибкости не получить, я прав? Спасибо Сообщение отредактировано: volvo - 18.02.2009 23:03 |
![]() ![]() |
| Lapp |
9.10.2009 3:16
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
как генерируется поле? Спасибо за вопрос, Clerick! Я как-то раньше не задумывался - плевал, пока не заплюю, с проверкой на повторы.. Но это же жутко неэффективно! Вот, задумался - результат тут:const Алгоритм совсем простой - все заполняется за один проход )). И его легко распространить на двумерные массивы. Если что неясно - всегда к вашим услугам, как грится -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
| andriano |
9.10.2009 7:27
Сообщение
#3
|
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Спасибо за вопрос, Clerick! Я как-то раньше не задумывался - плевал, пока не заплюю, с проверкой на повторы.. Но это же жутко неэффективно! Вот, задумался - результат тут...: Есть такая статья, "Оптимизация – ваш злейший враг" http://www.rsdn.ru/article/philosophy/Optimization.xml Там речь немного о другом, но заголовок идеально подходит к данному случаю. В любом случае, если уж мы хотим оптимизировать, то должны сперва разобраться, а где же у нас узкое место. В даном случае, очевидно, наиболее ресурсоемкой операцией является получение очередного ПСЧ. Да и весь цикл повторяется столько раз, сколько ячеек в поле. По всей видимости, данный алгоритм должен заменить тот, в котором "метки" случайно набрасываются в поле с проверкой, не занята ли она уже. Оцеки показывают, что количество проходов цикла и, соответственно, количество обращений к ДПСЧ будет меньше именно в исходном варианте при проценте заполнения не превосходящем примерно 60-67% (точно считать лень), т.е. алгоритм, предлагаемый как более эффективный, на самом деле имеет существенно меньшую эффективность. По краней мере, в большинстве случаев, когда процент заполнения менее упомянутых 60-67%. Если же процент заполнения больше, то задачу можно "перевернуть" и выбрасывать при помощи ДПСЧ "непомеченные" ячейки. Таким образом, исходный алгоритм в слегка откорректированном виде будет ВСЕГДА эфективнее предложенного. Пойдем дальше. Можно ведт придумать алгоритм, в котором вызовов ДПСЧ будет РОВНО столько, сколько нужно помеченных клеток - и ни одной больше. Навскидку могу предложить следующий (правда, не проверял его на качество распределения): Нужно пометить K клеток из N, K < N. 1. В массиве заполняем первые K клеток, а остальные N-K оставляем пустыми. 2. Проходим циклом по первым K клеткам, для каждой находим случайное число в интервале [1..N] и обмениваем содержимое текущей [i] ячейки и ячейки с номером, соответствубщим выпавшему ПСЧ (для определенности - массив нумеруется с 1). |
| Lapp |
9.10.2009 8:33
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Да, согласен. И идея обращения тоже хороша.
Но я хотел подправить свой вариант, и все же это сделаю - а то, он, ко все му прочему, еще и не надежный в таком виде). Так лучше: const -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Vinchkovsky Сапер: теория и практика 12.10.2008 15:09
TarasBer
Допустим, все клетки поля не раскрыты. После нажа... 12.10.2008 20:16
Vinchkovsky
Спасибо, действительно так, удалось подловить так... 12.10.2008 20:54
Clerick Здравствуйте!
У меня курсовая основывается на ... 8.10.2009 22:38
Clerick Спасибо, Lapp! А существует ли какая-либо мате... 10.10.2009 19:37
Lapp Спасибо, [b]Lapp! А существует ли какая-либо м... 11.10.2009 5:38
andriano Уточнение:
В первом приближении мродель реального ... 11.10.2009 9:39
Clerick И снова здравствуйте. Вопрос все по тому же саперу... 16.05.2010 20:34
Стаян Помогите.
Я тоже делаю сапер. И столкнулся с ледую... 24.12.2010 7:40
Lapp Вообще, надо бы приводить хоть кусок кода. Хотя б... 24.12.2010 8:04
Стаян у мени текстовый вариант сапера. Два символьных ма... 24.12.2010 8:48
Lapp Спасибо!Пожалуйста 24.12.2010 12:08
volvo Зациклить генерацию координат до тех пор, пока не ... 24.12.2010 9:07
Стаян да у меня там так и есть. Когда я пробывал делать ... 24.12.2010 9:12
TarasBer > Генерирую рандомом кооринаты, и некоторые коо... 24.12.2010 10:42
volvo Череп не жмет? :dry:
Потенциально (если бояться... 24.12.2010 12:02
TarasBer > Череп не жмет?
ОЛОЛО
> Потенциально (есл... 24.12.2010 12:14
andriano Думаю самый простой и достаточно эффективный алгор... 24.12.2010 22:43
Lapp Думаю самый простой и достаточно эффективный алгор... 25.12.2010 4:19
-TarasBer-
1. Первое действие абсолютно излишне; ничто не ме... 25.12.2010 14:46
andriano
1. Первое действие абсолютно излишне; ничто не ме... 25.12.2010 16:01
Lapp Насчёт излишнести 1 действия я не понял. Приведи к... 26.12.2010 5:59
Гость
Вот это круто. Просить меня привести код, в то в... 26.12.2010 13:31
-TarasBer- Забыл имя вписать.
Оказывается, отсутствие имени н... 26.12.2010 13:32![]() ![]() |
|
Текстовая версия | 8.12.2025 8:43 |