Estruturas de Dados 2019/2020 (CC1007) - DCC/FCUP

Voltar a Lista de Codigo de Exemplo


(ED004.java)

/* -----------------------------------
   Estruturas de Dados 2019/2020
   Jogo do Galo [ED004]
   Pedro Ribeiro (DCC/FCUP)
   ----------------------------------- */

import java.util.Scanner;

class Game {
   private int n;       // tamanho do tabuleiro
   private char m[][];  // matriz que representa o tabuleiro

   // Construtor que recebe como argumento o tamanho n
   Game(int n) {
      this.n = n;
      m = new char[n][n];
   }

   // Leitura de input para o tabuleiro
   void read(Scanner in) {
      for (int i=0; i<n; i++) {
         String buf = in.next();
         for (int j=0; j<n; j++)
            m[i][j] = buf.charAt(j);
	 }
   }

   // Escreve mensagem dizendo que jogador player ganhou
   void win(char player) {
      System.out.println("Ganhou o " + player);
      System.exit(0);
   }

   // Verifica se a linha que comeca em (x,y) e com incrementos
   // incx e incy tem todas as posicoes preenchidas com o mesmo caracter
   void verify(int y, int x, int incy, int incx) {
      if (m[y][x] == '.') return;
      for (int i=0, yy=y, xx=x; i<n; i++, yy+=incy, xx+=incx)
         if (m[y][x] != m[yy][xx]) return;
      win(m[y][x]);
   }

   // Devolve true se o tabuleiro estiver cheio ou false caso contrario
   boolean finished() {
      for (int i=0; i<n; i++)
         for (int j=0; j<n; j++)
            if (m[i][j] == '.') return false;
      return true;
   }

   // Verifica o estado do jogo
   void check() {
      for (int i=0; i<n; i++) verify(i, 0, 0, 1); // Linhas
      for (int j=0; j<n; j++) verify(0, j, 1, 0); // Colunas
      verify(0, 0, 1, 1);                         // Diagonal 1
      verify(0, n-1, 1, -1);                      // Diagonal 2
      
      if (!finished()) System.out.println("Jogo incompleto");
      else             System.out.println("Empate");
      
   }    
}

public class ED004 {    
   public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
      int n = in.nextInt();
      Game g = new Game(n);
      g.read(in);
      g.check();
   }
}