Eu quero fazer um jogo simples, semelhante aos livros de escolha seu próprio aventura. O jogador é apresentado com um texto narrativo e escolhe sua ação em uma lista de possibilidades. Isso, por sua vez, leva a um novo texto narrativo, ad infinitum. O único problema é que, dependendo de algumas decisões anteriores, a lista de possibilidades pode ser diferente.
À primeira vista, isso soa como uma carga de instruções if-else, implicando que um mecanismo de regras estaria em vigor. Mas, também me parece uma máquina de estados finitos.
Estou prestes a escrever isso em Java ou talvez Groovy. Atualmente, estou mais interessado nas questões conceituais, ou seja, como isso deve ser feito em um nível amplo (como as pessoas implementam jogos de xadrez ou de cartas, afinal?), Mas alguns conselhos sobre uma biblioteca específica também são bem-vindos.
Obviamente, o "mecanismo de jogo" do título não se refere à detecção de colisões ou outras mecânicas de física / gráficos, mas a lógica que decide quais opções um jogador deu à situação e ao seu estado atual.
Respostas:
Com base no que você disse nos comentários, é assim que eu lidaria com isso:
Implemente a história como uma máquina de estados finitos, com um toque. Cada Estado é uma página da história e cada Transição é um link de uma página para outra. Mas cada transição também tem condições . As condições podem ser nulas; nesse caso, a transição sempre aparece como uma opção disponível; caso contrário, elas devem ser avaliadas quando a página for exibida e, se a avaliação retornar
False
, a transição não será exibida.Existem duas maneiras básicas de implementar as condições. O primeiro é configurar um mecanismo de script completo dentro do jogo e, em seguida, a Condição parece
return player.inventory.contains(GUN)
. Isso é inicialmente mais complicado de configurar, mas permite scripts mais avançados.O segundo é codificar as possíveis condições em algum tipo de objeto. Pode ter um
RequiredItem
campo e, se esse campo tiver um valor, você verifica se a condição foi atendida. Este sistema é mais simples de configurar. Isso limita o que você pode fazer muito mais do que o script faria, mas se você não precisar da flexibilidade que um mecanismo de script forneceria, provavelmente será muito mais fácil de usar.fonte
Acho que a resposta está no título: você precisa de um mecanismo de regras. Se você está planejando escrever seu aplicativo com Java, é claro que pode escrever o seu, como sugeriu Gilbert Le Blanc, OU pode dar uma olhada no Drools , um mecanismo de regras.
Com Drools, ou qualquer outro mecanismo de regras, você pode definir uma situação parametrizada que produz uma lista de ações possíveis. Você pode codificar regras simples que suc tem:
o jogador está na páginaX:
O interessante de Drools é que você pode codificar todas as suas regras em um arquivo do Excel e, no início do jogo, fazer com que o Drools leia esse arquivo. Depois que tudo estiver na memória, você só precisa se preocupar com a interface do usuário.
Aqui estão alguns recursos para ajudá-lo a começar com o Drools:
fonte
A máquina de estado parece uma abordagem segura para modelar seu jogo. Existem muitas bibliotecas para ficções interativas:
http://en.wikipedia.org/wiki/Category:Text_adventure_game_engines
não mencionado na wikipedia, o barbante é muito popular no momento.
fonte
Conceitualmente, seu jogo é direto. No psudeocode, seria algo parecido com isto:
Agora, encadear todo o texto para que ele flua de uma ação para a próxima é a parte mais difícil. Você poderia usar um banco de dados relacional. Você poderia usar uma árvore.
É um pouco difícil ser mais específico sem saber qual idioma do computador você deseja usar. Desde que você mencionou o Java, eu me inclinaria mais para uma estrutura de árvore.
Crie uma classe de resposta que contenha uma resposta e um link para uma classe de texto.
Crie uma classe de texto que contenha o texto de aventura e uma Lista de respostas como instâncias da classe de resposta.
Editado para responder ao comentário:
Você não calcula nada com base neste modelo. Usando seu exemplo, a árvore se pareceria com isso, onde T é o texto e A é uma opção de ação:
Sim, existe alguma duplicação de texto, mas, seguindo a cadeia, ações futuras podem levar em consideração decisões passadas. É uma enorme árvore de decisão.
fonte