14
Docente: Ing. Orlando Barcia Ayala Roberto Matías Edisson Gudiño Victoria Hernández Kevin Cruz

Proyecto tres en_raya_f_inal_mathias_y_grupo

Embed Size (px)

Citation preview

Docente: Ing. Orlando Barcia Ayala

Roberto Matías

Edisson Gudiño

Victoria Hernández

Kevin Cruz

*** 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();

}

}

}

}

}

Probamos el Programa!

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.

http://www.java.com/es/