package jogogalo.textui.player;
import pt.utl.ist.po.ui.Menu;
import pt.utl.ist.po.ui.Command;
import pt.utl.ist.po.ui.Display;
import pt.utl.ist.po.ui.Form;
import pt.utl.ist.po.ui.InputInteger;
import jogogalo.core.AplicacaoJogoGalo;
import jogogalo.core.JogoGalo;
import jogogalo.core.Peca;
import jogogalo.core.PecaJogador1;
import jogogalo.core.PecaJogador2;
import jogogalo.core.ResultadoJogo;
/**
* Command for playing as a human player.
*/
public class HumanPlayer extends Command<JogoGalo> {
private Peca _peca;
private int _idx; // the index of the other player in the menu
/**
* Constructor.
*
* @param game the target entity.
* @param firstPlayer plays as first player or second player
*/
public HumanPlayer(JogoGalo game, boolean firstPlayer) {
super(firstPlayer ? "Jogar Jogador 1" : "Jogar Jogador 2", game);
_peca = firstPlayer ? new PecaJogador1() : new PecaJogador2();
_idx = firstPlayer ? 1 : 0;
}
/**
* Execute the command.
*/
@Override
@SuppressWarnings("nls")
public void execute() {
Form f = new Form();
InputInteger row = new InputInteger(f, "Indique linha da jogada: ");
InputInteger column = new InputInteger(f, "Indique coluna da jogada: ");
f.parse();
Display display = new Display();
if (entity().joga(_peca, row.value(), column.value())) { // play is valid
display.add(entity().obtemEstadoJogo());
invisible(); // turn off this player
if (entity().obtemResultado() == ResultadoJogo.NAO_FINALIZADO) {
menu().entry(_idx).visible(); // it is the other player's turn
} else
display.addNewLine("Jogo Terminado");
} else
display.add("Jogada inválida");
display.display();
}
}