public void iniciarPrograma(String escolha) throws ClassNotFoundException, PartidaEncerradaException { switch (escolha) { case "1": try { this.jogos = persintencia.load(); if (jogos == null) { jogos = new Jogos(); } partida = new Partida(); partida.iniciaPartida(); this.iniciarPartida(partida); } catch (PartidaEncerradaException ex) { } break; case "2": this.jogos = (Jogos) persintencia.load(); if (jogos != null) { int numeroPartidas = jogos.getListPartidasNaoFinalizadas().size(); // numero de partidas nao finalizadas if (numeroPartidas > 0) { impressora.imprimirPartidas(jogos.getListPartidasNaoFinalizadas()); impressora.imprimirEscolhaPartida(); String opcao = impressora.getString(); // escolhe a partida if (opcao.matches( "[0 -" + (numeroPartidas - 1) + "]")) { // verifica se a escolha é verdadeira partida = jogos .getListPartidasNaoFinalizadas() .get(Integer.parseInt(opcao.trim())); // pega a partida escolhida jogos.getListPartidasNaoFinalizadas().remove(Integer.parseInt(opcao.trim())); partida.recomeçarPartida(); // coloca false na variavel que indica se o usuario ja // salvou, para poder sair this.jogadas(partida); } else { // se a escolha nao for verdadeira impressora.imprimirArgumentoInvalido(); return; } } else { impressora.imprimirSemPartidas(); return; } } else { // se nao existir partidas impressora.imprimirSemPartidas(); return; } break; case "3": jogos = persintencia.load(); if (jogos != null) { impressora.imprimirDados(jogos); } else { impressora.imprimirSemDados(); } break; } }
/** * 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; } }