![]() |
Оптимизация алгоритма игры Реверси
Здравствуйте, пишу игру Реверси с возможностью игры против компьютера. Возникла след. сложность в алгоритме оценки возможных вариантов хода : необходимо вычислить ценность текущего хода в зависимости от того, какие ячейки занимают белые и черные фишки. Текущий ход записан как Vector.<int>(64), в котором 0 - пустая ячейка, 1 - белая фишка и 2 - черная фишка. Есть еще один Vector.<int>(64) - который хранит ценность каждой ячейки. Оценка происходит при помощи след. метода
Код AS3:
Всем спасибо! |
А этот метод долго отрабатывает?
Если не нравится именно switch, то можно сделать фишки 1 - белые, а черные не 2, а -1, тогда switch заменится на eval += grid[i] * _cost[i] Но, возможно, я не совсем разобрался в алгоритме: зачем в метод передавать Id1 и id2, если они всегда одинаковы, и почему оценка именно так складывается? |
Цитата:
Цитата:
Цитата:
Не совсем понял вопроса о подсчете оценки, но опишу ее логику : В игре угловые клетки самые важные, т.к. их нельзя отобрать у противника, соседние с ними клетки наоборот повышают вероятность захвата углов противника и т.д. Соотв. я дал каждой клетке свой вес, после чего я к весу хода добавляю вес клетки если там мои фишки и отнимаю вес клетки если там фишка противника. Так получаю вес хода, чтобы его можно было сравнить с остальными ходами. |
Цитата:
Добавлено через 18 минут 60К ходов в секунду будет достаточно всем и каждому © имхо.Или планируется параллельная игра со всем китаем?) |
Цитата:
|
Это другое дело.Особо оптимизировать тут нечего.Единственное я бы попробовал свич заменить на
Код AS3:
|
Да в этой функции ничего особо не улучшить... это линейное время, и суммировать массив чисел за меньше чем линейное время не получится, ну не во Флеше, так это точно. Может можно попытаться поэксперементировать с байткодом, удалить какие-нибудь проверки и т.д. Но принципиальной разницы в производительности теоретически добиться нельзя.
Если прям такая жестокая необходимость ускорить: можно посмотреть на Хекс и попытаться воспользоваться его АПИ для быстрого доступа к памяти (с его помощю можно снизить затраты на доступ к элементам массива). Или можно попробовать шейдеры: там, как правило, возможно добиться параллельного выполнения (и тогда суммирование массива чисел можно сделать за логарифмическое время, если чисел не очень много. |
| Часовой пояс GMT +4, время: 06:20. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.