Evitando estados impossíveis em um jogo de aventura

15

Estou pensando em criar um estilo de jogo de aventura bastante complexo, mas escolha uma técnica ou método para ajudar no design do jogo.

Será uma história com várias ramificações e, às vezes, as ramificações se dobrarão, e suas principais ações serão lembradas e os itens serão coletados. Por exemplo, se o jogador vai ao pântano e à floresta antes de ir ao castelo, ele pega um osso de dinossauro, mata um unicórnio e cresce um braço extra. Se um jogador chega ao castelo através das cavernas e da cripta, ele pegou uma bicicleta e um cheiro estranho. Agora, ao desenvolver quebra-cabeças para o castelo, não quero criar uma situação em que duas impossibilidades exijam, por exemplo - um braço extra e o cheiro são necessários para matar um ogro.

Além de documentar os eventos e itens com muito cuidado, existe um processo, uma técnica que posso usar em uma planilha ou um software que possa me ajudar?

DanDan
fonte

Respostas:

11

Parece um problema de gráfico direcionado.

Comece do início, para cada ramificação da história registre os itens que você possui atualmente e ramifique o gráfico. A partir daí, siga cada ramificação e faça o mesmo. Quando chegar a outra ramificação, registre seus itens atuais e ramifique o gráfico. Isso terminará com um gráfico bastante denso, com muitos nós duplicados (mas cada nó chegou de uma sequência gráfica diferente), mas você não deve obter loops.

No final, você deve ter um gráfico de todos os itens que você pode ter em qualquer ponto da história e de todas as maneiras possíveis para chegar lá.

Agora, com seu gráfico completo: para cada um dos seus problemas que requerem itens X + Y + Z, localize todos os nós com esse problema e verifique se os itens registrados podem satisfazer essa condição. Se houver uma falha, basta voltar ao gráfico para encontrar todas as decisões que o levaram até lá sem os itens adequados para resolver esse problema.

Com alguma sorte, seu design original já está definido dessa maneira, pelo menos conceitualmente, portanto o código deve refletir a realidade e ser fácil de verificar.

O tempo de processamento das pesquisas de gráficos pode ficar um pouco pesado se você estiver criando um jogo grande, então crie isso como um utilitário que pode demorar um pouco para ser executado e produza resultados em um relatório para você usar.

Patrick Hughes
fonte
isso significa desenvolver uma ferramenta. Vou colocar isso como último recurso.
Ali1S232 24/07
6
A ferramenta será seu próprio cérebro, manutenção de registros e capacidade de memória ou será algo automatizado que não se cansará e perderá uma falha =) Acho que depende do tamanho do seu jogo e se você Crie outro a partir do mesmo mecanismo, para decidir se o tempo gasto vale a pena ou não.
Patrick Hughes
A melhor maneira de fazer isso pode ser criar uma árvore de dependência de cima para baixo (voltar para trás) e, se dois itens na árvore compartilharem a mesma dependência (e a dependência exigir uma escolha entre eles), você terá uma violação.
Deceleratedcaviar
0

isso pode parecer uma resposta estranha, mas você pode facilmente verificar eventos impossíveis usando compiladores (por exemplo, c ++)! deixe-me explicar como: você tem exatamente um arquivo de cabeçalho para cada estágio. e o jogo termina em main.cpparquivo. sempre que você pode ir de stage apara stage b, você só tem que incluir o arquivo relacionar com stage ano stage b. sempre que você obtém um novo item em um estágio, apenas define um valor para esse item. sempre que você perder ou usar um item, basta desmarcá-lo. no final de cada estágio, basta usar todos os valores definidos para os itens necessários nesse estágio. Aqui está um exemplo de como usar isso no código:

ah

#define itemA

bh

#include <a.h>
#undef itemA
#define itemB

CH

#include <a.h>

itemA;

#include <b.h>

itemB;

main.cpp

#include <c.h>
int main()
{
}

embora possa precisar de algumas alterações antes de realmente ser usado, mas acho que você pode criar um código como este. você também pode usar herança e classes para cada estágio, em vez da abordagem que sugeri. Além disso, acho que você deve desenvolver uma ferramenta.

Ali1S232
fonte
2
é um verdadeiro mau uso do compilador!
24711 Ali1S232
3
É interessante, mas seria bastante frágil e só funcionaria se eu tivesse uma classe por objeto / evento / seção na minha história. Eu estava indo para mais de uma abordagem orientada a dados, lendo xml ou algo assim. Agradeço-te pela tua sugestão mesmo assim.
31411 DanDan
3
Não é uma boa idéia forçar uma recompilação toda vez que uma missão é alterada, além disso, isso não permite atualizações de dados para os usuários finais (DLC, por exemplo), ou se executadas em um servidor e aplicando correções sem forçar downloads.
Patrick Hughes
2
esse exemplo de código não está relacionado ao código que será lançado, e esse código realmente não faz nada. é apenas verificar se o seu enredo e missões são válidos ou não. (se não é você, é só pegar um erro de compilação, caso contrário, você pode implementar essa árvore busca em seu jogo!
Ali1S232
Oh, entendi, eu interpretei mal. Suspeito que uma pessoa possa gastar mais tempo garantindo que esse código reflita os dados reais do que seria salvo ao depurar erros lógicos da missão, que é uma decisão que o autor do jogo deve fazer.
Patrick Hughes