Skip to content

Instantly share code, notes, and snippets.

@rodrigovilar
Created June 26, 2013 15:16
Show Gist options
  • Save rodrigovilar/5868293 to your computer and use it in GitHub Desktop.
Save rodrigovilar/5868293 to your computer and use it in GitHub Desktop.
Código final da aula de Desenvolvimento orientado a testes
public class ExcecaoJogoDaVelha extends RuntimeException {
public ExcecaoJogoDaVelha(String msg) {
super(msg);
}
}
public class Jogo {
private boolean proximaJogadaX;
private boolean iniciouJogo = false;
private boolean primeiroJogadorDefinido = false;
private String[][] tabuleiro = new String[][] {
{null, null, null}, {null, null, null}, {null, null, null}
};
public void acabou() {
return verificarColunas() || verificarLinhas() ||
verificarDiagonais();
}
public void desenharMarca(int linha, int coluna) {
if (acabou()) {
throw new ExcecaoJogoDaVelha("O jogo já acabou");
}
if (!primeiroJogadorDefinido) {
throw new ExcecaoJogoDaVelha("O primeiro jogador ainda não foi " +
"definido");
}
verificarLimites(linha, coluna);
if (tabuleiro[linha][coluna] != null) {
throw new ExcecaoJogoDaVelha("Célula ocupada");
}
String marca = (proximaJogadaX) ? "X" : "O";
tabuleiro[linha][coluna] = marca;
iniciouJogo = true;
proximaJogadaX = !proximaJogadaX;
}
public boolean isMarcaPrimeiroJogadorX() {
return proximaJogadaX;
}
public boolean isMarcaXNaPosicao(int linha, int coluna) {
verificarLimites(linha, coluna);
String celula = tabuleiro[linha][coluna];
if (celula == null) {
throw new ExcecaoJogoDaVelha("Célula vazia");
}
return celula == "X";
}
public void setMarcaPrimeiroJogadorX(boolean b) {
if (iniciouJogo) {
throw new ExcecaoJogoDaVelha("O jogo já foi iniciado");
}
proximaJogadaX = b;
primeiroJogadorDefinido = true;
}
private boolean verificarColunas() {
for (int i = 0; i < 3; i++) {
if (tabuleiro[0][i] == tabuleiro[1][i] &&
tabuleiro[1][i] == tabuleiro[2][i] && tabuleiro[2][i] != null) {
return true;
}
}
return false;
}
private boolean verificarDiagonais() {
if (tabuleiro[0][0] == tabuleiro[1][1] &&
tabuleiro[1][1] == tabuleiro[2][2] && tabuleiro[2][2] != null) {
return true;
}
if (tabuleiro[0][2] == tabuleiro[1][1] &&
tabuleiro[1][1] == tabuleiro[2][0] && tabuleiro[2][0] != null) {
return true;
}
return false;
}
private void verificarLimites(int linha, int coluna) {
if (linha < 0 || linha > 2) {
throw new ExcecaoJogoDaVelha("Linha fora da faixa permitida");
}
if (coluna < 0 || coluna > 2) {
throw new ExcecaoJogoDaVelha("Coluna fora da faixa permitida");
}
}
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][2] != null) {
return true;
}
}
return false;
}
}
public class JogoTest {
private Jogo jogo;
@Before //Executado antes de todos os testes
public void iniciar() {
jogo = new Jogo();
}
@Test
public void criarJogo() {
Assert.assertFalse("O jogo iniciou acabado", jogo.acabou());
}
@Test
public void definirPrimeiroJogador() {
jogo.setMarcaPrimeiroJogadorX(true);
Assert.assertTrue("Esperava que o primeiro jogador utilizasse X",
jogo.isMarcaPrimeiroJogadorX());
}
@Test
public void definirPrimeiroJogadorDeNovo() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.setMarcaPrimeiroJogadorX(false);
Assert.assertFalse("Esperava que o primeiro jogador utilizasse O",
jogo.isMarcaPrimeiroJogadorX());
}
@Test
public void desenharPrimeiraMarca() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.desenharMarca(0, 1);
Assert.assertTrue("Esperava X na posica 0,1",
jogo.isMarcaXNaPosicao());
}
@Test(expected=ExcecaoJogoDaVelha.class)
public void desenharMarcaEmUmaCelulaOcupada() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.desenharMarca(0, 1);
jogo.desenharMarca(0, 1);
}
@Test(expected=ExcecaoJogoDaVelha.class)
public void desenharMarcaEmUmaColunaErrada() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.desenharMarca(1, 3);
}
@Test(expected=ExcecaoJogoDaVelha.class)
public void desenharMarcaEmUmaLinhaErrada() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.desenharMarca(-1, 1);
}
@Test(expected=ExcecaoJogoDaVelha.class)
public void lerMarcaDeUmaCelulaDesocupada() {
jogo.setMarcaPrimeiroJogadorX(false);
jogo.isMarcaXNaPosicao(0, 1);
}
@Test(expected=ExcecaoJogoDaVelha.class)
public void lerMarcaDeUmaColunaErrada() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.isMarcaXNaPosicao(1, 3);
}
@Test(expected=ExcecaoJogoDaVelha.class)
public void lerMarcaDeUmaLinhaErrada() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.isMarcaXNaPosicao(-1, 1);
}
@Test(expected=ExcecaoJogoDaVelha.class)
public void definirPrimeiroJogadorAposInicioDoJogo() {
jogo.setMarcaPrimeiroJogadorX(false);
jogo.desenharMarca(0, 1);
jogo.setMarcaPrimeiroJogadorX(true);
}
@Test(expected=ExcecaoJogoDaVelha.class)
public void desenharMarcaAntesDeDefinirPrimeiroJogador() {
jogo.desenharMarca(0, 1);
}
@Test
public void desenharSegundaMarca() {
jogo.setMarcaPrimeiroJogadorX(false);
jogo.desenharMarca(0, 1);
Assert.assertFalse("Esperava O na posição 0,1",
jogo.isMarcaXNaPosicao(0,1));
jogo.desenharMarca(1, 2);
Assert.assertTrue("Esperava X na posição 1,2",
jogo.isMarcaXNaPosicao(1,2));
}
@Test
public void jogoGanhoAtravesDeColuna() {
jogo.setMarcaPrimeiroJogadorX(false);
jogo.desenharMarca(0, 0);
jogo.desenharMarca(1, 2);
jogo.desenharMarca(1, 0);
jogo.desenharMarca(2, 2);
jogo.desenharMarca(2, 0);
Assert.assertTrue("Esperava que o jogo tivesse acabado",
jogo.acabou());
}
@Test
public void jogoGanhoAtravesDeLinha() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.desenharMarca(1, 0);
jogo.desenharMarca(0, 2);
jogo.desenharMarca(1, 2);
jogo.desenharMarca(2, 0);
jogo.desenharMarca(1, 1);
Assert.assertTrue("Esperava que o jogo tivesse acabado",
jogo.acabou());
}
@Test
public void jogoGanhoAtravesDeDiagonal() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.desenharMarca(0, 2);
jogo.desenharMarca(0, 0);
jogo.desenharMarca(1, 1);
jogo.desenharMarca(2, 2);
jogo.desenharMarca(2, 0);
Assert.assertTrue("Esperava que o jogo tivesse acabado",
jogo.acabou());
}
@Test(expected=ExcecaoJogoDaVelha.class)
public void desenharMarcaAposJogoGanho() {
jogo.setMarcaPrimeiroJogadorX(true);
jogo.desenharMarca(0, 2);
jogo.desenharMarca(0, 0);
jogo.desenharMarca(1, 1);
jogo.desenharMarca(2, 2);
jogo.desenharMarca(2, 0);
jogo.desenharMarca(2, 1);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment