private void click(ActionEvent e) { estado = estado == 0 ? 1 : estado; switch (estado) { case 1: desde.append(e.getActionCommand()); estado = 2; colorDesde = botones.get(desde.toString()).getBackground(); botones.get(desde.toString()).setBackground(Color.RED); movimientosPosibles = ca.getMovimientosPosibles(desde, lado); if (movimientosPosibles.length == 1) { // No deja mover desde una posición sin pieza botones.get(desde.toString()).setBackground(colorDesde); desde.delete(0, 2); estado = 0; break; } if (movimientosPosibles.length == 2) { txtInfo.setText("Le toca al otro jugador"); botones.get(desde.toString()).setBackground(colorDesde); desde.delete(0, 2); estado = 0; } else { actualizarTablero(movimientosPosibles); } break; case 2: hasta.append(e.getActionCommand()); if (desde .toString() .equals( hasta.toString())) { // Si hago click en la misma posición se cancela el movimiento txtInfo.setText(""); botones.get(desde.toString()).setBackground(colorDesde); hasta.delete(0, 2); desde.delete(0, 2); estado = 0; despintarTablero(); break; } int columnaHasta = Character.getNumericValue(hasta.charAt(0)) - 10; int filaHasta = Character.getNumericValue(hasta.charAt(1)) - 1; if (movimientosPosibles[filaHasta][columnaHasta] == 1) { // Controla que hasta sea una posición dentro de las permitidas por array de // movimientos posibles char[] pieza = ca.movimiento(desde, hasta); if (pieza[0] == 'F') { String texto = lado ? "Blancas ganan" : "Negras ganan"; txtInfo.setText(texto); } else if (pieza[0] == 'P') { pieza[0] = promocion(); txtInfo.setText("Promoción"); actualizarTablero( pieza[0], desde, hasta, '\u0000'); // Cambiar pieza por lo que devuelva promocion botones.get(desde.toString()).setBackground(colorDesde); estado = 0; lado = lado ? false : true; desde.delete(0, 2); } else { actualizarTablero(pieza[0], desde, hasta, '\u0000'); botones.get(desde.toString()).setBackground(colorDesde); estado = 0; lado = lado ? false : true; desde.delete(0, 2); if (txtInfo.getText().length() != 0) { txtInfo.setText(""); } } actualizarComidas(); actualizarActivo(); if (pieza[1] != '\u0000') { StringBuilder desde1 = new StringBuilder(); StringBuilder hasta1 = new StringBuilder(); if (pieza[2] == '0') { // Lado blancas 1 + ? if (pieza[3] == '3') { // Izquierda ? + A 3 derecha 5 izquierda ? NO desde1.append("A1"); } else if (pieza[3] == '5') { // Derecha ? + H desde1.append("H1"); } } else if (pieza[2] == '7') { // Lado negras 8 + ? if (pieza[3] == '3') { // Izquierda ? + A desde1.append("A8"); } else if (pieza[3] == '5') { // Derecha ? + H desde1.append("H8"); } } switch (desde1.toString()) { case "A1": hasta1.append("D1"); break; case "A8": hasta1.append("D8"); break; case "H1": hasta1.append("F1"); break; case "H8": hasta1.append("F8"); break; } actualizarTablero(pieza[1], desde1, hasta1, 'E'); } } else { txtInfo.setText("Movimiento ilegal"); } hasta.delete(0, 2); break; default: break; } ca.actualizarTablero(estado); }