Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package juego;
- /**
- * Juego Reversi
- *
- * Reglas:
- *
- * https://es.wikipedia.org/wiki/Reversi https://es.wikihow.com/jugar-a-Othello
- *
- */
- public class Reversi {
- private Casillero[][] tablero; // Arreglo que contiene que ficha hay en cada
- // Casillero
- private boolean[][] jugadasValidas; // Arreglo que indica si es posible o no
- // colocar una ficha
- private boolean turnoDeNegras = true;
- private String jugadorDeFichasNegras;
- private String jugadorDeFichasBlancas;
- /**
- * pre : 'dimension' es un número par, mayor o igual a 4. post: empieza el
- * juego entre el jugador que tiene fichas negras, identificado como
- * 'fichasNegras' y el jugador que tiene fichas blancas, identificado como
- * 'fichasBlancas'. El tablero tiene 4 fichas: 2 negras y 2 blancas. Estas
- * fichas están intercaladas en el centro del tablero.
- *
- * @param dimensionTablero
- * : cantidad de filas y columnas que tiene el tablero.
- * @param fichasNegras
- * : nombre del jugador con fichas negras.
- * @param fichasBlancas
- * : nombre del jugador con fichas blancas.
- */
- public Reversi(int dimensionTablero, String fichasNegras,
- String fichasBlancas) {
- verificarSiElTableroEsMenorA10MayorA4YPar(dimensionTablero);
- verificarQueLosNombresDeLosJugadoresNoSeasIguales(fichasNegras,
- fichasBlancas);
- verificarQueAmbosJugaresTenganUnNombre(fichasNegras, fichasBlancas);
- jugadorDeFichasBlancas = fichasBlancas;
- jugadorDeFichasNegras = fichasNegras;
- /*
- * tablero debe tener misma cantidad de filas que de columnas
- */
- tablero = new Casillero[dimensionTablero][dimensionTablero];
- /*
- * jugadasValidas debe ser una copia de tablero
- */
- jugadasValidas = new boolean[dimensionTablero][dimensionTablero];
- /*
- * Inicializo el tablero con todas los casilleros en libre y en el medio
- * dos fichas blancas y dos fichas negras, tal cual lo indica las reglas
- * para comenzar una partida.
- */
- for (int i = 0; i < dimensionTablero; i++) {
- for (int j = 0; j < dimensionTablero; j++) {
- tablero[i][j] = Casillero.LIBRE;
- }
- }
- tablero[(dimensionTablero / 2) - 1][(dimensionTablero / 2) - 1] = Casillero.BLANCAS;
- tablero[(dimensionTablero / 2)][(dimensionTablero / 2)] = Casillero.BLANCAS;
- tablero[(dimensionTablero / 2)][(dimensionTablero / 2) - 1] = Casillero.NEGRAS;
- tablero[(dimensionTablero / 2) - 1][(dimensionTablero / 2)] = Casillero.NEGRAS;
- /*
- * inicializo las posiciones para poder colocar fichas en falso.
- */
- for (int i = 0; i < dimensionTablero; i++) {
- for (int j = 0; j < dimensionTablero; j++) {
- jugadasValidas[i][j] = false;
- }
- }
- }
- /**
- * post: devuelve la cantidad de filas que tiene el tablero.
- */
- public int contarFilas() {
- return tablero.length;
- }
- /**
- * post: devuelve la cantidad de columnas que tiene el tablero.
- */
- public int contarColumnas() {
- return tablero.length;
- }
- /**
- * post: devuelve el nombre del jugador que debe colocar una ficha o null si
- * terminó el juego.
- */
- public String obtenerJugadorActual() {
- String turnoActual;
- turnoActual = jugadorDeFichasNegras;
- if (!turnoDeNegras) {
- turnoActual = jugadorDeFichasBlancas;
- }
- return turnoActual;
- }
- /**
- * pre : fila está en el intervalo [1, contarFilas()], columnas está en el
- * intervalo [1, contarColumnas()]. post: indica quién tiene la posesión del
- * casillero dado por fila y columna.
- *
- * @param fila
- * @param columna
- */
- public Casillero obtenerCasillero(int fila, int columna) {
- int filaCorregida = fila - 1;
- int columnaCorregida = columna - 1;
- return tablero[filaCorregida][columnaCorregida];
- }
- public boolean puedeColocarFicha(int fila, int columna) {
- int filaCorregida = fila - 1;
- int columnaCorregida = columna - 1;
- reiniciarPosibilidadesDeColocarfichas();
- if (turnoDeNegras) {
- validarJugadasPosibles(Casillero.NEGRAS);
- } else {
- validarJugadasPosibles(Casillero.BLANCAS);
- }
- quitarLaPosibilidadDePonerFichasEncimaDeOtras();
- return jugadasValidas[filaCorregida][columnaCorregida];
- }
- private void validarCasillero(int fila, int columna) {
- jugadasValidas[fila][columna] = true;
- }
- private void validarJugadasPosibles(Casillero fichaUtilizada) {
- validarCasilleroParaConvertirFichasHaciaElEste(fichaUtilizada);
- validarCasilleroParaConvertirFichasHaciaElOeste(fichaUtilizada);
- validarCasilleroParaConvertirFichasHaciaElSur(fichaUtilizada);
- validarCasilleroParaConvertirFichasHaciaElNorte(fichaUtilizada);
- validarCasilleroParaConvertirFichasHaciaElSurOeste(fichaUtilizada);
- validarCasilleroParaConvertirFichasHaciaElSurEste(fichaUtilizada);
- validarCasilleroParaConvertirFichasHaciaElNorOeste(fichaUtilizada);
- validarCasilleroParaConvertirFichasHaciaElNorEste(fichaUtilizada);
- }
- private void verificarQueLosNombresDeLosJugadoresNoSeasIguales(
- String nombreDeFichasNegras, String nombreDeFichasBlancas) {
- if (nombreDeFichasNegras.equals(nombreDeFichasBlancas)
- || nombreDeFichasBlancas.equals(nombreDeFichasNegras)) {
- Error jugadoresConElMismoNombre = new Error(
- "Los jugadores no pueden tener el mismo nombre.");
- throw jugadoresConElMismoNombre;
- }
- }
- private void verificarQueAmbosJugaresTenganUnNombre(
- String nombreDeFichasNegras, String nombreDeFichasBlancas) {
- if (nombreDeFichasNegras.equals("") || nombreDeFichasBlancas.equals("")) {
- Error jugadorSinNombre = new Error(
- "Ambos jugadores deben tener nombre");
- throw jugadorSinNombre;
- }
- }
- private void verificarSiElTableroEsMenorA10MayorA4YPar(int dimensionTablero) {
- if ((dimensionTablero % 2 == 1)
- || ((dimensionTablero > 10) || (dimensionTablero < 4))) {
- Error tamanioInvalido = new Error(
- "El tamaño debe ser mayor a 4 y menor a 10 y ser par.");
- throw tamanioInvalido;
- }
- }
- private void reiniciarPosibilidadesDeColocarfichas() {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- jugadasValidas[i][j] = false;
- }
- }
- }
- private void quitarLaPosibilidadDePonerFichasEncimaDeOtras() {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] != Casillero.LIBRE) {
- jugadasValidas[i][j] = false;
- }
- }
- }
- }
- // METODOS DESDE EL CLICK HACIA EL ESTE
- private void validarCasilleroParaConvertirFichasHaciaElEste(
- Casillero fichaUtilizada) {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] != fichaUtilizada
- && tablero[i][j] != Casillero.LIBRE) {
- if (j > 0) {
- if (escanearAlEsteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlfinalUnaPropia(
- i, j - 1, fichaUtilizada)) {
- validarCasillero(i, j - 1);
- }
- }
- }
- }
- }
- }
- private boolean escanearAlEsteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlfinalUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- boolean respuesta = false;
- for (int i = 1; i < tablero.length - columna; i++) {
- if (tablero[fila][columna + i] != fichaUtilizada
- && tablero[fila][columna + i] != Casillero.LIBRE) {
- } else if (tablero[fila][columna + i] == Casillero.LIBRE) {
- i = tablero.length - columna; // finalizo el for
- } else if (tablero[fila][columna + i] == fichaUtilizada) {
- respuesta = true;
- }
- }
- return respuesta;
- }
- private void convertirDesdeLaPosicionIndicadaHaciaElEsteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- int distanciaEntreCasilleros = 1;
- if (escanearAlEsteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlfinalUnaPropia(
- fila, columna, fichaUtilizada)) {
- while (tablero[fila][columna + distanciaEntreCasilleros] != fichaUtilizada) {
- tablero[fila][columna + distanciaEntreCasilleros] = fichaUtilizada;
- tablero[fila][columna] = fichaUtilizada;
- distanciaEntreCasilleros++;
- }
- }
- }
- // METODOS DESDE EL CLICK HACIA EL OESTE
- private void validarCasilleroParaConvertirFichasHaciaElOeste(
- Casillero fichaUtilizada) {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] != fichaUtilizada
- && tablero[i][j] != Casillero.LIBRE) {
- if (j < tablero.length - 1) {
- if (escanearAlOesteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- i, j + 1, fichaUtilizada)) {
- validarCasillero(i, j + 1);
- }
- }
- }
- }
- }
- }
- private boolean escanearAlOesteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- boolean respuesta = false;
- for (int i = 1; i <= columna; i++) {
- if (tablero[fila][columna - i] != fichaUtilizada
- && tablero[fila][columna - i] != Casillero.LIBRE) {
- } else if (tablero[fila][columna - i] == Casillero.LIBRE) {
- i = columna; // finalizo el for
- } else if (tablero[fila][columna - i] == fichaUtilizada) {
- respuesta = true;
- }
- }
- return respuesta;
- }
- private void convertirDesdeLaPosicionIndicadaHaciaElOesteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- int distanciaEntreCasilleros = 1;
- if (escanearAlOesteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- fila, columna, fichaUtilizada)) {
- while (tablero[fila][columna - distanciaEntreCasilleros] != fichaUtilizada) {
- tablero[fila][columna - distanciaEntreCasilleros] = fichaUtilizada;
- tablero[fila][columna] = fichaUtilizada;
- distanciaEntreCasilleros++;
- }
- }
- }
- // METODOS DESDE EL CLICK HACIA EL SUR
- private void validarCasilleroParaConvertirFichasHaciaElSur(
- Casillero fichaUtilizada) {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] != fichaUtilizada
- && tablero[i][j] != Casillero.LIBRE) {
- if (i > 0) {
- if (escanearAlSurDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- i - 1, j, fichaUtilizada)) {
- validarCasillero(i - 1, j);
- }
- }
- }
- }
- }
- }
- private boolean escanearAlSurDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- boolean respuesta = false;
- for (int i = 1; i < tablero.length - fila; i++) {
- if (tablero[fila + i][columna] != fichaUtilizada
- && tablero[fila + i][columna] != Casillero.LIBRE) {
- } else if (tablero[fila + i][columna] == Casillero.LIBRE) {
- i = tablero.length - fila; // finalizo el for
- } else if (tablero[fila + i][columna] == fichaUtilizada) {
- respuesta = true;
- }
- }
- return respuesta;
- }
- private void convertirDesdeLaPosicionIndicadaHaciaElSurFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- int fila, int columna,
- Casillero fichaUtilizada) {
- int distanciaEntreCasilleros = 1;
- if (escanearAlSurDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- fila, columna, fichaUtilizada)) {
- while (tablero[fila + distanciaEntreCasilleros][columna] != fichaUtilizada) {
- tablero[fila + distanciaEntreCasilleros][columna] = fichaUtilizada;
- tablero[fila][columna] = fichaUtilizada;
- distanciaEntreCasilleros++;
- }
- }
- }
- // METODOS DESDE EL CLICK PARA CONVERTIR HACIA EL NORTE
- private void validarCasilleroParaConvertirFichasHaciaElNorte(
- Casillero fichaUtilizada) {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] != fichaUtilizada
- && tablero[i][j] != Casillero.LIBRE) {
- if (i < tablero.length - 1) {
- if (escanearAlNorteDeLaPosicionIndicadaEnLosParametroslSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- i + 1, j, fichaUtilizada))
- validarCasillero(i + 1, j);
- }
- }
- }
- }
- }
- private boolean escanearAlNorteDeLaPosicionIndicadaEnLosParametroslSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- boolean respuesta = false;
- for (int i = 1; i <= fila; i++) {
- if (tablero[fila - i][columna] != fichaUtilizada
- && tablero[fila - i][columna] != Casillero.LIBRE) {
- } else if (tablero[fila - i][columna] == Casillero.LIBRE) {
- i = fila; // finalizo el for
- } else if (tablero[fila - i][columna] == fichaUtilizada) {
- respuesta = true;
- }
- }
- return respuesta;
- }
- private void convertirDesdeLaPosicionIndicadaHaciaElNorteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- int fila, int columna,
- Casillero fichaUtilizada) {
- int distanciaEntreCasilleros = 1;
- if (escanearAlNorteDeLaPosicionIndicadaEnLosParametroslSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- fila, columna, fichaUtilizada)) {
- while (tablero[fila - distanciaEntreCasilleros][columna] != fichaUtilizada) {
- tablero[fila - distanciaEntreCasilleros][columna] = fichaUtilizada;
- tablero[fila][columna] = fichaUtilizada;
- distanciaEntreCasilleros++;
- }
- }
- }
- // METODOS DESDE EL CLICK PARA CONVERTIR HACIA EL SUR OESTE
- private void validarCasilleroParaConvertirFichasHaciaElSurOeste(
- Casillero fichaUtilizada) {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] != fichaUtilizada
- && tablero[i][j] != Casillero.LIBRE) {
- if (i > 0 && j < tablero.length - 1) {
- if (escanearAlSurOesteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- i - 1, j + 1, fichaUtilizada)) {
- validarCasillero(i - 1, j + 1);
- }
- }
- }
- }
- }
- }
- private boolean escanearAlSurOesteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- boolean respuesta = false;
- for (int i = 1; i <= columna && i < tablero.length - fila; i++) {
- if (tablero[fila + i][columna - i] != fichaUtilizada
- && tablero[fila + i][columna - i] != Casillero.LIBRE) {
- } else if (tablero[fila + i][columna - i] == Casillero.LIBRE) {
- i = columna; // finalizo el for
- } else if (tablero[fila + i][columna - i] == fichaUtilizada) {
- respuesta = true;
- }
- }
- return respuesta;
- }
- private void convertirDesdeLaPosicionIndicadaHaciaElSurOesteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- int distanciaEntreCasilleros = 1;
- if (escanearAlSurOesteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- fila, columna, fichaUtilizada)) {
- while (tablero[fila + distanciaEntreCasilleros][columna
- - distanciaEntreCasilleros] != fichaUtilizada) {
- tablero[fila + distanciaEntreCasilleros][columna
- - distanciaEntreCasilleros] = fichaUtilizada;
- tablero[fila][columna] = fichaUtilizada;
- distanciaEntreCasilleros++;
- }
- }
- }
- // METODOS DESDE EL CLICK PARA CONVERTIR HACIA EL SUR ESTE
- private void validarCasilleroParaConvertirFichasHaciaElSurEste(
- Casillero fichaUtilizada) {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] != fichaUtilizada
- && tablero[i][j] != Casillero.LIBRE) {
- if (i > 0 && j > 0) {
- if (escanearAlSurEsteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- i - 1, j - 1, fichaUtilizada)) {
- validarCasillero(i - 1, j - 1);
- }
- }
- }
- }
- }
- }
- private boolean escanearAlSurEsteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- boolean respuesta = false;
- for (int i = 1; i < tablero.length - fila
- && i < tablero.length - columna; i++) {
- if (tablero[fila + i][columna + i] != fichaUtilizada
- && tablero[fila + i][columna + i] != Casillero.LIBRE) {
- } else if (tablero[fila + i][columna + i] == Casillero.LIBRE) {
- i = tablero.length - columna; // finalizo el for
- } else if (tablero[fila + i][columna + i] == fichaUtilizada) {
- respuesta = true;
- }
- }
- return respuesta;
- }
- private void convertirDesdeLaPosicionIndicadaHaciaElSurEsteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- int distanciaEntreCasilleros = 1;
- if (escanearAlSurEsteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- fila, columna, fichaUtilizada)) {
- while (tablero[fila + distanciaEntreCasilleros][columna
- + distanciaEntreCasilleros] != fichaUtilizada) {
- tablero[fila + distanciaEntreCasilleros][columna
- + distanciaEntreCasilleros] = fichaUtilizada;
- tablero[fila][columna] = fichaUtilizada;
- distanciaEntreCasilleros++;
- }
- }
- }
- // METODOS DESDE EL CLICK PARA CONVERTIR HACIA EL NOR OESTE
- private void validarCasilleroParaConvertirFichasHaciaElNorOeste(
- Casillero fichaUtilizada) {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] != fichaUtilizada
- && tablero[i][j] != Casillero.LIBRE) {
- if (i < tablero.length - 1 && j < tablero.length - 1) {
- if (escanearAlNorOesteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- i + 1, j + 1, fichaUtilizada)) {
- validarCasillero(i + 1, j + 1);
- }
- }
- }
- }
- }
- }
- private boolean escanearAlNorOesteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- boolean respuesta = false;
- for (int i = 1; i <= fila && i <= columna; i++) {
- if (tablero[fila - i][columna - i] != fichaUtilizada
- && tablero[fila - i][columna - i] != Casillero.LIBRE) {
- } else if (tablero[fila - i][columna - i] == Casillero.LIBRE) {
- i = columna; // finalizo el for
- } else if (tablero[fila - i][columna - i] == fichaUtilizada) {
- respuesta = true;
- }
- }
- return respuesta;
- }
- private void convertirDesdeLaPosicionIndicadaHaciaElNorOesteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- int distanciaEntreCasilleros = 1;
- if (escanearAlNorOesteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- fila, columna, fichaUtilizada)) {
- while (tablero[fila - distanciaEntreCasilleros][columna
- - distanciaEntreCasilleros] != fichaUtilizada) {
- tablero[fila - distanciaEntreCasilleros][columna
- - distanciaEntreCasilleros] = fichaUtilizada;
- tablero[fila][columna] = fichaUtilizada;
- distanciaEntreCasilleros++;
- }
- }
- }
- // METODOS DESDE EL CLICK PARA CONVERTIR HACIA EL NOR ESTE
- private void validarCasilleroParaConvertirFichasHaciaElNorEste(
- Casillero fichaUtilizada) {
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] != fichaUtilizada
- && tablero[i][j] != Casillero.LIBRE) {
- if (i < tablero.length - 1 && j > 0) {
- if (escanearAlNorEsteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- i + 1, j - 1, fichaUtilizada)) {
- validarCasillero(i + 1, j - 1);
- }
- }
- }
- }
- }
- }
- private boolean escanearAlNorEsteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- boolean respuesta = false;
- for (int i = 1; i <= fila && i < tablero.length - columna; i++) {
- if (tablero[fila - i][columna + i] != fichaUtilizada
- && tablero[fila - i][columna + i] != Casillero.LIBRE) {
- } else if (tablero[fila - i][columna + i] == Casillero.LIBRE) {
- i = fila; // finalizo el for
- } else if (tablero[fila - i][columna + i] == fichaUtilizada) {
- respuesta = true;
- }
- }
- return respuesta;
- }
- private void convertirDesdeLaPosicionIndicadaHaciaElNorEsteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- int fila, int columna, Casillero fichaUtilizada) {
- int distanciaEntreCasilleros = 1;
- if (escanearAlNorEsteDeLaPosicionIndicadaEnLosParametrosSiHayUnaSecuenciaDeFichasContrariasYAlFinalUnaPropia(
- fila, columna, fichaUtilizada)) {
- while (tablero[fila - distanciaEntreCasilleros][columna
- + distanciaEntreCasilleros] != fichaUtilizada) {
- tablero[fila - distanciaEntreCasilleros][columna
- + distanciaEntreCasilleros] = fichaUtilizada;
- tablero[fila][columna] = fichaUtilizada;
- distanciaEntreCasilleros++;
- }
- }
- }
- /*
- *
- * post: ejecuta todos los metodos, pero solo van a ser ejecutados
- * satisfactoriamente si hay un casillero habilitado especificamente para su
- * funcion.
- */
- private void ejecutarJugadasPosibles(int fila, int columna,
- Casillero fichaUtilizada) {
- convertirDesdeLaPosicionIndicadaHaciaElSurFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- fila, columna, fichaUtilizada);
- convertirDesdeLaPosicionIndicadaHaciaElNorteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- fila, columna, fichaUtilizada);
- convertirDesdeLaPosicionIndicadaHaciaElEsteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- fila, columna, fichaUtilizada);
- convertirDesdeLaPosicionIndicadaHaciaElOesteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- fila, columna, fichaUtilizada);
- convertirDesdeLaPosicionIndicadaHaciaElSurOesteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- fila, columna, fichaUtilizada);
- convertirDesdeLaPosicionIndicadaHaciaElNorOesteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- fila, columna, fichaUtilizada);
- convertirDesdeLaPosicionIndicadaHaciaElSurEsteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- fila, columna, fichaUtilizada);
- convertirDesdeLaPosicionIndicadaHaciaElNorEsteFichasContrariasEnPropiasHastaEncontrarUnaPropia(
- fila, columna, fichaUtilizada);
- }
- private boolean noTieneJugadasPosibles(Casillero fichaDelTurno) {
- boolean noPuedeSeguirJugando = true;
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (jugadasValidas[i][j] == true) {
- noPuedeSeguirJugando = false;
- }
- }
- }
- return noPuedeSeguirJugando;
- }
- /**
- * pre : la posición indicada por (fila, columna) puede ser ocupada por una
- * ficha. 'fila' está en el intervalo [1, contarFilas()]. 'columna' está en
- * el intervalor [1, contarColumnas()]. y aún queda un Casillero.VACIO en la
- * columna indicada. post: coloca una ficha en la posición indicada.
- *
- * @param columna
- * @param fila
- */
- public void colocarFicha(int fila, int columna) {
- int filaCorregida = fila - 1;
- int columnaCorregida = columna - 1;
- if (turnoDeNegras) {
- ejecutarJugadasPosibles(filaCorregida, columnaCorregida,
- Casillero.NEGRAS);
- turnoDeNegras = !turnoDeNegras;
- } else {
- ejecutarJugadasPosibles(filaCorregida, columnaCorregida,
- Casillero.BLANCAS);
- turnoDeNegras = !turnoDeNegras;
- }
- }
- /*
- *
- * String filas = "prueba.colocarFicha(";
- *
- * String columnas = ");";
- *
- * String comaEntreMedio = ",";
- *
- * System.out.print(filas);
- *
- * System.out.print(fila);
- *
- * System.out.print(comaEntreMedio);
- *
- * System.out.print(columna);
- *
- * System.out.print(columnas);
- */
- /**
- * post: devuelve la cantidad de fichas negras en el tablero.
- */
- public int contarFichasNegras() {
- int contador = 0;
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] == Casillero.NEGRAS) {
- contador++;
- }
- }
- }
- return contador;
- }
- /**
- * post: devuelve la cantidad de fichas blancas en el tablero.
- */
- public int contarFichasBlancas() {
- int contador = 0;
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (tablero[i][j] == Casillero.BLANCAS) {
- contador++;
- }
- }
- }
- return contador;
- }
- /**
- * post: indica si el juego terminó porque no existen casilleros vacíos o
- * ninguno de los jugadores puede colocar una ficha.
- */
- public boolean termino() {
- boolean terminoLaPartida = true;
- for (int i = 0; i < tablero.length; i++) {
- for (int j = 0; j < tablero.length; j++) {
- if (jugadasValidas[i][j] == true) {
- terminoLaPartida = false;
- }
- }
- }
- return terminoLaPartida;
- }
- /**
- * post: indica si el juego terminó y tiene un ganador.
- */
- public boolean hayGanador() {
- return (termino() && contarFichasBlancas() != contarFichasNegras());
- }
- /**
- * pre : el juego terminó. post: devuelve el nombre del jugador que ganó el
- * juego.
- */
- public String obtenerGanador() {
- String respuesta = "";
- if (hayGanador() && contarFichasBlancas() > contarFichasNegras()) {
- respuesta = jugadorDeFichasBlancas;
- }
- if (hayGanador() && contarFichasBlancas() < contarFichasNegras()) {
- respuesta = jugadorDeFichasNegras;
- }
- return respuesta;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement