Помощник по игре в Балду

Предлагается программа-помощник по игре в Балду

Предлагаю программу «Balda prof».

Программа предназначена для подбора слов в игре «Балда».

Написана на C# с использованием .Net Framework.

Поставляется в виде дистрибутива с двоичными данными.

Строит дерево найденный слов (в левой чати программы), по кнопке «Найти».

В правом списке использованные слова.

В центре рабочее поле .

В нижней части алфавит.

Если на найденное слово можно подобрать слово длиннее, то окрашивает в красный.

Если на найденное слово можно подобрать слово короче, то окрашивает в зеленый.

Если на найденное слово можно подобрать слово той же длинны, то окрашивает в синий.

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

Одинарный клик по левому списку показывает букву в рабочем поле (для визуального контроля)

Буквы в поле можно вносить 3 способами:

— с клавиатуры

— мышью (нажав на букву, затем на клетку поля)

— перетаскиванием

 

Словарь содержится в файле RusNoun.txt. Это обычный текстовый файл, слова в нем отсортированы по алфавиту.

Можете редактировать его вручную.

 

Немного истории.

Где-то в 2009-2010 году жена увлеклась игрой в балду. Можно найти на mail.ru. И вот мы собирались 3-4 человека с друзьями и устраивали мозговой штурм. С переменным успехом двигались по турнирой лестнице. Но обнаруживались игроки, подбирающие длинные незнакомые слова. Тогда же родилась мысль найти словарь и искать в нем слова. Нашли словарь, я написал мини программу на Visual Basic, работающую с регулярными выражениями. Но это был полуавтомат, он не мог проверить все комбинации, и к тому же поиск запускался вручную. Тогда же задался целью написать программу, которя анализирует поле и ищет куда добавить букву и затем осуществляет поиск в словаре.

На первом этапе была сделана консольная программа на C#, которая в тестовом виде выдавала все найденные слова, отсортированные по убыванию. Методом проб и ошибок и каждодневного тестирования/игры я устранял ошибки в алгоритме. В итоге получилось что-то минимально рабочее. Но существовали недостатки:

Во — первых, рассчет шел ужасно долго, по несколько минут… Проблему удалось решить индексированием словаря. Сделал 2-мерный массив индексов по первым 2-м буквам. В дальнейшем разбил алгоритм поиска по 3-м ситуациям. а) обе буквы известны, б)изветсна первая, в) известна вторая. Это тоже ускорило работу.

Во — вторых, не анализировались уже использованные слова и шаблоны.

В общем, назрела необходимость озаботиться интерфейсом. И я выпустил первую версию — Balda Game.

Она была на .Net Framework 2.0. По сути элементы интерфейса перекочевали и в последний релиз, который и выкладываю.

В ней был массив использованных слов и другие нововведения. Так день за днем добавлял новые опции. На каком-то этапе добавил ограничение по длинне слов, так как 3-х буквенные считались слишком долго. Переработал алгоритм, если слово < макс. длинны, то не рассматриваю.

Продолжая играть и выигрывать большинство партий дошел до определенного предела. Выяснилось, что соперник вероятно использует 2-х уровневый массив слов. Подсмотрел на каком-то сайте скрины балды с раскраской и сделал также. Теперь на первом этапе находит слова, а затем по каждому слову строит второй уровень.

Этот путь был тернист, нужно было восстанавливать первоначальное поле. Кроме того хранить и восстанавливать использованные и отброшенные слова и шаблоны. Но я его преодолел. Параллельно искал наиболее полный словарь существительных в именительном падеже, так как существующие словари были или не полными, или содержали мусорные слова.

Далее озаботился интерфейсом. Сначала работал только с клавиатурой, сделал обработчик нажатий кнопки и перемещение по ячейкам. Затем со временем добавил мышь и в финале перетаскивание (drag & drop). В заключении сделал подсветку подставляемой буквы, что потребовало переделки кода. Ведь раньше я игнорировал расположение букв при построении второго уровня, а это было ошибкой. В итоге работы программа строит дерево достоверно с учетом ситуации и положения добовляемой буквы на первом уровне.

Дойдя до стадии рабочей программы, я охладел к проекту. Так как основную задачу решил. Я оказался в первой сотне игроков. Далее выигрывать было сложно, так как у соперника был более полный и адаптированный к игре словарь. Бывало, что игра на сервере не принимала слова в моем словаре, и наоборот, их словарь содержал слова, отсутствующие в моем. Кроме того, вероятно на рынке есть программы использующие более прогрессивный метод расчета, строящие дерево прогнозирования, или «думающие» на три — четыре хода вперед. Мне это не позволяли вычислительные мощности и пробелы в знаниях. Так или иначе в игре со средними противниками помощник вам обеспечит преимущество.

4 Comments

  1. _Ramzes

    http://infostart.ru/public/59218/

    Чем твое лучше этого?

    Reply
  2. polakoff

    to: _Ramzes.

    Отличий много.

    На первый взгляд у него упрощенный вариант игры. Он сам написал, что его программа может добавлять букву в начало или в конец. Моя же анализирует все поле, то есть последовательно перебирает все 25 ячеек поля и ищет куда можно вставить букву. Таким образом создается массив шаблонов, который проверяется словарем. Те шаблоны, по которым найдены слова остаются, остальные отбрасываются.

    Второе важное отличие, что моя программа строит дерево найденных слов.

    Третье отличие, что она написана на C# с .Net Framework 2.0

    Reply
  3. mikhailovaew

    откуда словарик в обработке? и что за слово «пором»? вроде в современном русском такого нет

    Reply
  4. polakoff

    Где-то скачал. Сейчас уже не помню. Единственный бесплатный словарь в формате txt, который нашел. Но, к сожалению, в нем попадаются «мусорные» слова которые не принимает сервер балды. Если найдете что-то лучше то можно заменить. Единственно нужно отсортировать слова.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *