Existe uma técnica comum para lidar com o estado (em geral) em uma linguagem de programação funcional? Existem soluções em todas as linguagens de programação (funcionais) para lidar com o estado global, mas quero evitar isso o máximo possível.
Todos os estados de uma maneira funcional pura são parâmetros de função. Então, preciso colocar todo o estado do jogo (um gigantesco mapa de hash com o mundo, jogadores, posições, pontuação, ativos, inimigos, ...)) como um parâmetro para todas as funções que desejam manipular o mundo em uma determinada entrada ou gatilho . A própria função seleciona as informações relevantes do blob gamestate, faz algo com ele, manipula o gamestate e retorna o gamestate. Mas isso parece uma solução pobre para o problema. Se eu colocar todo o estado do jogo em todas as funções, não há benefício para mim em contraste com as variáveis globais ou a abordagem imperativa.
Eu poderia colocar apenas as informações relevantes nas funções e retornar as ações que serão tomadas para a entrada fornecida. E uma única função aplica todas as ações ao estado do jogo. Mas a maioria das funções precisa de muitas informações "relevantes". move()
precisa da posição do objeto, da velocidade, do mapa para colisão, da posição de todos os inimigos, da saúde atual, ... Portanto, essa abordagem também não parece funcionar.
Então, minha pergunta é: como eu manejo a enorme quantidade de estado em uma linguagem de programação funcional - especialmente para o desenvolvimento de jogos?
EDIT: Existem algumas estruturas de jogos para a criação de jogos no Clojure. Uma abordagem para resolver esse problema parcialmente é enfiar todos os objetos no jogo como "entidades" e colocá-lo em um saco enorme. A função principal gigant está segurando a tela e as entidades e eventos alça ( :on-key-down
, :on-init
...) para esse entidades e executar o loop principal do display. Mas esta não é a solução limpa que estou procurando.
move()
, você provavelmente deveria estar passando o objeto 'atual' (ou um identificador para ele), mais o mundo pelo qual ele está se movendo e apenas derivando a posição e a velocidade atuais ... a saída é então o mundo inteiro da física, ou pelo menos uma lista de objetos alterados.