Boas praticas em java SOLID em games

Certo comecei meu projeto em java minha mini game engine 2d com JFrame,agora quero saber se minha logica esta indo bem estou usando SOLID mas por algum motivo sinto que não estou fazendo exatamente o que seria considerado SOLID por algum motivo parece ser muito mais claro usar SOLID para web back-end do que para jogos ou isso seria só uma percepção minha?.Vou deixar o link do meu codigo no git aqui se alguem poder me dar algum feedback agradeceria muito GitHub - Dione783/Java_game: my_game

Seu projeto não tem muita coisa, não sei se é o momento de comentar em cima de padrões, quando ele ainda não faz muito (apenas olhei o código, não rodei).

Antes de focar nos princípios SOLID, eu sugiro repensar algumas coisas:

  • você está usando um monte de atributos e métodos static. Tem certeza que quer arquitetar dessa forma? O que isso resolve, que você não está conseguindo fazer sem static?
  • que tipo de jogos você espera que a sua engine seja capaz de rodar. Vai ser algo mais específico (ex: plataforma 2D) ou mais genérico (qualquer jogo 2D) ? Pois isso determina os recursos que você precisa implementar. Por exemplo, não parece possível ter mais de um jogador, pois o player está declarado estaticamente na classe GameObjects;
  • em vez de ter sprites específicos para cada posição, você provavelmente vai querer trabalhar com spritesheets (uma única imagem com várias poses, que você desenha as poses que precisar “recortando” dessa imagem);
  • estendendo o item acima, você pode dar ao Player várias animações, tendo uma animação atual e haver transições de acordo com o estado do player (parado, andando, atingido por inimigo, pulando, etc);
  • pra jogos, você provavelmente vai querer alguma classe base para trabalhar com vetores (exemplo nesse link), pois eles facilitam bastante operações como movimentar entidades (player e inimigos). Se não sabe o que isso faz, pesquise sobre vetores em jogos. Sua classe Position pode ser facilmente substituída por um vetor;
  • você precisa pensar no relacionamento das classes. Por exemplo, por que Entitie precisa estender Position? Não seria o caso de Entitie ter um atributo Position (e este ser um vetor, como citado acima)?
  • ainda nessa linha, por que o setX e setY de Position descontam a posição da câmera? Em jogos, é mais comum haver uma separação da posição global dos objetos, e a câmera ser usada mudar qual parte da fase/mundo está visível a cada frame (em Java2D, seria algo como Graphics2D.translate());
  • talvez seja um pouco cedo, mas mais pra frente você pode querer dar uma olhada em máquinas de estado (state machines). É algo bem comum na arquitetura de jogos (ex: os possíveis estados do jogo podem ser representados por uma máquina de estados)

Essa são apenas algumas considerações, pode haver muito mais. Algo que você pode fazer é dar uma olhada em como outros jogos em Java2D. Por exemplo, o projeto JMario do colega davidbuzatto aqui do Fórum: GitHub - davidbuzatto/JMario: JMario is a side-scroll game, built in Java, based on Nintendo's Super Mario World.

Abraço.

3 curtidas

os atributos e metodos static eu to resolvendo ainda é um pouco complicado algumas partes eu cheguei a usar os 2, a ideia é rodar em pc como foco de inicio sobre os sprites, eu já estou trabalhando com spritesheets a minha classe já pega só uma parte da imagem, a classe position tinha como objetivo ser basicamente um vetor pra falar a verdade mas acho que o nome não esta muito bom, o motivo da camera estar sendo diminuida pela posição dos objetos é pq o mundo seria renderizado baseado na camera então em vez de eu mover o player no mundo eu movo os objetos e dou uma impressão de que o player e outras coisas estão se movendo no fim o pras posições não muda nem x nem y fica como se tivesse tudo parado menos as entidades que realmente estão se movendo,sobre o atributo Position realmente parece ser bem melhor se for feito assim inclusive é uma ideia pra classe frames assim posso criar uma classe frame para cada tipo de frame para cada estado que tenha um tamanho diferente de frame, eu acho que é isso muito obrigado esses comentarios mais completos sempre me ajudam a pensar melhor em certaz cosias que eu não vejo e obrigado pelos links é bom conseguir fazer conexão com outras pessoas de qualquer que seja a forma.