Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Дайте идею (http://forum.oszone.net/showthread.php?t=112189)

DENoszone 24-07-2008 17:39 860190

Дайте идею
 
Вот пишу игру балда поле 5 на 5 ..надо состовлять слова добавляя одну букву..
как осуществить ход компа?=(

Drongo 24-07-2008 21:26 860343

DENoszone,
Цитата:

Цитата DENoszone
как осуществить ход компа?=( »

Сначало нужно сделать словарь слов, к которому программа будет обращаться. Я правильно понял игру?
Код:

| | | | | |
-----------
| |М| | | | // Здесь буква М делает слово Мышка ?
-----------
|в|ы|ш|к|а|
-----------
| | | | | |
-----------
| | | | | |


DENoszone 24-07-2008 21:30 860348

да ...
словарь есть...
загнал его в масив..
сделал ход...
человек с человеком уже можно играть .
а вот с компом...трудная задача=(
не могу придумать алгоритм поиска слова

Drongo 24-07-2008 22:35 860393

DENoszone, Тогда нужно создать массив алфавита, и при ходе компьютера, перебирать по одной букве из массива алфавита подставляя букву из алфавитного массива к слову в массиве или сверять на предмет полученного слова со словарём. Ёлки, пока писал подумал, что слова могут идти и наоборот и ломанно... Запутался, честно говоря, не знаю. Но наверняка нужен ещё алфавитным массив. Мы ведь когда играем в эту игру, мысленно подставляем буквы и потом "видим" полученное слово. И ещё точно скажу, поскольку шаг проверяемого слова равен 1 (еденице) или одной букве, то нужно сделать таблицу шагов.
Код:

  const int row = 5;
  const int column = 5;

  int board[row][column] = { 0 },
        horisontal[2] = { 1, -1 },
        vertical[2] = { -1, 1 };

По принципу, если нужен ход вверх, то по массиву vertical идёт -1, если вниз, то 1, если влево, по массиву horisontal, идёт -1, вправо 1, перебирая полученные варианты. Извините, я дальше не знаю сам. :dont-know

DENoszone 24-07-2008 23:51 860450

вот такие идеи приходят...
но это не дело..
была идея...выписать все слова возможнные и проверить..
но тоже не то...
а про подстановку букв...это убьет все... 3к способов только в начале=)

detrin 25-07-2008 00:30 860479

Ну по сути от любой буквы есть всего 3 продолжения, что уже достаточно неплохо ограничивает кол-во вариантов перебора.
...
Пока писал придумал другой, как мне показалось более удачный алгоритм. Каждое слово массива разбиваем на составляющие. Пример разбития слова "Слово":
сл
сло
слов
1. Все эти частички запоминаем в новый массив.
2. И при переборе сверяем с нашим новым массивом.
3. Если ничего не найдено то берем другую букву,
____________если найдено - сверяем с основным массивом
_________________________если найдено это и есть искомое слово, но продолжаем набирать буквы.
_________________________если не найдено берем другую букву.
Хоть это и подстановка букв, но имхо должно быстро работать, ведь неверные направления будут достаточно быстро отсекаться еще в начале ветвления.

Drongo 25-07-2008 00:34 860484

DENoszone,
Цитата:

Цитата DENoszone
а про подстановку букв...это убьет все... »

Нет, вы не поняли, не перебор по буквам, а например слово вышка перебираем от буквы ышка, начиная с А - Аышка, Бышка, Вышка ... Пышка. и т.д. Если в этом случае слова в словаре нет, то переходим ко второй букве: Ы, к третьей Ш. Как только слово найдено, создаём динамический массив, куда будет найденное слово сохраняться, чтобы потом не перебирать заново все варианты, а брать уже из найденного ранее и сохранённого. Правда как это реализовать я не знаю. :beta:

DENoszone 25-07-2008 08:03 860588

вот это сейчас и буду пытатся делать.


Время: 09:45.

Время: 09:45.
© OSzone.net 2001-