практическое руководство заставляет разность быть похожей на svn разность?

кажется, что это - 2-месячный поток, который я только что заметил теперь, но какого черта. Я разработал и разработал платформу геймплея для коммерческой, сетевой настольной игры прежде. У нас было очень приятное впечатление при работе с ним.

Ваша игра может, вероятно, быть в (близко к) бесконечной сумме состояний из-за перестановок вещей как то, сколько имеет денежный игрок A, сколько имеет денежный игрок B, и и т.д. Поэтому я вполне уверен, Вы хотите избегать конечных автоматов.

идея позади нашей платформы состояла в том, чтобы представить игровое состояние как структуру со всеми полями данных, что вместе, обеспечьте полное игровое состояние (т.е.: если Вы хотели сохранить игру на диск, Вы выписываете ту структуру).

Мы использовали Шаблон "команда" для представления всех допустимых игровых действий, которые мог сделать плеер. Вот было бы действие в качестве примера:

class RollDice : public Action
{
  public:
  RollDice(int player);

  virtual void Apply(GameState& gameState) const; // Apply the action to the gamestate, modifying the gamestate
  virtual bool IsLegal(const GameState& gameState) const; // Returns true if this is a legal action
};

, Таким образом, Вы видите, что, чтобы решить, допустимо ли перемещение, можно создать то действие и затем вызвать его функцию IsLegal, передающую в текущем игровом состоянии. Если это допустимо, и плеер подтверждает действие, можно вызвать Применять функцию для фактического изменения игрового состояния. Путем обеспечения, что код геймплея может только изменить игровое состояние путем создания и представления судебных исков (так, другими словами, Действие:: Подайте заявку семейство методов единственная вещь, которая непосредственно изменяет игровое состояние), затем Вы удостоверяетесь, что Ваше игровое состояние никогда не будет недопустимо. Кроме того, при помощи шаблона "команда", Вы позволяете сериализировать желаемые перемещения своего игрока и отправить их по сети, которая будет выполняться на игровых состояниях другого игрока.

закончил тем, что был один глюк с этой системой, которая, оказалось, имела довольно изящное решение. Иногда действия имели бы две или больше фазы. Например, плеер может приземлиться на свойство в Монополии и должен теперь принять новое решение. Каково игровое состояние между тем, когда плеер кидал кости, и прежде чем они решат купить свойство или нет? Мы управляли такими ситуациями путем показа "члена" Контекста Действия нашего игрового состояния. Контекст действия обычно был бы пустым, указав, что игра в настоящее время не находится ни в каком специальном состоянии. Когда плеер кидает кости, и действие прокрутки игры в кости применяется к игровому состоянию, оно поймет, что плеер приземлился на ненаходящееся в собственности свойство и может создать новый контекст действия "PlayerDecideToPurchaseProperty", который содержит индекс плеера, от которого мы ожидаем решения. К тому времени, когда действие RollDice завершилось, наше игровое состояние представляет это, оно в настоящее время ожидает указанного плеера, чтобы решить, купить ли недвижимость, не. Для метода IsLegal всех других действий теперь легко возвратить false, за исключением "BuyProperty" и исков "PassPropertyPurchaseOpportunity", которые только судебны, когда игровое состояние имеет контекст действия "PlayerDecideToPurchaseProperty".

С помощью контекстов действия, никогда нет единственной точки во время жизни настольной игры, где игровая структура состояния не полностью представляет ТОЧНО, что происходит в игре в то время. Это - очень желательное свойство Вашей системы настольной игры. Это будет он намного легче для Вас написать код, когда можно будет найти все, что Вы когда-либо хотите знать о том, что происходит в игре путем исследования только одной структуры.

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

я надеюсь, что это было кратко и полезно.

18
задан diffnewb 16 October 2009 в 22:12
поделиться

3 ответа

diff -u file1 file2
5
ответ дан 30 November 2019 в 07:23
поделиться

Вам нужен флаг -u.

diff -u file1 file2

Из справочной страницы diff :

   -u  -U NUM  --unified[=NUM]
          Output NUM (default 3) lines of unified context.

Это не точно то же самое (например, нет большого ряда знаков равенства), но он должен делать то, что вы хотите. Ваш пример сверху:

--- file1   2009-10-16 15:14:24.000000000 -0700
+++ file2   2009-10-16 15:14:50.000000000 -0700
@@ -1,7 +1,9 @@
 This
 is
 the
-original
+updated
+and
+awesomer
 file.

-Unf.
+Duh.
27
ответ дан 30 November 2019 в 07:23
поделиться

subversion использует слегка расширенную версию унифицированного формата сравнения. Страница Википедии на Diff объясняет сам формат, а также отмечает отличия от форматов Subversion.

Как уже было сказано, инструмент diff (см. Его справочную страницу для подробностей) использует параметр -u для создания унифицированных различий.

5
ответ дан 30 November 2019 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: