Duvida Orientação a objetos

Boa Tarde.

Estou fazendo um jogo,mas estou com algumas duvidas.
Eu tenho uma classe Galaxy nela eu tenho alguns atributos e um objeto da classe SpaceShip e um objeto da classe FieldGalaxy.
A minha duvida é a seguinte, eu teria que fazer os métodos como andar,atirar dentro da classe SpaceShip, entretanto algumas dessas funções eu teria que acessar os atributos da classe galaxy e da FieldGalaxy.

Por exemplo,quero fazer o comando atirar,nele eu teria que verificar a vida do inimigo que esta na coordenada galaxy[0][1].fieldGalaxy[3][4],mas eu não tenho acesso a esses atributos

Quando eu estou na dentro da classe Galaxy para acessar o atributo eu usaria galaxy[0][1].fieldGalaxy[3][4].life;

Teria algum modo para eu acessar esses atributos?ou a minha modelagem do problema está errada?

Dentro de orientação a objetos, você teria duas opções:

  • Herança
  • Composição

O conceito de herança está ligado ao termo “IS A(N)” ou “É UM(A)”.
O conceito de composição está ligado ao termo “HAS A(N)” ou “TEM UM(A)”.

Ou seja, ou você faz com que estas classes sejam estendidas entre si e isso vai depender de quantos elementos (métodos e atributos) são comuns a cada combinação de 2 delas.
Ou você faz com que essas classes “possuam” umas as outras, de modo que você possa ter um atributo que represente esta ou aquela, no ponto do código onde você precisar.

De quem é a responsabilidade de tratar a vida do inimigo?

Geralmente um jogo segue o seguinte laço:

while (executando) {
    processarEntrada(); // processar entrada do usuário
    atualizarEstado();  // verificar colisões e atualizar o estado dos objetos do jogo
    redesenhar();       // redesenha os gráficos do jogo com os objetos atualizados
}

Na etapa de atualizar estado é que você deveria computar a colisão dos objetos.

Por exemplo, um objeto do tipo SpaceShip poderia ter um método checkCollision que recebe como parâmetro um outro objeto.
Aí a própria classe é quem determina se deve receber dano ao colidir com um objeto Tiro por exemplo.