LINUX.ORG.RU
ФорумGames

Автопереход к следующему юниту

 ,


0

1

В двух играх (freeciv и freecol) меня раздражает как сделан автоматический выбор следующего юнита. Игрок выполняет какую-то задумку в одном месте карты, а выбирается следующий юнит с совершенно другого места карты, сбивая контекст размышлений.

Что вы можете про это рассказать и посоветовать (ну, кроме «бросай играть, иди работать»)?

★★★★
Ответ на: комментарий от DumLemming

Играй в пятую циву, чо ты.

Я думаю, что она не опенсорсная, и поэтому оффтопик на этом сайте.

всем подряд

Кроме того, «подряд» - это не самая удачная стратегия. Нужно вести действия против всех врагов одновременно, иначе они излишне развиваются при отсутствии сдерживания.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)

Логично предположить, что изучать идею лучше по java-исходникам (они проще), а реализовывать по си-исходникам (они более совместимые и расширяемые).

исходники freecol - git clone https://git.code.sf.net/p/freecol/git freecol-git

Есть там разные классы, например /src/net/sf/freecol/server/model/ServerUnit.java

Класс ServerUnit это наследник класса Unit, и реализует интерфейс TurnTaker. В конструктор ему передаются объекты классов Game, Location, Player, UnitType, опционально Role.

Есть метод csMove, параметры у него Tile (куда двигаться), Random, ChangeSet. Но нужен не он. Нужно что-то более связанное с игроком, которое отслеживает выбранный юнит. Может оно в классе Player?

Shushundr ★★★★
() автор топика
23 сентября 2024 г.

Я предполагаю, что всё это работает как-то так:

Каждый ход происходит примерно следующее:
на клетках (на которых работают крестьяне и охотники):
1~ Произрастают или добываются ресурсы, в зависимости от типа клетки и бонуса

в городах:
2~ Ресурсы поступают с клеток, контролируемых юнитами этого города
ресурсы попадают на склады города (пропорционально крутизне добытчиков)
3~ Рабочие обрабатывают ресурсы
результаты переработки (продукция) попадает на склады города

По нажатию кнопки «O»

свободно движущиеся юниты (не прикреплённые к городам) располагаются в циклическом буфере
4) если до юнита дошла очередь, то он двигается по плану
5) если плана нет, то управление передаётся игроку, чтобы дал приказ юниту
6) если нажата кнопка «W», то происходит переход к следующему юниту, у коротого есть «очки движения»
7) если нажата кнопка «X», то происходит исключение юнита из циклического буфера
8) если в циклическом буфере нет юнитов, то отображается кнопка «Конец хода».

Надо проверить, так ли это всё есть и найти куски кода, которые это подтверждают.


А как бы я хотел, чтобы оно работало?

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

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)