Disponibilizando constantes / tabelas de jogo para classes / rotinas de lógica de jogo de maneira modular


8

Suponha que eu tenha um jogo em que haja várias constantes e gráficos predefinidos (um gráfico XP, custo de mercadorias e assim por diante). Eles podem ser definidos em tempo de execução ou carregados a partir de arquivos na inicialização. A questão é como essas rotinas lógicas devem acessar as constantes e os gráficos?

Por exemplo, eu poderia tentar usar variáveis ​​globais, mas isso faz com que todas as classes que dependem das variáveis ​​sejam fortemente acopladas a elas.

Respostas:


3

Realmente depende de que tipo (e quantidade / tamanho) de dados que você está falando. Se for um pequeno pedaço de dados que pode ser mantido em segurança na memória durante a execução, algo como uma classe estática seria minha recomendação.

public static class Constants
{
    public static int[] Levels = { 0, 100, 200, 400, 800, 1600, 3200, 6400 }
}

Dessa forma, a experiência necessária para chegar ao nível X é Constatns.Levels[X - 1];fácil e o acesso a outros dados também é fácil. Se você precisar de uma coleção de itens, poderá adicioná-los aqui também. Se os dados dos itens forem grandes demais para armazenar na memória, você poderá Também implemente lógica de cache dentro da classe estática.

Tornar estático mantém uma única cópia na memória e garante que todos os clientes desta classe obtenham os mesmos dados.

Embora isso "junte fortemente" suas classes, o acoplamento apertado não é algo ruim se o design realmente precisar dele, o que, no caso de estatísticas de itens e gráficos XP, é, IMHO, razoável para acoplá-las firmemente. Eu sempre tento mantê-lo simples, até que algo o force a ser complicado.


3

Crie um objeto para representar cada peça e passe esse objeto para as funções que precisam dele. Isso não é diferente de outros dados - você os transmite.


2

Eu recomendo usar uma classe acessível globalmente - vamos chamá-la de dicionário (usando a terminologia do flash). O dicionário é basicamente uma lista de pares nome-valor (dados, regras, constantes) que você deseja que sejam acessíveis em todo o aplicativo. Usando o nome (string), outras classes poderão recuperar os valores (números, string, classes etc.) que estão conectados ao seu código. Portanto, sua implementação é basicamente COI, exceto que a instanciação foi feita anteriormente no Dicionário. Você também pode ouvir alterações no dicionário, etc.


Esta abordagem é bom para depuração - você pode canalizar o dicionário para um servidor http e editar os números sobre a voar a partir de outro aplicativo, ou imprimir os valores na tela, etc.
tenpn

0

Bem, se você estivesse usando Java, eu recomendaria colocar seus dados em arquivos XML e usar algo como JAXB ou simple-xml para obter os dados desejados nos objetos certos.


11
Se não estou completamente enganado, a questão não é sobre como armazenar e carregar os dados, mas como fornecer acesso a eles depois de carregados (design de software, OOP).
bummzack
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.