susape Posted March 14, 2017 at 07:34 PM Report Share #603149 Posted March 14, 2017 at 07:34 PM 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 More sharing options...
HappyHippyHippo Posted March 15, 2017 at 10:10 AM Report Share #603155 Posted March 15, 2017 at 10:10 AM 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 Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now