Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > 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 | ||
уважаю творческий подход. С целью увменьшения задержек при работе программы, можно создавать маску поля, где каждый квадрат это цвет, маска создается перед ходом играка пока он думает, после хода меняем маску в двух местах, и накладуем маску выигрышного варианта на маску поля, проверяем суму и делаем вывод. извинити что написал в общих понятих, расписывать долго. выигрыш за счет приминения маски, и за счет простоя компа. |
Автор: Dexter 16.12.2002, 23:22 |
Что перебором я понял. Та фигово в крайних клетках. Нужно будет ахрененную функцию писать (во всяком случае она у меня такая получится). Это для каждой клетки нужно проверять... ща пощитаю... да все поле по-мойму ![]() |
Автор: MuToGeN 17.12.2002, 10:48 | ||
т.е. присчитать все возможные выигрышные комбинации, и по ним сравнивать? только тогда имхо придется вешать просчет маски на отдельный поток, и если просчет не закончен, когда юзер делает ход (может, он ходы быстро делает, а комп медленный), убивать этот поток и просчитывать отдельно для шарика или для строки/столбца/диагоналей |
Автор: AntonSaburov 17.12.2002, 22:58 |
Просчитать, сколько клеток заняты шариками того же цвета, что и перемещенный можно так: - всего существует 8 направлений (вверх-вниз, вправо-влево и две диагонали) - запустить рекурсивно расчет сколько шариков того же цвета идет вдоль этого направления. По сути это одна функция, которая получает координаты шарика и номер направления. В зависимости от направления расчитывается координаты следующего шарика и если он того же цвета - вызвается эта же функция уже для нового шарика. А функция должна вернуть количество шариков. Т.е. что-то типа расчета чисел Фибоначчи или факторияла с помощью рекурсии. |
Автор: December 18.12.2002, 05:04 |
За что люблю форум по алгоритмам: к процедуре решения квадратичного уравнения завсегдатаи примажут теорию графов... ![]() По-моему, если проверять только последний поставленный шарик, то машина потянет даже самую тугодумную процедурку. |
Автор: MuToGeN 18.12.2002, 10:28 |
а если юзверь парралельно с этим пару гигов чего-нибудь RARом упаковать пытается? |
Автор: Step 18.12.2002, 20:08 | ||
можно и так. |
Автор: December 19.12.2002, 06:56 | ||
Тогда и супералгоритм кардинально картину не изменит. Одна прорисовка будет дорого стоить. |
Автор: MuToGeN 19.12.2002, 10:51 | ||
тогда прорисовкой, а точнее наложением спрайтов и блиттингом будет заниматься видюха, которой для этого достаточно получить пару инструкций от твоей программы. да и проблемами архивации она как-то не озадачена... |