Post on 04-Jul-2015
*** Idea Base Del Proyecto ***
Efectuar un juego de tres en RAYA REALIZANDO UN ANALISIS, DISEÑO E Implementación orientado a objetos. Las relaciones son las siguientes: Los Juegos de Computadora se pueden clasificar en Juegos Totalmente aleatorios y juegos de destrezas: el juego de tres en raya es un juego de destreza, en este juego participan dos jugadores, de los cuales uno incluso puede ser el computador.
x 0
x 0
x
Al iniciar el juego se solicitaran los nombres d cada jugador y su Nick. En el juego se debe especificar cuál de los jugadores es el primero (por elección o al azar). Así también puede seleccionarse que uno de los jugadores sea la computadora (nombre y Nick será “computer”). Las clases q implementan en el juego deber tener un arreglo privado bidimensional de enteros con un tamaño de 3 por 3 que simulara el tablero del juego. El constructor debe inicializar el arreglo con creso: Los jugadores tiene un orden de juego especifico, el primer jugado realiza un movimiento y mostrara un 1 en el cuadro que desee escoger (ver nota al Final).
Cuando toque al segundo jugador, este realizara un movimiento en el cuadro que desea escoger y mostrara un 2 *. Cada movimiento debe validarse para q se realice un cuadro vacío, mostrando los mensajes de advertencias correspondientes.
Al realizar cada movimiento el juego debe determinar si se ha ganado o existe un empate. Las clases deben tener atributos, métodos, constructores y sobrecargas. Debe Utilizar método setter, getter, sobrecarga de métodos. Y constructores, así como una interfaz de usuario básica. Nota: La interfaz grafía de usuario puede mostrar el tablero del juego de ajedrez como un conjunto de botones con o sin imágenes ( a criterio del Programador) o un conjunto de cuadros de texto.
1. Implementamos en el editor de NetBeans IDE 6.8
Creamos los paquetes Necesarios q pide el Software
CODIGO FUENTE:
package mathias.cruz.gudinho.hernandez;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Maticruzgudinhernad extends JFrame implements ActionListener {
//Etiquetas del JFrame
JLabel l1, l2, l3, l4, l5;
// Cuadros de Textos
JTextField jugador1, jugador2;
//Opciones de radio
JRadioButton computador, jugador;
ButtonGroup opciones;
//Boton empezar a jugar
JButton jugar;
public Maticruzgudinhernad() {
crearJugadores();
}
public void crearJugadores() {
setTitle("Tres en Raya");
//setLocationRelativeTo(null);
setSize(300, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(8, 2));
// Creacion de las etiquetas de la pantalla y asignamos tamaño de la etiqueta
l1 = new JLabel("* JUGADORES *");
l1.setSize(100, 20);
l2 = new JLabel("Jugador # 1");
l2.setSize(100, 20);
l4 = new JLabel("Jugador # 2");
l4.setSize(100, 20);
//Fuentes a los controles JLabel
l1.setFont(new Font("Algerian", 1, 18));
l1.setForeground(Color.blue);
l2.setFont(new Font("Algerian", 1, 14));
l4.setFont(new Font("Algerian", 1, 14));
// Creacion de los Cuadros de texto para el ingreso de nombres
jugador1 = new JTextField("");
jugador1.setSize(50, 20);
jugador2 = new JTextField("");
jugador2.setSize(50, 20);
// Opciones, creacion de radio button
opciones = new ButtonGroup();
computador = new JRadioButton("Computador");
computador.setSelected(true);
computador.setSize(100, 20);
jugador = new JRadioButton("Jugador");
jugador.setSize(100, 20);
opciones.add(computador);
opciones.add(jugador);
// Boton para jugar
jugar = new JButton("Jugar");
jugar.setSize(50, 20);
// Añadimos el listener al boton
jugar.addActionListener(this);
// Añadimos los controles al JFrame
add(l1);
add(new Label());
add(l2);
add(jugador1);
add(l4);
add(new Label());
add(computador);
add(new Label());
add(jugador);
add(jugador2);
add(jugar);
setVisible(true);
}
// Metodos para manejar Eventos//
public void actionPerformed(ActionEvent e) {
//Validar que se haya ingresado el nick al jugador 1
if (jugador1.getText().trim().equals("")) {
JOptionPane.showMessageDialog(null, "InGrEsE El NiCk al JuGaDOr 1");
} else {
//Validar que el segundo jugador haya ingresado nombre si se selecciono jugar
contra otro jugador
if (jugador.isSelected() && jugador2.getText().trim().equals("")) {
JOptionPane.showMessageDialog(null, "InGrEsE El NiCk al JuGaDOr 2");
} else {
//Sortear quien juega primero aleatoriamente
int empieza = (int) (Math.random() * 2 + 1);
String jug1,jug2;
//Cojemos el nombre del jugador que va a empezar
//Si es uno escojemos el nombre que ingreso el primer jugador
if (empieza == 1) {
jug1 = jugador1.getText();
if (jugador.isSelected() && !jugador2.getText().trim().equals("")) {
jug2=jugador2.getText();
} else {
jug2="Computer";
}
} else {
//Si es 2 se verifica si se juga contra otro jugador o contra la computadora
if (jugador.isSelected() && !jugador2.getText().trim().equals("")) {
jug1=jugador2.getText();
} else {
jug1="Computer";
}
jug2 = jugador1.getText();
}
JOptionPane.showMessageDialog(null, "Empieza el jugador: "+jug1);
setVisible(false);
new Raya(jug1,jug2);
}
}
}
public static void main(String[] args) {
new Maticruzgudinhernad();
}
}
Tenemos L a Clase Raya:
package mathias.cruz.gudinho.hernandez;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Raya extends JFrame implements ActionListener {
// Botones
JButton botones[][];
JPanel p1;
//Tamaño del Tablero de Tres en Raya
int a = 3;
//Matriz del tablero de Tres en raya
private int tablero[][];
//Iconos para los botones
ImageIcon equis, circulo;
//Nicks de los jugadores
String nick1, nick2;
int turno = 1;
public Raya(String jug1, String jug2) {
nick1 = jug1;
nick2 = jug2;
System.out.println(jug1);
System.out.println(jug2);
dibujarTablero();
jugar(nick1);
}
public void dibujarTablero() {
//Crear matriz de posiciones del tablero
tablero = new int[a][a];
// Crear iconos para los botones
equis = new ImageIcon("src/mathias/cruz/gudinho/hernandez/equis.gif");
circulo = new ImageIcon("src/mathias/cruz/gudinho/hernandez/circulo.gif");
//Iniciar todo el tablero en cero (Si esta cero se puede escojer si es 1 no se puede
escojer
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
tablero[i][j] = 0;
}
}
setTitle("Tres en Raya");
//setLocationRelativeTo(null);
setSize(200, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(a, 2));
botones = new JButton[a][a];
// Creacion de los botones del tablero
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
//Creamos el boton
botones[i][j] = new JButton();
//Le damos el oyente de evento
botones[i][j].addActionListener(this);
//Le damos un nombre a la accion
botones[i][j].setActionCommand("" + i + j);
botones[i][j].setSize(200, 200);
add(botones[i][j]);
}
}
setVisible(true);
}
// Metodo para presentar el jugador que tiene el turno de jugar
public void jugar(String jugador) {
JOptionPane.showMessageDialog(null, "Turno: " + jugador);
}
//Variables que sirven para saber si un jugador ha hecho tres en raya en alguna
// de dos forma vertical, horizontal
boolean ganaron1, ganaron2;
// Variable para controlar si algun jugador ya gano
boolean ganaron = false;
public void validarTablero() {
int i, j;
for (i = 0; i < a; i++) {
ganaron1 = true;
ganaron2 = true;
for (j = 0; j < a - 1; j++) {
//validar si se hizo tres en raya de forma horizontal
ganaron1 = (tablero[i][j] == tablero[i][j + 1]) && ganaron1 && tablero[i][j] !=
0;
//validar si se hizo tres en raya de forma vertical
ganaron2 = (tablero[j][i] == tablero[j + 1][i]) && ganaron2 && tablero[j][i] !=
0;
}
//Si se hizo tres en raya de forma horizontal o vertical presentamos un mensaje
if (ganaron1 || ganaron2) {
//Asignamos true a la variable ganaron para indicar que un jugador ya gano
ganaron = true;
//Si el turno era 1 gana el jugador 1 caso contrario el jugador 2
if (turno == 1) {
JOptionPane.showMessageDialog(null, "Winner!! Jugador: " + nick1);
break;
} else {
JOptionPane.showMessageDialog(null, "Winner!! Jugador: " + nick2);
break;
}
}
}
//Si no se hizo tres en raya de forma horizontal valido si se hizo tres en raya
// de forma diagonal
if (!ganaron) {
if ((tablero[0][0] == tablero[1][1] && tablero[1][1] == tablero[2][2] &&
tablero[1][1] != 0) || (tablero[2][0] == tablero[1][1] && tablero[1][1] == tablero[0][2]
&& tablero[1][1] != 0)) {
//Asignamos true a la variable ganaron para indicar que un jugador ya gano
ganaron = true;
//Si el turno era 1 gana el jugador 1 caso contrario el jugador 2
if (turno == 1) {
JOptionPane.showMessageDialog(null, "Wiiner!!! Jugador: " + nick1);
} else {
JOptionPane.showMessageDialog(null, "Winner!!!! Jugador: " + nick2);
}
}
}
}
// Metodo para controlar el turno de juego
public void verificarTurno() {
// Verificar a quien le toca jugar
if (turno == 1) {
turno = 2;
jugar(nick2);
} else {
turno = 1;
jugar(nick1);
}
}
//Variable para saber si se escogio un cuadro vacío del tablero
boolean correcto;
// Metodo oyente para eventos de dar clic en los botones del tabler0
public void actionPerformed(ActionEvent e) {
if (!ganaron) {
correcto=false;
//Preguntar por que boton se dio clic y si esta
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
if (e.getActionCommand().equals("" + i + j)) {
if (tablero[i][j] == 0) {
tablero[i][j] = turno;
if (turno == 1) {
botones[i][j].setIcon(equis);
} else {
botones[i][j].setIcon(circulo);
}
correcto=true;
} else {
JOptionPane.showMessageDialog(null,"Debe escoger otro cuadro este
ya ha sido escogido");
}
}
}
}
if(correcto){
validarTablero();
if (!ganaron) {
verificarTurno();
}
}
}
}
}
Bueno el principal Objetivo del Proyecto es crecer como estudiantes de la UPS. En base a
nuestro desempeño q le estamos poniendo a este proyecto el cual nos servirá para un futuro
ponernos nuestras metas. El Principal objetivo del proyecto es cumplir con las necesidades q
este pida y dar con todos los requerimientos posibles ya sean gráfica, etc.
En si tenemos las dudas q se la preguntaremos a usted Ing.! Sobre el tema de los aleatorios
en la pizarra del juego de tres en raya.