dev_hands ([info]dev_hands) wrote,
@ 2009-03-01 05:25:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
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 и кому-то это может оказаться полезным.




(6 comments) - (Post a new comment)


[info]curt_spellman
2009-03-04 10:24 pm UTC (link)
Факин щит.

(Reply to this) (Thread)


[info]dev_hands
2009-03-04 10:51 pm UTC (link)
А вменяемое пояснение комменту будет?

(Reply to this) (Parent)(Thread)


[info]curt_spellman
2009-03-04 11:40 pm UTC (link)
Достало всё, что связано с патентами.

(Reply to this) (Parent)(Thread)


[info]dev_hands
2009-03-05 12:09 am UTC (link)
Это нормальное состояние. Хуже, когда наоборот.

(Reply to this) (Parent)


(Anonymous)
2009-05-19 09:02 am UTC (link)
Большое спасибо за такую обширную статью. Давно уже играю в Konquest с большим удовольствием. Особенно интересно сграть против множества противников на наибольшей карте, когда игра может затянутся часа на два.

(Reply to this)


[info]gvinti
2009-10-21 10:58 am UTC (link)
"let's get ready to rumble..." - это, конечно, конкретная слива. )))

(Reply to this)


(6 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…