Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Lines


Автор: Dexter 15.12.2002, 02:55
Чето взбрело мне в голову игру Lines написать. Думал обломлюсь на поиске пути по которому шарики бегают. Нифига. Обломился еще раньше: на поиске пяти в ряд стоящих шариков одного цвета. Помогите.

Автор: December 15.12.2002, 07:44
Перебираешь шарики.
Для каждого есть восемь направлений. Перебираешь их.
Положительный результат будет только для концевых шариков, но это и удобнее.
В чём проблема-то?

Автор: MuToGeN 15.12.2002, 13:02
что без перебора не обойтись, это понятно, но перебор можно сделать более гуманным по отношению к процессорному времени, т.е. перебирать не каждый шарик на 8 направлений, а строку/столбец/диагональ на наличие линии.
и не каждую строку/столбец/диагональ, а только ту, на которую поставили шарик

Автор: Step 16.12.2002, 21:18
Цитата(MuToGeN @ 15.12.2002, 05:02)
что без перебора не обойтись, это понятно, но перебор можно сделать более гуманным по отношению к процессорному времени, т.е. перебирать не каждый шарик на 8 направлений, а строку/столбец/диагональ на наличие линии.
и не каждую строку/столбец/диагональ, а только ту, на которую поставили шарик

уважаю
творческий подход.

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

Автор: Dexter 16.12.2002, 23:22
Что перебором я понял.
Та фигово в крайних клетках.
Нужно будет ахрененную функцию писать (во всяком случае она у меня такая получится). Это для каждой клетки нужно проверять... ща пощитаю... да все поле по-мойму  :(

Автор: MuToGeN 17.12.2002, 10:48
Цитата(Step @ 16.12.2002, 13:18)
можно создавать маску поля, где каждый квадрат это цвет, маска создается перед ходом играка пока он думает, после хода меняем маску в двух местах, и накладуем маску  выигрышного варианта на маску поля, проверяем суму и делаем вывод.

т.е. присчитать все возможные выигрышные комбинации, и по ним сравнивать?

только тогда имхо придется вешать просчет маски на отдельный поток, и если просчет не закончен, когда юзер делает ход (может, он ходы быстро делает, а комп медленный), убивать этот поток и просчитывать отдельно для шарика или для строки/столбца/диагоналей

Автор: AntonSaburov 17.12.2002, 22:58
Просчитать, сколько клеток заняты шариками того же цвета, что и перемещенный можно так:
- всего существует 8 направлений (вверх-вниз, вправо-влево и две диагонали)
- запустить рекурсивно расчет сколько шариков того же цвета идет вдоль этого направления.
По сути это одна функция, которая получает координаты шарика и номер направления. В зависимости от направления расчитывается координаты следующего шарика и если он того же цвета - вызвается эта же функция уже для нового шарика. А функция должна вернуть количество шариков.
Т.е. что-то типа расчета чисел Фибоначчи или факторияла с помощью рекурсии.

Автор: December 18.12.2002, 05:04
За что люблю форум по алгоритмам: к процедуре решения квадратичного уравнения завсегдатаи примажут теорию графов... :cool
По-моему, если проверять только последний поставленный шарик, то машина потянет даже самую тугодумную процедурку.

Автор: MuToGeN 18.12.2002, 10:28
а если юзверь парралельно с этим пару гигов чего-нибудь RARом упаковать пытается?

Автор: Step 18.12.2002, 20:08
Цитата(MuToGeN @ 17.12.2002, 02:48)
только тогда имхо придется вешать просчет маски на отдельный поток, и если просчет не закончен, когда юзер делает ход (может, он ходы быстро делает, а комп медленный), убивать этот поток и просчитывать отдельно для шарика или для строки/столбца/диагоналей

можно и так.

Автор: December 19.12.2002, 06:56
Цитата(MuToGeN @ 18.12.2002, 01:28)
а если юзверь парралельно с этим пару гигов чего-нибудь RARом упаковать пытается?

Тогда и супералгоритм кардинально картину не изменит. Одна прорисовка будет дорого стоить.

Автор: MuToGeN 19.12.2002, 10:51
Цитата(December @ 18.12.2002, 22:56)
Тогда и супералгоритм кардинально картину не изменит. Одна прорисовка будет дорого стоить.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)