Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 679

•  TDictionary Custom Sort  5 814

•  Fast Watermark Sources  5 613

•  3D Designer  8 238

•  Sik Screen Capture  5 935

•  Patch Maker  6 396

•  Айболит (remote control)  6 389

•  ListBox Drag & Drop  5 246

•  Доска для игры Реверси  94 575

•  Графические эффекты  6 580

•  Рисование по маске  5 657

•  Перетаскивание изображений  4 769

•  Canvas Drawing  5 144

•  Рисование Луны  4 877

•  Поворот изображения  4 424

•  Рисование стержней  3 126

•  Paint on Shape  2 369

•  Генератор кроссвордов  3 238

•  Головоломка Paletto  2 559

•  Теорема Монжа об окружностях  3 337

 

 

Каталог исходников

   
  Базы данных
  Графика & Мультимедиа
  Сети & Интернет
  Система
  Разное
   

 

 

Delphi Sources

Delphi Sources

 




 

ИСХОДНИК ПРОГРАММЫ

 

. : Пасьянс Колья : .

 

Delphi - Цель игры состоит в том, чтобы удалить колышки, перепрыгивая их другим колышком

Исходник программы, показывающей пример создания пасьянса, в котором нужно удалить колышки, перепрыгивая их другим колышком в любом из 4 направлений, пока один колышек не останется в центральном отверстии.

Для решения данной головоломки используется поиск в глубину.

Данная версия выполняет поиск от 250 000 проверяемых позиций в секунду (на моем ноутбуке с частотой 266 МГц) до 750 000 позиций в секунду на новом Celeron с частотой 800 МГц. Самый долгий поиск решения требует около 13 000 000 проверок позиций.

Заметки для программиста

Объект TBoard содержит квадратный массив B позиций на доске поля типа TOccupied со значениями Empty, Occupied или NotAvailable. Потенциальное перемещение считается допустимым, если 1) проверяемый слот занят 2) соседнее отверстие в проверяемом направлении занято и 3) следующая позиция в том же направлении пуста. Из-за этого двойная строка неиспользуемых (NotAvailable) записей массива определяется по всей доске (так что плата определяется как 11 X 11 с только средними 7 позициями в каждом из когда-либо использовавшихся направлений. Когда мы находим колышек, мы всегда можем проверить две позиции слева, справа, сверху и снизу, беспокоясь об исключении «индекс вне допустимого диапазона».

Moves - основная функция, выполняющая поиск. Она рекурсивно вызывает себя после каждого хода, чтобы найти следующий возможный ход. TBoard также содержит Path, который содержит ходы, которые привели нас к текущей позиции на доске. Когда допустимый ход найден, мы добавляем его в Path, корректируем массив колышков, чтобы отразить ход, уменьшаем счетчик колышков и вызываем Moves для проверки следующей позиции. При входе в Moves мы проверяем наличие единственного колышка в центре доски и возвращаем true, если он найден. Если мы проверим все позиции, не найдя допустимого хода, мы вернем false. Если мы возвращаемся после вызова Moves с ложным результатом, мы отменяем только что сделанное перемещение привязки и продолжаем поиск.

Запись перемещения TMove - это динамически размещаемая запись с переменными Frompoint и ToPoint. TMove изначально был объектом, однако ходы могут создаваться и удаляться миллионы раз за один прогон - замена формы объекта записью сокращает время выполнения примерно на 20%.

Просмотры: 1 085
Дата: 07.07.2021, Автор: Gary Darby
Скачивания: 13
Написать сообщение:

 

Скачать (32 Кб)     Регистрация >>


 

Похожие исходники


Пасьянс Четыре линии

 

© 2004-2025 "DS"

Соглашение пользователяКонфиденциальностьПравила обработки cookie       BrokenByte Software