Eu tenho lutado com como implementar scripts no meu mecanismo de jogo. Eu só tenho alguns requisitos: deve ser intuitivo, não quero escrever uma linguagem personalizada, analisador e intérprete e não quero usar o encadeamento. (Tenho certeza de que há uma solução mais simples; não preciso do incômodo de vários segmentos da lógica do jogo.) Aqui está um exemplo de script, em Python (também conhecido como pseudocódigo):
def dramatic_scene(actors):
alice = actors["alice"]
bob = actors["bob"]
alice.walk_to(bob)
if bob.can_see(alice):
bob.say("Hello again!")
else:
alice.say("Excuse me, Bob?")
Essa peça épica de contar histórias apresenta problemas de implementação. Não posso apenas avaliar todo o método de uma só vez, porque walk_to
leva tempo de jogo. Se ele retornar imediatamente, Alice começará a caminhar até Bob e (no mesmo quadro) dirá olá (ou seja cumprimentada). Mas sewalk_to
é uma chamada de bloqueio que retorna quando ela alcança Bob, meu jogo fica paralisado, porque está bloqueando o mesmo segmento de execução que faria Alice andar.
Eu considerei tornar cada função enfileirar uma ação - alice.walk_to(bob)
empurraria um objeto para uma fila, que seria disparada depois que Alice alcançasse Bob, onde quer que ele estivesse. Isso é mais sutilmente quebrado: o if
ramo é avaliado imediatamente, para que Bob possa cumprimentar Alice, mesmo que esteja de costas para ela.
Como outros mecanismos / pessoas lidam com scripts sem criar threads? Estou começando a procurar em áreas que não sejam desenvolvedores de jogos, como cadeias de animação jQuery, para obter idéias. Parece que deve haver alguns bons padrões para esse tipo de problema.