public Jogador cadastraJogador(Cor cor) { impressora.pedirNomeJogador(cor.toString()); JogadorHumano jogador = new JogadorHumano(cor); String nome = impressora.getString(); jogador.setNome(nome); return jogador; }
/** * Inicia a jogada de um player humano. * * @param jogadorAtual O jogador a efetuar a o jogada * @param jogadorProx O jogador que jogara na proxima jogada, necessario para desistencia * @throws JogadaInvalidaException É lançada quando a jogada não é bem sucedida. * @throws br.edu.ifes.poo1.xadrez.cci.PartidaEncerradaException Quando a partida é encerrada. */ public void iniciarJogada(JogadorHumano jogadorAtual, Jogador jogadorProx) throws JogadaInvalidaException, PartidaEncerradaException, ClassNotFoundException { impressora.pedirMovimento(jogadorAtual.getNome()); String jogadaStr = impressora.getString(); // Valida o comando dado pelo jogador. while (!this.validarEntrada(jogadaStr)) { impressora.imprimirArgumentoInvalido(); impressora.pedirMovimento(jogadorAtual.getNome()); jogadaStr = impressora.getString(); } // Verifica se é desistência, empate ou se ele solicita ver os pontos. if (jogadaStr.matches("\\D+") && (!jogadaStr.equals("O-O-O") || !jogadaStr.equals("O-O"))) { switch (jogadaStr) { case "desistir": if (!jogadorProx.getNome().equals("ZEUS")) { jogadorProx.setVitoria(true); } jogos.setListDadosJogos(jogadorAtual, jogos.getListDadoJogo()); jogos.setListDadosJogos(jogadorProx, jogos.getListDadoJogo()); partida.encerrarPartida(jogadorProx.getNome()); this.jogos.getListPartidasFinalizadas().add(partida); this.persintencia.save(this.jogos); impressora.imprimirJogoSalvo(); impressora.imprimiFimJogo(); return; case "empate": String escolha = ""; while (!escolha.equals("S") && !escolha.equals("N")) { impressora.imprimiPedidoEmpate(); Scanner scanner = new Scanner(System.in); escolha = scanner.nextLine(); switch (escolha) { case ("S"): impressora.imprimiEmpate(); partida.encerrarPartida("Empate"); this.jogos.getListPartidasFinalizadas().add(partida); this.persintencia.save(this.jogos); impressora.imprimirJogoSalvo(); impressora.imprimiFimJogo(); return; case ("N"): iniciarJogada(jogadorAtual, jogadorProx); return; } } case "pontos": impressora.imprimirPontos(jogadorAtual); iniciarJogada(jogadorAtual, jogadorProx); return; case "salvar": jogadorAtual.setSave(true); this.jogos.getListPartidasNaoFinalizadas().add(partida); this.persintencia.save(this.jogos); impressora.imprimirJogoSalvo(); iniciarJogada(jogadorAtual, jogadorProx); return; case "sair": if (jogadorAtual.getSave()) { partida.setPartidaInterrompida(true); impressora.imprimiFimJogo(); return; } else { impressora.imprimiErroSaida(); iniciarJogada(jogadorAtual, jogadorProx); return; } } } ((JogadorHumano) jogadorAtual).setJogada(criaJogada(jogadaStr)); this.apl.fazerJogada(jogadorAtual, partida); if (jogadorAtual.isVitoria()) { jogos.setListDadosJogos(jogadorAtual, jogos.getListDadoJogo()); jogos.setListDadosJogos(jogadorProx, jogos.getListDadoJogo()); partida.encerrarPartida(jogadorAtual.getNome()); this.jogos.getListPartidasFinalizadas().add(partida); this.persintencia.save(this.jogos); impressora.imprimirJogoSalvo(); impressora.imprimiFimJogo(); return; } }