| dev_hands ( @ 2009-03-01 05:25:00 |
| Entry tags: | games |
Konquest
Есть замечательная игра из комплекта kde-games: konquest.
[Если вам не интересна сама игра - сразу переходите к пункту номер 6 - он может оказаться интересным.]
Рассматривается пакет kde4-konquest из kde 4.2 в OpenSUSE 11.1. Только ее мало кто любит. Скорее всего даже сами разработчики. Так как нет сетевого режима, редактора карт и в документации не отображены особенности реализации, которые будут оказывать сильное влияние на вашу стратегию.
Я все-таки взял в руки vim, ctags и cscope и почитал как оно внутри устроено.
1) Отправка флота на свою планету.
Как известно любому игроку в konquest, каждая планета имеет характеристику "мощь кораблей". Можно отправить с "сильной" планеты флот на "слабую", а потом с нее атаковать противника. В окне "флоты" весь флот имеет мощь той планеты, с которой был отправлен. Но у меня была надежда, что корабли, произведенные на "сильной" планете свою мощь не теряли - в документации на этот счет я ничего не нашел. Эта надежда была разрушена. На самом деле все корабли отправленные с планеты X (или находящиеся на ней) в сражениях имеют мощь, равную мощи планеты. Если они прибудут на другую планету (как вариант завоюют недружественную) - их мощь изменится.
Если затраты на транспортировку не велики - выгоднее слабые корабли отправлять на ближайшую сильную планету, а уже с нее атаковать. Или просто не собирать флот на ближайшей к противнику планете, а атаковать несколькими флотами.
2) Миф номер 2: отдаленные планеты сильны. Когда я посылал минимальные флоты на отдаленные нейтральные планеты - они часто терпели неудачу. Я полагал, что корабли в полете ломаются и до планеты долетает только часть флота. Так же была теория, не подтвержденная практикой, что отдаленные планеты сильнее тех, что находятся в скоплениях.
Мощь и производительность планет не зависит от их местоположения - это произвольные величины, определяемые при создании карты. Кроме тех, что являются homeworld игроков - там эти величины заданы константами (статически прописаны в коде), которые вы и наблюдаете каждый раз на первом ходе.
Сила нейтральных планет в том, что каждый новый ход им добавляется один корабль. Изначальный флот на нейтральной планете равен ее производительности. Если вам было достаточно 20-30 кораблей для завоевания ближайших планет, то такого флота будет недостаточно для завоевания отдаленных планет ходу этак к десятому.
3) Так же у меня была теория, связанная со следующей ситуацией:
Я послал флот для завоевания планеты. Флот потерпел неудачу. Я послал еще один - после завоевания планеты там количество кораблей оказалось больше моего первоначального флота.
Теория была в том, что "наши" не только разбили противники, но и взяли пленных.
Ответ таков: сначала происходят сражения и прибытия пополнений с других планет, а уже потом планеты производят для своего текущего хозяина (который мог смениться после сражения) новые корабли.
4) Порядок сражений или прибытия подкреплений: сначала выполняется для 1ого игрока, потом для второго и так далее. Понятнее на примере: вы игрок номер 4. На ходе 26 на вашу планету должно прибыть подкрепление с другой вашей планеты и недружественный флот игрока номер 3. Номер игрока 3 меньше - значит сначала нападет его флот (пусть ему удалось завоевать планету), а затем прибудет ваше подкрепление и попытается ее отбить. Новые боевые единицы с этого хода достанутся окончательному хозяину планеты (пункт 3).
Если вы игрок номер <последний> и вы в один и тот же ход с вашими противниками пребываете на какую-то планету - вам придется биться только с победителем. Если вы первый - со всеми флотами, претендующими на планету по очереди.
5) Мощь кораблей на самом деле означает вероятность. Бросается кубик с континумм граней, показывающий вещественное число от 0 до 1 - если кубик показал число ниже мощи вашего корабля - вы сбили один корабль противника. Потом тоже самое повторяется для вашего оппонента. До тех пор, пока у одного из вас не останется кораблей.
То есть на картах побольше можно оценивать свой флот как произведение количества кораблей на их мощь. На маленьких картах это подводит. Вероятность - сука бессердечная.
6) По поводу нарушения патентов в свободном ПО. Обнаружил, что konquest все-таки нарушает патенты (помимо очевидных типа патента на односвязные списки - наверняка у нескольких компаний в разных формулировках он есть).
Дело в том, что в файле gamelogic.cc (у меня строка 201) в функции, реализующей сражение флотов противников содержится комментарий: "let's get ready to rumble...".
По данным Википедии фраза запатентована американским мужиком по имени Боб Арум.
Я надеюсь, что я не один играю в konquest и кому-то это может оказаться полезным.