|
|
| Результаты опроса: Можно ли построить беспроигрышный алгоритм для игры "Сапер"? | |||
| Да. |
|
9 | 20.45% |
| Нет. |
|
20 | 45.45% |
| Зависит от отношения количества бомб к количеству клеток поля. |
|
15 | 34.09% |
| Голосовавшие: 44. Вы ещё не голосовали в этом опросе | |||
|
|
Рейтинг 4.67/168:
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
Сапер на Delphi13.08.2009, 22:00. Показов 32347. Ответов 127
Метки нет (Все метки)
1
|
|
| 13.08.2009, 22:00 | |
|
Ответы с готовыми решениями:
127
Сапер Сапер Сапер |
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
| 15.08.2009, 20:01 [ТС] | |||||||||||
|
Так я ж пытаюсь новое сделать)
Добавлено через 4 минуты 12 секунд Кстати надо звуки найти. Добавлено через 21 час 56 минут 27 секунд Ребята помогите разобраться с процедурой Open(). Я как можно лучше заполнил программу комментариями, чтобы понятно было, что где происходит. Там проблема такая, что если строки
А если оставить в коментариях, то открываютяс все клетки без бомб((((( Вот код. Там вроде все ясно что к чему. А ошибку не найду(
0
|
|||||||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 15.08.2009, 20:04 [ТС] | |
|
Вот архивчик. Кстати это можно рассматривать как первую демку)7.rar
0
|
|
|
Почетный модератор
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
|
|
| 15.08.2009, 20:10 | |
|
Игры пока никакой нет, да и правая клавиша не задействована.
0
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 15.08.2009, 20:16 [ТС] | |
|
Да. Но если даже первые клетки как надо не открывает, то смысл двигаться дальше) По логике, ели применять эту рекурсивную процедуру, то она откроет ВСЕ клетки без бомб, так как она будет открывать вокруг КАЖДОЙ клетки, все клетки без бомб, а зачем нам такое? Может там не рекурсией?
0
|
|
|
Человек
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
|
|
| 15.08.2009, 21:00 | |
|
2 galileopro
Там 100% рекурсия. Нужно просто поставить больше мин, и ты увидеш результат.
1
|
|
|
Почетный модератор
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
|
|
| 15.08.2009, 21:09 | |
|
Вот упрощенный вариант без справки, абоута и еще кое-что убрал. Попробуйте все же разобраться в алгоритме, иначе Вы не напишете свою игру. Понажимайте поля, посмотрите все варианты.
Особо процедуру Open. При ее рекурсивном вызове сразу идет проверка на пустая клетка или нет, и все клетки не откроет. Кроме того вокруг поля предусмотрен "забор" из клеток со значением -3, край поля, тоже надо чтоб не писать лишние проверки.
0
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 15.08.2009, 21:14 [ТС] | |
|
А вот оно что. Там забор, а как он вычисляется? Ладно щас посмотрю
0
|
|
|
Человек
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
|
|
| 15.08.2009, 21:18 | |
|
Вот мой сапер.
Может не лучший по оптимизации кода и красоте, но может пригодица
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 16.08.2009, 22:14 [ТС] | |
|
Вот я внимательно почитал єту программу, и не могу понять одной вещи: Єта рекурсивна процедура работает по такому принципу:
1) открівает текущую тоочку, 2) если в ней нет мині, то открівает все точки без мин вокруг текущей 3) Вокруг каждой из текущих точек тоже начинают откріваться все без бомб по тому же принципу 4) Так рекурсия продолжается пока не достигается забор из значений -3 вокруг игрового поля. Так вот я уже сколько анализировал єто, и віходит, что так, постепенно откроются все точки без бомб. Она же останавливается только на краю поля и все. Но на деле открывается определенное к-во точек, никак не все. Вот почему не пойму.
0
|
|
|
Почетный модератор
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
|
||
| 16.08.2009, 22:18 | ||
0
|
||
|
Человек
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
|
|
| 17.08.2009, 12:45 | |
|
Puporev прав.
Границей для етого алгоритма есть ячейка с цифрой.
0
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 17.08.2009, 13:16 [ТС] | |
|
Либо край поля
Добавлено через 29 минут 52 секунды Вот вроде работает. Плиз кто-нибудь потестите, а то я проверял, но я ж не опытный в эотм деле(создании игр), всяких там особых ситуаций не знаю. И еще: почему у меня, если форму свернуть, а потом развернуть, то все пропадает? И как это исправить?
0
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 17.08.2009, 13:19 [ТС] | ||||||
0
|
||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 17.08.2009, 13:20 [ТС] | |
|
Типа канвас перерисовывается? При сворачивании\разворачивании.
0
|
|
|
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
|
|
| 17.08.2009, 13:41 | |
|
из какой-то книги...
Вы создали неплохое приложение для просмотра графических файлов. Но теперь давайте попробуем увидеть его крупный недостаток. Не закрывая своего приложения, перейдите в какую-нибудь другую программу, например, вернитесь в Delphi. Затем, ничего там не делая, опять перейдите в свое выполняющееся приложение. Если окно программы, в которую вы уходили, целиком перекрыло окно вашего приложения, то вернувшись в него вы увидите, что картинка в окне исчезла. Если же окно вашего приложения перекрывалось только частично, то вернувшись в свое приложение вы, возможно, увидите результат, подобный представленному на рис. 4.2 б.
Вы видите, что если окно какого-то другого приложения перекрывает на время окно вашего приложения, то изображение, нарисованное на канве формы, портится. Посмотрим, как можно устранить этот недостаток. Если окно было перекрыто и изображение испортилось, операционная система сообщает приложению, что в окружении что-то изменилось и что приложение должно предпринять соответствующие действия. Как только требуется обновление окна, для него генерируется событие OnPaint. В обработчике этого события (в нашем случае события формы) нужно перерисовать изображение. Перерисовка может производиться разными способами в зависимости от приложения. В нашем примере можно было бы вынести объявление переменной BitMap (оператор var BitMap: TBitMap) за пределы приведенной выше процедуры, т.е. сделать эту переменную глобальной, разместив непосредственно в разделе implementation. Оператор BitMap.Free можно было бы перенести в обработчик события формы OnDestroy, происходящего в момент закрытия приложения. Тогда в течение всего времени выполнения вашего приложения вы будете иметь копию картинки в компоненте BitMap и вам достаточно ввести в обработчик события OnPaint формы всего один оператор: Canvas.Draw(10, 10, BitMap); Сделайте это, и увидите, что изображение на форме не портится при любых перекрытиях окон. Помимо рассмотренного метода Draw канва имеет еще метод копирования CopyRect: procedure CopyRect(Dest: TRect; Canvas: TCanvas; Source: TRect); Метод копирует указанную параметром Source область изображения в канве источника изображения Canvas в указанную параметром Dest область данной канвы. Тип TRect, характеризующий прямоугольные области Source и Dest, уже описывался в разделе 3.2. Например, оператор Canvas.CopyRect(MyRect2, Bitmap.Canvas, MyRect1); копирует на канву формы в область MyRect2 изображение из области MyRect1 канвы компонента Bitmap. Копирование методом CopyRect производится в режиме, установленном свойством CopyMode. По умолчанию это свойство имеет значение cmSrcCopy, что означает просто замену изображения, содержащегося ранее в области Dest, на копируемое изображение. Другие возможные значения CopyMode позволяют комбинировать изображения, но их рассмотрение выходит за рамки данной книги. и естче...
4.3 Компоненты Image и PaintBox
Компоненты Image и PaintBox представляют собой некоторую ограниченную поверхность с канвой, на которую можно заносить изображения, как это описано в разделе 4.2. При этом компонент PaintBox, собственно говоря, не дает ничего нового по сравнению с рисованием на канве формы. Рисование на PaintBox вместо формы не имеет никаких преимуществ, кроме, может быть, некоторого облегчения в расположении одного или нескольких рисунков в площади окна. Компонент Image много богаче по своим возможностям и удобнее, чем PaintBox. Даже при использовании описанных в разделе 4.2 приемов рисования на канве компонент Image имеет существенное преимущество: в нем не приходится думать о перерисовке изображения, испорченного из-за перекрытия данного окна другими. Все, связанное с обработкой событий OnPaint, рассмотренных в разделе 4.2, в Image осуществляется автоматически. Кроме того с помощью Image проще, чем при непосредственном рисовании на канве формы, расположить в окне приложения несколько изображений и управлять ими. При этом отпадает необходимость сложных и нудных расчетов координат канвы формы, обеспечивающих требуемое взаимное расположение изображений, т.е. в полной мере проявляются преимущества визуального программирования. Так что, вероятно, во всех случаях лучше работать с канвой Image, чем с канвой формы.
0
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 17.08.2009, 13:47 [ТС] | ||||||
|
А как в
0
|
||||||
|
Почетный модератор
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
|
|||||||
| 17.08.2009, 13:51 | |||||||
Или попробуйте не на канве формы рисовать а в procedure Form1Paint(Sender: TObject); как в предложенной мной программе.
0
|
|||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 17.08.2009, 14:17 [ТС] | ||||||
|
Спасибо. просто я когда-то пятнашки делал, так там все на канве рисовалось, и вроде как-то из положения я вышел(всмысле перерисовки).
Добавлено через 19 минут 55 секунд Вот придумал так, но не работает. Может кто скажет почему?
0
|
||||||
|
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
|
|
| 17.08.2009, 14:32 | |
|
galileopro, рисуйте на имедже и не морочте себе голову) канвас тот же но мороки меньше)
0
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 17.08.2009, 14:56 [ТС] | ||||||
|
Спасиибо. Теперь все окей) Просто хотелось повыделываться и сделать что-то непохоже на предыдущее. А как мне сделать чтобы первая клетка, на которую пользователь нажимает была без бомбы?
вот мой код генерации
0
|
||||||
| 17.08.2009, 14:56 | |
|
Сапер Сапер Сапер на С++ Сапер на С++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|