¿Cómo implementar un motor de juego por turnos?

17

Imaginemos un juego como Heroes of Might and Magic, o Master of Orion, o tu juego por turnos de elección. ¿Cuál es la lógica del juego detrás de hacer el próximo turno? ¿Hay materiales o libros para leer sobre el tema? Para ser específicos, imaginemos el bucle del juego:

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

Todos los que se llaman dicen 60 veces por segundo. ¿Pero cómo por turno entra aquí? Me imagino que en gameLogic () hay una función como endTurn () que ocurre cuando un jugador hace clic en ese botón, pero ¿cómo lo manejo todo? Necesito ideas

Dvole
fuente

Respuestas:

21

Un juego por turnos será gobernado por una máquina de estado . Básicamente, diseñaría una serie de estados que pueden ocurrir en un orden lógico.

En un nivel alto, el turno de un jugador podría ser el comienzo de un nuevo estado, seguido de todas las acciones posibles que se permiten durante ese turno.

Por ejemplo

  • Estado - cambiar jugador
    • ahora es el turno del jugador 1
  • Acciones permitidas
    • ataque
      • selecciona enemigo para atacar
    • defender
      • seleccione unidad para defender
    • mover unidad
      • seleccione unidad para mover
      • verificar para garantizar el movimiento está permitido
    • etc.

Obviamente, esto se disparará bastante rápido, ya que solo he bosquejado un plan extremadamente limitado. Tener una buena comprensión de los posibles estados desde el principio significará que debe estar en una buena posición para implementar. Me gustaría enfatizar que esbozar exactamente cómo quieres que se ejecute el juego ... un buen juego por turnos requiere mucha planificación de la OMI.

El e
fuente
Un proyecto mío bastante antiguo que fue un intento de desarrollo de 3 meses en Final Fantasy Tactics :) Utiliza una máquina de estado (algunas de ellas en realidad) como se describe anteriormente. sourceforge.net/projects/bpfat
James
Oye, ¿qué hay de Game Engine para la estrategia por turnos? ¿Podrías aconsejarme algo? Puede ser irreal motor podría caber?
Rantiev
A cada uno lo suyo. Si te sientes cómodo con el motor Unreal, no hay nada de malo en eso. Solo depende de qué mecánica quieres aprovechar. Una búsqueda rápida indica que existe un kit de herramientas actual para el motor Unreal para ayudar a crear juegos de estrategia por turnos, aunque no es gratis.
the_e
3

Recientemente he creado un juego de estrategia basado en turnos similar a Master of Orion (es solo un jugador en este momento, multijugador sería un poco más complejo, pero una idea similar), así es como se ve mi lógica de función endTurn (en mi clase de controlador de juego principal):

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

La función de turno final de mi jugador realizará funciones específicas para ese jugador que no se ve afectada por el orden que tiene lugar entre los jugadores:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

En su caso, estas funciones devuelven mensajes de estado y / o activan eventos para que la GUI pueda mostrar lo que sucedió durante el turno o informar al jugador que una computadora fue destruida, etc.

Matt Palmerlee
fuente
¿podría proporcionar el código fuente solo para verificar? Sería de gran ayuda. Solo con fines educativos.
Dvole
@Dvole Actualmente estoy trabajando para convertir el código de Silverlight / C # a JavaScript usando la etiqueta de lienzo HTML5. Una vez que termine, planeo abrir el código fuente y en ese momento son bienvenidos para ver exactamente cómo he implementado esta función. Si ayuda a obtener contexto, puedes jugar mi juego de Estrategia Espacial aquí: Astriarca - Gobernante de las estrellas
Matt Palmerlee
2
@Dvole Me ha llevado bastante tiempo, pero acabo de abrir la versión Silverlight de Astriarch. Si todavía está interesado, puede descargar el código fuente de github aquí: github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt Palmerlee