M
M
Mercury132015-12-05 01:51:57
Java
Mercury13, 2015-12-05 01:51:57

How to establish decision points in a board game?

Hobby project, board game, written in Java. While I use naked AWT, with the expectation of transferring to Android. I will write using the example of preference, although I took the game more complicated and there are about thirty decision points there. The abbreviation "TPR" denotes the decision point.

пока пуля не закрыта
  раздать карты
  пока все не спасовали
    найди следующего игрока  
    ТПР: заказ в торговле?
  определи выигравшего торговлю
  если такового нет
    [распасовку опущу]
  иначе   // игра на взятки или мизер
    вытяни прикуп
    ТПР: заказ и снос?
    если игра вистуется
      для остальных
        ТПР: пас/вист?
      если возможны полвиста
        ТПР: полвиста?
    пока у игроков остались карты
      определить, кто первым ходит
      в порядке хода
        ТПР: чем ходить?
      определить, чья взятка
    подсчитать очки

How to inject this code into the program workflow?
OPTION 1. The second cycle of message processing.
As soon as we want to play, we run the above code from an event handler, and we are primarily interested in decision points (callbacks).
// Точка принятия решения (callback)
если (принимает решение ИИ)
  прокрутить ИИ
  вызвать сцену, которая демонстрирует, как ИИ поступил
  вызвать дополнительный цикл обработки сообщений
  преобразовать результат работы ИИ в аргументы callback’а
иначе
  вызвать нужную сцену
  вызвать дополнительный цикл обработки сообщений
  преобразовать результат работы сцены в аргументы callback’а

Advantages: The code is easy to understand.
Drawback: Many window frameworks don't provide access to message loops.
OPTION 2. State machine. The game rules loop is converted into a state machine.
алг прокрутитьИгру
  автомат.пуск
  если принимает решение ИИ
     прокрутить ИИ (большой веер callback’ов в зависимости от того, в какой ТПР остановились)
     записать его решение в автомат
     сменить сцену на демонстрирующую решение автомата
  иначе
     сменить сцену на принятие решения человеком

In each of the decision-making scenes, there is a record of information in the machine and a call to the function to scroll the Game.
Advantages: no system requirements. The simplest save/load.
Disadvantage: the machine is such a hell. It is extremely difficult to formalize what is required from a particular decision point.
OPTION 3. Coroutines. The game loop is normal.
// Точка принятия решения (callback)
если (принимает решение ИИ)
  прокрутить ИИ
  вызвать сцену, которая демонстрирует, как ИИ поступил
  уступить
  преобразовать результат работы ИИ в аргументы callback’а
иначе
  вызвать нужную сцену
  уступить
  преобразовать результат работы сцены в аргументы callback’а

Somewhere in the scenes of the game there is a command to "yield".
Advantages: again, everything is simple.
Drawback: Where did you see coroutines in Java?
So far I have a finite state machine, but I don’t like the solution at all. Maybe you can suggest some other options on how to better implement the game so that it is convenient to hang on window frameworks, write AI and network? Preferably without extra threads.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
V
Vasilij Aleksashin, 2015-12-10
@TerraMorf

It is necessary to look towards OOP, instead of procedures if you use Java.
Every solution should use object

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question