package jogogalo; public class JogoGalo { private Peca[][] _tabuleiro; public JogoGalo(int tamanho) { _tabuleiro = new Peca[tamanho][tamanho]; Peca peca = new PecaLivre(); for (int i = 0; i < tamanho; i++) { for (int j = 0; j < tamanho; j++) { _tabuleiro[i][j] = peca; } } } public boolean joga(Peca peca, int linha, int coluna) { // completar } public boolean temJogadasDisponiveis() { // compeletar } public boolean ganhou(int linha, int coluna) { Peca jogada = _tabuleiro[--linha][--coluna]; boolean resultado = true; int i; // verifica linha for (i = 0; i < _tabuleiro[linha].length; i++) { if (!_tabuleiro[linha][i].pertenceMesmoJogador(jogada)) { resultado = false; break; } } if (resultado) return true; resultado = true; // verifica coluna for (i = 0; i < _tabuleiro.length; i++) { if (!_tabuleiro[i][coluna].pertenceMesmoJogador(jogada)) { resultado = false; break; } } if (resultado) return true; // verifica diagonais.. Só é necessário se a peça estiver numa diagonal. if (linha == coluna) { // verifica diagonal principal resultado = true; for (i = 0; i < _tabuleiro.length; i++) { if (!_tabuleiro[i][i].pertenceMesmoJogador(jogada)) { resultado = false; break; } } if (resultado) return true; } if (linha + coluna == _tabuleiro.length - 1) { // verifica diagonal inversa resultado = true; int j; for (i = 0, j = _tabuleiro.length - 1; i < _tabuleiro.length; i++, j--) { if (!_tabuleiro[i][j].pertenceMesmoJogador(jogada)) { resultado = false; break; } } if (resultado) return true; } return false; } private String criaSeparadorLinha() { StringBuilder separador = new StringBuilder(); for (int i = 0; i < _tabuleiro[0].length - 1; i++) separador.append("-+"); separador.append("-\n"); return separador.toString(); } private String processaLinha(Peca[] linha) { StringBuilder res = new StringBuilder(); int i; for(i = 0; i < linha.length - 1; i++) { res.append(linha[i].obtemSimbolo()).append("|"); } res.append(linha[i].obtemSimbolo()).append("\n"); return res.toString(); } public String obtemEstadoJogo() { StringBuilder str = new StringBuilder(); String separador = criaSeparadorLinha(); int i; for (i = 0; i < _tabuleiro.length - 1; i++) { str.append(processaLinha(_tabuleiro[i])); str.append(separador); } str.append(processaLinha(_tabuleiro[i])); return str.toString(); } public static void main(String[] args) { JogoGalo jogo = new JogoGalo(3); Peca p1 = new PecaJogador1(); Peca p2 = new PecaJogador2(); System.out.println("Estado Inicial\n" + jogo.obtemEstadoJogo()); jogo.joga(p1, 1, 1); jogo.joga(p2, 1, 2); System.out.println("Após duas jogadas\n" + jogo.obtemEstadoJogo()); System.out.println("P1 ganhou " + jogo.ganhou(1, 1)); System.out.println("P2 ganhou " + jogo.ganhou(1, 2)); jogo.joga(p1, 2, 2); jogo.joga(p2, 2, 3); System.out.println("Após 4 jogadas\n" + jogo.obtemEstadoJogo()); System.out.println("P1 ganhou " + jogo.ganhou(2, 2)); System.out.println("P2 ganhou " + jogo.ganhou(2, 3)); jogo.joga(p1, 3, 1); jogo.joga(p2, 2, 1); System.out.println("Após 6 jogadas\n" + jogo.obtemEstadoJogo()); System.out.println("P1 ganhou " + jogo.ganhou(3, 1)); System.out.println("P2 ganhou " + jogo.ganhou(2, 1)); jogo.joga(p1, 3, 3); System.out.println("Após 7 jogadas\n" + jogo.obtemEstadoJogo()); System.out.println("P1 ganhou: " + jogo.ganhou(3, 3)); } }