Created
June 16, 2014 14:30
-
-
Save rodrigovilar/ff7ff925ed4e1e60c96d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.jogodavelha; | |
public class ExcecaoJogoDaVelha extends RuntimeException { | |
public ExcecaoJogoDaVelha(String msg) { | |
super(msg); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.jogodavelha; | |
public class Jogo { | |
private Boolean[][] tabuleiro = new Boolean[3][3]; | |
private Boolean proximaJogadaX; | |
private boolean jogoComecou = false; | |
public boolean acabou() { | |
return verificarColunas() || verificarLinhas() || verificarDiagonais(); | |
} | |
private boolean verificarDiagonais() { | |
if ((tabuleiro[0][0] == tabuleiro[1][1]) | |
&& (tabuleiro[1][1] == tabuleiro[2][2]) | |
&& (tabuleiro[0][0] != null)) { | |
return true; | |
} | |
if ((tabuleiro[0][2] == tabuleiro[1][1]) | |
&& (tabuleiro[1][1] == tabuleiro[2][0]) | |
&& (tabuleiro[0][2] != null)) { | |
return true; | |
} | |
return false; | |
} | |
private boolean verificarLinhas() { | |
for (int i = 0; i < 3; i++) { | |
if ((tabuleiro[i][0] == tabuleiro[i][1]) | |
&& (tabuleiro[i][1] == tabuleiro[i][2]) | |
&& (tabuleiro[i][0] != null)) { | |
return true; | |
} | |
} | |
return false; | |
} | |
private boolean verificarColunas() { | |
for (int i = 0; i < 3; i++) { | |
if ((tabuleiro[0][i] == tabuleiro[1][i]) | |
&& (tabuleiro[1][i] == tabuleiro[2][i]) | |
&& (tabuleiro[0][i] != null)) { | |
return true; | |
} | |
} | |
return false; | |
} | |
public void setMarcaPrimeiroJogadorX(boolean marcaPrimeiroJogadorX) { | |
if (jogoComecou) { | |
throw new ExcecaoJogoDaVelha( | |
"Nao pode trocar marcar apos inicio do jogo"); | |
} | |
this.proximaJogadaX = marcaPrimeiroJogadorX; | |
} | |
public boolean isMarcaPrimeiroJogadorX() { | |
return proximaJogadaX; | |
} | |
public void desenharMarca(int linha, int coluna) { | |
if (acabou()) { | |
throw new ExcecaoJogoDaVelha("O jogo já acabou"); | |
} | |
verificarLimites(linha, coluna); | |
if (tabuleiro[linha][coluna] != null) { | |
throw new ExcecaoJogoDaVelha("Celula ocupada"); | |
} | |
if (proximaJogadaX == null) { | |
throw new ExcecaoJogoDaVelha("Primeiro jogador nao definido"); | |
} | |
tabuleiro[linha][coluna] = proximaJogadaX; | |
proximaJogadaX = !proximaJogadaX; | |
jogoComecou = true; | |
} | |
private void verificarLimites(int linha, int coluna) { | |
if (linha > 2 || linha < 0) { | |
throw new ExcecaoJogoDaVelha("Linha errada"); | |
} | |
if (coluna > 2 || coluna < 0) { | |
throw new ExcecaoJogoDaVelha("Coluna errada"); | |
} | |
} | |
public boolean isMarcaXNaPosicao(int linha, int coluna) { | |
verificarLimites(linha, coluna); | |
if (tabuleiro[linha][coluna] == null) { | |
throw new ExcecaoJogoDaVelha("Celula vazia"); | |
} | |
return tabuleiro[linha][coluna]; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.jogodavelha; | |
import org.junit.Assert; | |
import org.junit.Before; | |
import org.junit.Test; | |
public class JogoTest { | |
private Jogo jogo; | |
@Before | |
public void inicializa() { | |
jogo = new Jogo(); | |
} | |
@Test | |
public void criarJogo() { | |
Assert.assertFalse("O jogo iniciou finalizado", jogo.acabou()); | |
} | |
@Test | |
public void definirJogador() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
Assert.assertTrue(jogo.isMarcaPrimeiroJogadorX()); | |
} | |
@Test | |
public void definirJogadorDeNovo() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.setMarcaPrimeiroJogadorX(false); | |
Assert.assertFalse(jogo.isMarcaPrimeiroJogadorX()); | |
} | |
@Test | |
public void jogadaInicial() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(2, 1); | |
Assert.assertTrue(jogo.isMarcaXNaPosicao(2, 1)); | |
} | |
@Test(expected = ExcecaoJogoDaVelha.class) | |
public void desenharMarcaEmUmaCelulaOcupada() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
desenharMarcas(0, 1, 0, 1); | |
} | |
@Test(expected = ExcecaoJogoDaVelha.class) | |
public void linhaErrada() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(3, 2); | |
} | |
@Test(expected = ExcecaoJogoDaVelha.class) | |
public void colunaErrada() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(2, -1); | |
} | |
@Test(expected = ExcecaoJogoDaVelha.class) | |
public void lerCelulaDesocupada() { | |
jogo.isMarcaXNaPosicao(2, 1); | |
} | |
@Test(expected = ExcecaoJogoDaVelha.class) | |
public void lerMarcaDeUmaColunaErrada() { | |
jogo.isMarcaXNaPosicao(1, 3); | |
} | |
@Test(expected = ExcecaoJogoDaVelha.class) | |
public void lerMarcaDeUmaLinhaErrada() { | |
jogo.isMarcaXNaPosicao(-1, 1); | |
} | |
@Test(expected = ExcecaoJogoDaVelha.class) | |
public void definirPrimeiroJogadorAposInicioDoJogo() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(2, 1); | |
jogo.setMarcaPrimeiroJogadorX(false); | |
} | |
@Test(expected = ExcecaoJogoDaVelha.class) | |
public void desenharMarcaAntesDeDefinirPrimeiroJogador() { | |
jogo.desenharMarca(2, 1); | |
} | |
@Test | |
public void segundaJogada() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
desenharMarcas(2, 2, 2, 1); | |
Assert.assertFalse(jogo.isMarcaXNaPosicao(2, 1)); | |
} | |
@Test | |
public void jogoGanhoAtravesDeColuna() { | |
jogo.setMarcaPrimeiroJogadorX(false); | |
desenharMarcas(0, 0, 1, 2, 1, 0, 2, 2, 2, 0); | |
Assert.assertTrue("Esperava que o jogo tivesse acabado", jogo.acabou()); | |
} | |
@Test | |
public void jogoGanhoAtravesDeLinha() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
desenharMarcas(1, 0, 0, 2, 1, 2, 2, 0, 1, 1); | |
Assert.assertTrue("Esperava que o jogo tivesse acabado", jogo.acabou()); | |
} | |
@Test | |
public void jogoGanhoAtravesDeDiagonal() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
desenharMarcas(0, 2, 0, 0, 1, 1, 2, 2, 2, 0); | |
Assert.assertTrue("Esperava que o jogo tivesse acabado", jogo.acabou()); | |
} | |
@Test(expected = ExcecaoJogoDaVelha.class) | |
public void desenharMarcaAposJogoGanho() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
desenharMarcas(0, 2, 0, 0, 1, 1, 2, 2, 2, 0, 2, 1); | |
} | |
private void desenharMarcas(int... posicao) { | |
for (int i = 0; i < posicao.length; i += 2) { | |
jogo.desenharMarca(posicao[i], posicao[i + 1]); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment