Búsqueda por palabras claves

No se olviden de consultar por palabras claves! Ejemplo de Estructura de datos en java, tutorial de estructura de datos
Búsqueda personalizada
Mostrando entradas con la etiqueta tic tac toe en java. Mostrar todas las entradas
Mostrando entradas con la etiqueta tic tac toe en java. Mostrar todas las entradas

viernes, 25 de septiembre de 2015

Juego tres en raya en java, tic tac toe en java

A continuación se presenta el código fuente desarrollado en el lenguaje de programación java, el juego es conocido como tic-tac-toe o en otro lugares como tres en raya.

Lo primero que debemos realizar es un nuevo proyecto.
A continuación debemos crear la Clase Juego con sus respectivos métodos por ejemplo:

  1. Imprimir el tablero
  2. ComprobarEspacioDisponible
  3. AgregarFichaTablero
  4. gana
  5. ConocerCoordenadas

Observe el código fuente del Juego TIC TAC TOE desarrollado en java.



package prytictactoe;

/**
 *
 * @author paulo.guerra.teran
 */
public class Juego {

    private final int ROWS = 3;
    private final int COLUMNS = 3;
    char[][] board = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};

    private int x;
    private int y;

    public void imprimirTablero() {

        System.out.println("Tablero de juego");
        for (int i = 0; i < ROWS; i++) {

            for (int j = 0; j < COLUMNS; j++) {
                System.out.print("" + board[i][j] + "");
                if (j < COLUMNS - 1) {
                    System.out.print(" ║ ");
                }

            }
            System.out.println("");
            if (i < COLUMNS - 1) {
                System.out.println("═   ═   ═");
            }
        }

    }

    public void conocerCoordenadas(int valor) {

        switch (valor) {
            case 1:
                x = 0;
                y = 0;
                break;
            case 2:
                x = 0;
                y = 1;
                break;
            case 3:
                x = 0;
                y = 2;
                break;
            case 4:
                x = 1;
                y = 0;
                break;
            case 5:
                x = 1;
                y = 1;
                break;
            case 6:
                x = 1;
                y = 2;
                break;
            case 7:
                x = 2;
                y = 0;
                break;
            case 8:
                x = 2;
                y = 1;
                break;
            case 9:
                x = 2;
                y = 2;
                break;
            default:
                System.out.println("No existe una posición");

        }

    }

    public boolean comprobarEspacioDisponible(int valor) {

        conocerCoordenadas(valor);
        boolean disponible = true;

        if (board[x][y] == 'X' || board[x][y] == 'O') {
            return false;
        } else {
            return true;
        }

    }

    public void asignarFichaTablero(char ficha, int valor) {
        conocerCoordenadas(valor);
        board[x][y] = ficha;
    }

    public boolean gana(char ficha) {
        for (int i = 0; i < board.length; i++)//horizontales
        {
            int cont = 0; //contador para saber cuantas fichas iguales hay
            for (int j = 0; j < board.length; j++) {
                if (board[i][j]==ficha) {
                    cont++;
                }
            }
            if (cont == 3) {
                return true;
            }
        }

        for (int j = 0; j < board.length; j++)//verticales
        {
            int cont = 0; //contador para saber cuantas fichas iguales hay
            for (int i = 0; i < board.length; i++) {
                if (board[i][j]==ficha) {
                    cont++;
                }
            }
            if (cont == 3) {
                return true;
            }
        }

        //diagonal
        if ((board[0][0]==ficha) && (board[1][1]==ficha) && (board[2][2]==ficha)) {
            return true;
        }
        if ((board[0][2]==ficha) && (board[1][1]==ficha) && (board[2][0]==ficha)) {
            return true;
        }

        return false;

    }

}

Una ves que se tiene la lógica del juego mediante los métodos lo que debemos hacer es programar el programa principal el cual tiene el objetivo de realizar la invocaciones necesarias hacia los métodos de la clase. En esta sección se presenta el código que va a controlar los turnos y la parte de invocación para el control del juego. Si tienen alguna duda no duden en contactarme.
package prytictactoe;

import java.io.IOException;
import java.util.Scanner;

/**
 *
 * @author paulo.guerra.teran
 */
public class PryTICTACTOE {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
       
        Juego tictacInstance=new Juego();
        tictacInstance.imprimirTablero();
        
        Scanner opcion=new Scanner(System.in);
        int dato;
        boolean ganador=false;
        char ficha;
        for(int turno=1;turno<=9;turno++){
           boolean valido=true;
           ficha = (turno%2==0) ? 'X' : 'O';
            do{
                System.out.println("Seleccione una opcion (1-9): ");
                dato=opcion.nextInt();
                valido=tictacInstance.comprobarEspacioDisponible(dato);
           }while(!valido);  
           tictacInstance.asignarFichaTablero(ficha, dato);
           tictacInstance.imprimirTablero();
           if(turno>5)
               if(tictacInstance.gana(ficha)){
                    System.out.println("Ganó "+ficha);
                    ganador=true;
                    break;
               }
        }
        if(!ganador){
            System.out.println("Empate!");
        }
        
        
    }
    
}