Jump to content

Game of Life


susape

Recommended Posts

Boa tarde,

Tenho uma duvida e não estou a conseguir resolver. Estou a desenvolver o jogo da vida mas apenas com ciclos, arrays e strings.

for (int linha = 1; linha < tamanho-1; linha++)
     { 
         for (int coluna = 1; coluna < tamanho-1; coluna++)
         { 
          if(grelha[coluna][linha]=='x')
          {
           int contadorvivo=0;
           for (int i=-1; i<=1;i++)
           {
            for(int j=-1;j<=1;j++)
            {
             if(grelha[coluna+i][linha+j]=='x')
             {
              contadorvivo++;
             }
            }
           }
           System.out.println(contadorvivo);
           if (contadorvivo<2 && contadorvivo>3)
           {
            grelha[coluna][linha]=' ';
           }
          }          
          else if(grelha[coluna][linha]==' ')
          {
           
          }
          
         } 
     } 


   
O que eu queria era que o ciclo fosse a cada índice do array e vi-se se é 'x' ('x' significa célula viva) ou ' ' (célula morta) (estes dados são inseridos num ciclo anterior aleatoriamente), depois percorre-se os 8 vizinhos em volta um a um, verificando  se está 'x' no vizinho e se sim incrementava no valor de 'contadorvivo'. 

Se a célula estivesse viva e menos de 2 vizinhos estivessem vivos ou mais de três vivos a célula morria. Se a célula estivesse morta e três vizinhos vivos, ela vivia. mas o código não me faz nada disso. qual o erro?

Link to comment
Share on other sites

a tua abordagem tem um problema muito grave.

vamos imaginar que o "mundo" do jogo não é infinito mas é 3X3 com o seguinte esquema inicial:

+-+-+-+
|X| | |
+-+-+-+
| |X| |
+-+-+-+
|X| | |
+-+-+-+

como podes ver, todas as células deverao morrer no próximo passo, no entanto, existe uma que deverá "voltar à vida":  a 1x2, porque tem exactamente 3 células adjacentes vivas.

no entanto, o teu código, como estás a alterar o estado sequencialmente pelo tabuleiro, ao marcares imediatamente a célula 1x1 como morta, o processo de avaliação da célula 1x2 mão irá tornar a célula viva, porque a 1x1 encontrasse agora "morta".

como estas limitado aos elementos da linguagem descritos, o que deverás fazer é ter dois tabuleiros : o actual e o seguinte, onde quando avaliar os actual, "escreves" no seguinte o estado que irá ter no passo seguinte. deste modo prevines o problema que descrevi anteriormente

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.