Skip to content

Instantly share code, notes, and snippets.

@carlossaraiva
Created November 11, 2011 23:51
Show Gist options
  • Save carlossaraiva/1359707 to your computer and use it in GitHub Desktop.
Save carlossaraiva/1359707 to your computer and use it in GitHub Desktop.
Metodo recursivo para escanear diagonal no Connect 4.
/*Usei variáveis em inglês para treinar um pouco e também fazer algo que seja legível por qualquer pessoa.
No final tem um return -1, porque o eclipse exigia um retorno no final mesmo tendo vários retornos nos durante o método.
Mas creio que pode dar alguma idéia de como aplicar recursividade neste caso. Se alguémtiver algum problema me avisa!
Ainda não consegui exportar o projeto para que outras pessoas possam testar. */
/*UPDATE: De fato precisei de dois métodos recursivos para escanear a diagonal tanto para diagonal que
'sobe a direita ' quanto a que desce a esquerda do botão que foi apertado.
Apesar de ter nomeado o método de "INV", ela não é inversa (acabei me confundindo na hora de nomear.
Talvez dê para simplificar em um único método, mas procurei modularizar o máximo possível.. Idéia são bem vindas.
Se eu conseguir finalizar, disponho o trabalho completo. Divirtam-se! (=
*/
public static int diagInvScan(int lin, int col, int count, int player)
{
if (count == 4)
{
return player;
}
if(lin >= arrayState.length || col >= arrayState.length || lin < 0 || col < 0)
{
return -1;
}
if (arrayState[lin][col] == 0)
{
return diagInvScan(lin + 1, col - 1 , 0, player);
}
if (arrayState[lin][col] == player)
{
return diagInvScan(lin + 1, col - 1 , count + 1, player);
}
else if (arrayState[lin][col] != player)
{
count = 0;
player = arrayState[lin][col];
return diagInvScan(lin + 1, col - 1, count + 1, player);
}
return -1;
}
public static int diagInvScanUp(int lin, int col, int count, int player)
{
if (count == 4)
{
return player;
}
if(lin >= arrayState.length || col >= arrayState.length || lin < 0 || col < 0)
{
return -1;
}
if (arrayState[lin][col] == 0)
{
return diagInvScan(lin - 1, col + 1 , 0, player);
}
if (arrayState[lin][col] == player)
{
return diagInvScan(lin - 1, col + 1 , count + 1, player);
}
else if (arrayState[lin][col] != player)
{
count = 0;
player = arrayState[lin][col];
return diagInvScan(lin - 1, col + 1, count + 1, player);
}
return -1;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment