Los avatares para el juego dramático en entornos virtuales
Informe Final Del Proyecto Poo
1. ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA
ELECTRICA Y ELECTRÓNICA
PROGRAMACION ORIENTADA A
OBJETOS
TEMA: PROYECTO POOGAME
CRISTIAN PAÚL PÉREZ VALLE
ANDREA PATRICIA PINTO
2010-01-09
.
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 1 -
2. PROYECTO POOGAME
INDICE
OBJETIVOS……………………………………. 3
INTRODUCCION…………………………….. 3
PROGRAMA BUS
Introducción…………………………………. 4
Desarrollo…………………………………….. 4
PROGRAMA BLACKJACK
Introducción……………………………….. 16
Desarrollo……………………………………16
PROGRAMA TIC-TAC-TOE
Introducción………………………………. 29
Desarrollo…………………….……………. 29
CONCLUSIONES………………………… 35
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 2 -
3. PROYECTO POOGAME
OBJETIVO:
Afianzar los conocimientos adquiridos este semestre, desarrollado aplicaciones prácticas en el
campo de la Programación Orientada a Objetos.
Compartir con la comunidad el desarrollo de nuestras aplicaciones.
Aprender sobre la implementación de las interfaces graficas.
INTRODUCCION
Para la elaboración de este proyecto de utilizo el IDE Eclipse, ya que nos brinda todas las
facilidades de Java que ofrece toda la funcionalidad de un lenguaje potente, pero sin las
características menos usadas y más confusas de éstos. C++ es un lenguaje que adolece de falta de
seguridad, pero C y C++ son lenguajes más difundidos, por ello Java se diseñó para ser parecido a
C++ y así facilitar un rápido y fácil aprendizaje.
Java elimina muchas de las características de otros lenguajes como C++, para mantener reducidas
las especificaciones del lenguaje y añadir características muy útiles.
Java reduce en un 50% los errores más comunes de programación con lenguajes como C y C++ al
eliminar muchas de las características de éstos, entre las que destacan:
aritmética de punteros
no existen referencias
registros (struct)
definición de tipos (typedef)
macros (#define)
necesidad de liberar memoria (free)
Además, el intérprete completo de Java que hay en este momento es muy pequeño, solamente
ocupa 215 Kb de RAM.
JAVA ORIENTADO A OBJETOS
Java implementa la tecnología básica de C++ con algunas mejoras y elimina algunas cosas para
mantener el objetivo de la simplicidad del lenguaje. Java trabaja con sus datos como objetos y con
interfaces a esos objetos. Soporta las tres características propias del paradigma de la orientación a
objetos: encapsulación, herencia y polimorfismo. Las plantillas de objetos son llamadas, como en
C++, clases y sus copias, instancias. Estas instancias, como en C++, necesitan ser construidas y
destruidas en espacios de memoria.
Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolución dinámica de
métodos. Esta característica deriva del lenguaje Objective C, propietario del sistema operativo
Next. En C++ se suele trabajar con librerías dinámicas (DLLs) que obligan a recompilar la aplicación
cuando se retocan las funciones que se encuentran en su interior. Este inconveniente es resuelto
por Java mediante una interfaz específica llamada RTTI (RunTime Type Identification) que define la
interacción entre objetos excluyendo variables de instancias o implementación de métodos. Las
clases en Java tienen una representación en el runtime que permite a los programadores
interrogar por el tipo de clase y enlazar dinámicamente la clase con el resultado de la búsqueda
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 3 -
4. PROGRAMA BUS
INTRODUCCCION
Este programa simula a un terminal terrestre, en donde solo tenemos un bus y podemos ingresar
pasajeros, bajar pasajeros, buscar pasajeros, llevar una lista de pasajeros entre otras cosas.
Esta diseñado en una interfaz grafica, por lo cual se facilita su utilización.
DESARROLLO
Creación de las Clases
Todas las clases fueron creadas dentro de un paquete denominado terrestre.
El elemento básico de la programación orientada a objetos en Java es la clase. Una clase define la
forma y comportamiento de un objeto.
Para crear una clase sólo se necesita un archivo fuente que contenga la palabra clave reservada
class seguida de un identificador legal y un bloque delimitado por dos llaves para el cuerpo de la
clase.
Creación de la clase Aplica
En las primeras líneas se importan clases de los paquetes
A continuación se define a la clase Aplica, para luego definir todas las variables que se van a utilizar.
En este caso se utilizo un menú para generar todas las opciones requeridas por el usuario, para esto se
utilizo la sentencia switch ya que existen ocasiones o programas donde se exige evaluar muchas condiciones
a la vez, en estos casos, o se usan una condición compuesta muy grande o se debe intentar convertir el
problema a uno que se pueda resolver usando la instrucción switch();
JOptionPane.showMessageDialog simplemente nos imprime un mensaje en una ventana
JOptionPane.showInputDialog nos muestra un mensaje a elegir en una ventana, se debe declarar una
variable antes para que se le asigne todo el valor de la cadena o de el entero que se va a introducir por
teclado.
La instrucción switch() es una instrucción de decisión múltiple, donde el compilador prueba o busca el valor
contenido en una variable contra una lista de constantes ints o chars, cuando el computador encuentra el
valor de igualdad entre variable y constante, entonces ejecuta el grupo de instrucciones asociados a dicha
constante, si no encuentra el valor de igualdad entre variable y constante, entonces ejecuta un grupo de
instrucciones asociados a un default, aunque este último es opcional. Se utilizo el switch para generar el
menú de las opciones principales del bus.
El Integer.parseInt Convierte una cadena de texto en un número entero.
La clase StringTokenizer nos ayuda a dividir un string en substrings o tokens, en base a otro string
(normalmente un carácter) separador entre ellos denominado delimitador.
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 4 -
5. Supongamos un string consistente en el nombre, y los dos apellidos de una persona separados por espacios
en blanco. La clase StringTokenizer nos ayuda a romper dicho string en tres substrings basado en que el
carácter delimitador es un espacio en blanco.
La sentencia try define el ámbito de sus manejadores de excepción asociados. Se pueden asociar
manejadores de excepción a una sentencia try proporcionando uno o más bloques catch directamente
después del bloque try. En otras palabras la sentencia try nos proporciono las validaciones necesarias en el
ingreso de datos.
try {
...
} catch ( . . . ) {
No puede haber ningún código entre el final de la sentencia try y el principio de la primera
sentencia catch. La forma general de una sentencia catch en Java es esta.
Se puede apreciar que el break, el catch, y el system.exit son comandos para salir del entorno java.
Y por último la sentencia if solo nos proporciona condicionamientos, la sentencia solo se ejecutara
siempre y cuando sea verdadera, un ejemplo en el proyecto bus es al validar la edad de los
pasajeros.
package terrestre;
/**
* Interacción entre las clases Bus y Pasajero
*
*/
import java.util.StringTokenizer;
import javax.swing.JOptionPane;
public class Aplica {
public static void main(String[] args) {
try {
int nj = 0;
JOptionPane.showMessageDialog (null,"BUS");
int z = 20;
Bus a=new Bus("ESCOLAR",z);
for(;;)
{
String ops = JOptionPane.showInputDialog (
null,"MENU: nn1. Subir Pasajeron" +
"2. Bajar Pasajeron" +
"3. Total de Pasajerosn" +
"4. Listado de los Pasajerosn" +
"5. Promedio de edad de los Pasajerosn" +
"6. Buscar Pasajeron" +
"7. Salirn");
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 5 -
6. int an = Integer.parseInt(ops);
switch(an) {
case 1:
try {
JOptionPane.showMessageDialog ( null,"Ingrese
Pasajero");
String st = JOptionPane.showInputDialog ( null,"El
Pasajero debe ser ingresado de la siguiente forma:n"
"nombre_edad","Ejemplo: Andres_21");
StringTokenizer str = new StringTokenizer(st, "_");
if ((str.countTokens() > 2) || (str.countTokens() < 2))
{
JOptionPane.showMessageDialog ( null,"FAVOR LLENE TODOS LOS
CAMPOS!!!");
}
String nombre = str.nextToken();
int edad = Integer.parseInt(str.nextToken());
if (edad > 100 || edad < 0) {
JOptionPane.showMessageDialog (null,"edad mal ingresada");
}
else{
Pasajero b = new Pasajero();
b.setNombre(nombre);
b.setEdad(edad);
a.subirPasajero(b);
}
} catch (Exception e) {
JOptionPane.showMessageDialog (null,"MAL INGRESADO!!!");
}
break;
case 2:
String nnj = JOptionPane.showInputDialog
(null,"Ingrese el numero de puesto del pasajero:
");
try {
nj= Integer.parseInt(nnj);
}catch(Exception e){
JOptionPane.showMessageDialog (null,"INGRESE NUMERO NO
LETRAS!!!");
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 6 -
7. }
if(nj<0) {
JOptionPane.showMessageDialog (null,"OJO, Valores Negativos
NO Aceptados");
}
a.bajarPasajero(nj);
break;
case 3:
JOptionPane.showMessageDialog (null,"El numero de pasajeros
del bus es: " + a.totalPasajeros());
break;
case 4:
JOptionPane.showMessageDialog (null,"Listado de pasajeros: ");
int i = 1;
for (String dato: a.listaPasajeros())
{
if (dato == "") {
}
else{
JOptionPane.showMessageDialog (null,"Pasajero "+ (i )+ " : " +
dato);
i++;
}
}
break
;
case 5:
JOptionPane.showMessageDialog (null,"EL PROMEDIO DE EDAD DE ESTE BUS ES "
+ a.promedioEdades() + "AÑOS");
break;
case 6:
String cad = null;
cad = JOptionPane.showInputDialog (null,"Ingrese el nombre del pasajero
a buscar");
try {
}catch (Exception e) {}
for (String dato: a.listaPasajeros())
{
if (dato.equals(cad)) {
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 7 -
8. JOptionPane.showMessageDialog (null,"LO ENCONTRAMOS!!! El
pasajero está en este bus");
}
}
JOptionPane.showMessageDialog (null,"Búsqueda Finalizada");
break;
case 7:
{
JOptionPane.showMessageDialog
(null,"ESPERO QUE ESTE PROGRAMA HAYA SIDO DE SU AGRADO");
System.exit(0);
}break;
default:
JOptionPane.showMessageDialog(null,"Seleccion
erroneannnElija nuevamente una opcion del 1 al 7");
}
}
}catch (Exception e){}
}
}
Creación de la Clase Pasajero
Al principio del programa de debe definir la clase Pasajero, a continuación se debe declarar todas
las variables que necesitemos utilizar (lo citado con color azul son los comentarios de cada paso en
el programa)
El IDE llama a los métodos o funciones miembro que empiezan por get, para mostrar en los
editores los valores de las propiedades. Si el programador cambia el valor de una propiedad se
llama a un método cuyo nombre empieza por set.
getter method: lee el valor de la propiedad
setter method: cambia el valor de la propiedad.
public class Pasajero {
/* campo para el nombre del <code> Pasajero </code> */
private String nombre;
/* campo para la edad del <code> Pasajero </code> */
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 8 -
9. private int edad;
public Pasajero() {
}
/**
* Inicializa los campos del objeto <code> Pasajero </code>
con valores dados
*
* @param nombre contiene el valor para el campo <code>
nombre </code>
* @param edad contiene el valor para el campo <code> edad </code>
*/
public Pasajero(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
/**
* * Devuelve el valor del campo <code> edad </code>
*
* @return valor del campo <code> edad </code>
*/
public int getEdad() {
return edad;
}
/**
* Asigna el valor del campo <code> edad </code> de un
* <code> Pasajero </code>
*
* @param edad contiene el valor de un campo
* <code> edad </code>
*/
public void setEdad(int edad) {
this.edad = edad;
}
/**
* Devuelve el valor del campo <code> nombre </code>
*
* @return valor del campo <code> nombre </code>
*/
public String getNombre() {
return nombre;
}
/**
* Asigna el valor del campo <code> nombre </code> de un
* <code> Pasajero </code>
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 9 -
10. *
* @param nombre contiene el valor de un campo
* <code> nombre </code>
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
Creación de la Clase Bus
Al principio del programa de debe publicar la clase Bus, a continuación se debe declarar todas las
variables que necesitemos utilizar.
Se poner todos los paquetes necesarios en este caso se utilizo el paquete javax.swing.*. Un
paquete es una agrupación de clases que tiene una finalidad relacionada.
De la misma manera lo comentado en color azul y verde nos indica que realizamos paso a paso.
package terrestre;
import javax.swing.*;
/**
* Manipula objetos de tipo <code> Bus </code>
*
*/
public class Bus {
/* campo para el nombre del <code> Bus </code> */
private String nombre;
/* campo para el numero máximo de pasajeros del <code> Bus </code>
*/
private int max;
/* campo para el numero de pasajeros del <code> Bus </code> */
private int numeroPasajeros;
/* campo para el arreglo de pasajeros del <code> Bus </code> */
private Pasajero pasajeros[];
/**
* inicializa los campos del objeto <code> Bus </code>
*/
public Bus() {
}
/**
* inicializa los campos del objeto <code> Bus </code> con valores
dados
*
* @param nombre contiene el valor para el campo <code> nombre
</code>
* @param max contiene el valor para el campo <code> max </code>
* @param numeroPasajeros contiene valor de campo <code>
numeroPasajeros </code>
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 10 -
11. * @param pasajeros contiene el valor para campo <code> pasajeros
</code>
*/
public Bus(String nombre, int max, int numeroPasajeros, Pasajero[]
pasajeros) {
this.nombre = nombre;
this.max = max;
this.numeroPasajeros = numeroPasajeros;
this.pasajeros = pasajeros;
}
/**
* inicializa los campos del objeto <code> Bus </code> con valores
dados
*
* @param nombre contiene el valor para el campo <code> nombre
</code>
* @param max contiene el valor para el campo <code> max </code>
*/
public Bus(String nombre, int max) {
this.nombre = nombre;
this.max = max;
this.numeroPasajeros = 0;
this.pasajeros = new Pasajero[max];
}
/**
* Devuelve el valor del campo <code> max </code>
*
* @return valor del campo <code> max </code>
*/
public int getMax() {
return max;
}
/**
* Asigna el valor del campo <code> max </code> de un
* <code> Bus </code>
*
* @param max contiene el valor de un campo
* <code> max </code>
*/
public void setMax(int max) {
this.max = max;
}
/**
* Devuelve el valor del campo <code> nombre </code>
*
* @return valor del campo <code> nombre </code>
*/
public String getNombre() {
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 11 -
12. return nombre;
}
/**
* Asigna el valor del campo <code> nombre </code> de un
* <code> Bus </code>
*
* @param nombre contiene el valor de un campo
* <code> nombre </code>
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* Devuelve el valor del campo <code> numeroPasajeros </code>
*
* @return valor del campo <code> numeroPasajeros </code>
*/
public int getNumeroPasajeros() {
return numeroPasajeros;
}
/**
* Asigna el valor del campo <code> numeroPasajeros </code> de un
* <code> Bus </code>
*
* @param numeroPasajeros contiene el valor de un campo
* <code> numeroPasajeros </code>
*/
public void setNumeroPasajeros(int numeroPasajeros) {
this.numeroPasajeros = numeroPasajeros;
}
/**
* Devuelve el valor del campo <code> pasajeros </code>
*
* @return valor del campo <code> pasajeros </code>
*/
public Pasajero[] getPasajeros() {
return pasajeros;
}
/**
* Asigna el valor del campo <code> pasajeros </code> de un
* <code> Bus </code>
*
* @param pasajeros contiene el valor de un campo
* <code> pasajeros </code>
*/
public void setPasajeros(Pasajero[] pasajeros) {
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 12 -
13. this.pasajeros = pasajeros;
}
/**
* Llena con valores null al vector <code> pasajeros </code>
*/
public void nullCadena() {
for (int i = 0; i < max; i++) {
pasajeros[i] = null;
}
}
/**
* Agrega un pasajero al vector <code> pasajeros </code>
* de la case <code> Bus </code>
*
* @param valuePasajero contiene el nombre y la edad del pasajero
que
* se sube al <code> Bus </code>
*/
public void subirPasajero (Pasajero valuePasajero){
if (numeroPasajeros < max) {
for (int z = 0; z < max; z++) {
if (pasajeros[z] == null) {
pasajeros[z] = valuePasajero;
numeroPasajeros++;
z = max;
}
}
} else{
JOptionPane.showMessageDialog(null,"BUS lleno");
}
}
/**
* Resta un pasajero al vector <code> pasajeros </code>
* de la case <code> Bus </code>
*
* @param lugarPasajero contiene el número de puesto del pasajero
* que se baja del <code> Bus </code>
*/
public void bajarPasajero (int lugarPasajero){
if (numeroPasajeros == 0) {
JOptionPane.showMessageDialog(null,"BUS vacío");
} else{
if (lugarPasajero > max) {
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 13 -
14. JOptionPane.showMessageDialog(null,"Ese puesto
excede los existentes");
}
else{
if (lugarPasajero <= 0) {
JOptionPane.showMessageDialog(null,"El
puesto 0 no existe");
}
else {
if(pasajeros[lugarPasajero - 1] == null) {
JOptionPane.showMessageDialog(null,"En
ese puesto ya no hay nadie");
}else {
pasajeros[lugarPasajero -1] = null;
numeroPasajeros --;
}
}
}
}
}
/**
* Devuelve el total de pasajeros que se encuentran
* en el <code> Bus </code>
*
* @return número de Pasajeros en el <code> Bus </code>
*/
public int totalPasajeros() {
return (numeroPasajeros);
}
/**
* Devuelve la lista de pasajeros que se encuentran
* en el <code> Bus </code>
*
* @return nombres de los Pasajeros en el <code> Bus </code>
*/
public String[] listaPasajeros(){
String nombre[] = new String[max];
for (int i = 0; i < max; i++){
if (pasajeros[i] == null) {
nombre[i] = "";
}
else {
nombre[i] = pasajeros[i].getNombre();
}
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 14 -
15. }
return nombre;
}
/**
* Devuelve el promedio de edades de los pasajeros que se
encuentran
*
en el <code> Bus </code>
*
* @return promedio de edades de los pasajeros en el <code> Bus
</code>
*/
public float promedioEdades(){
float sumaPromedio = 0;
for (int i = 0; i < numeroPasajeros; i++){
sumaPromedio += pasajeros[i].getEdad();
}
return sumaPromedio / numeroPasajeros;
}
}
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 15 -
16. PROGRAMA BLACKJACK
INTRODUCCION
Este programa simula el juego de 21, es decir genera las 52 cartas de un naipe al azar para cuantos
jugadores se disponga, realiza todo lo que usualmente se hace en el juego, genera sus apuestas,
nos muestra cuanto dinero hay en la mesa entre otras cosas, de igual esta diseñado en una
interfaz grafica, por lo cual se facilita su utilización.
DESARROLLO
Creación de las Clases
Todas las clases fueron creadas dentro de un paquete denominado ocio.
El elemento básico de la programación orientada a objetos en Java es la clase. Una clase define la
forma y comportamiento de un objeto.
Para crear una clase sólo se necesita un archivo fuente que contenga la palabra clave reservada
class seguida de un identificador legal y un bloque delimitado por dos llaves para el cuerpo de la
clase.
Creación de la clase Aplica
Al principio del programa de debe definir la clase Aplica, a continuación se debe declarar todas las
variables que necesitemos utilizar.
En este caso se utilizo un menú para generar todas las opciones requeridas por el juego, para esto se utilizo
la sentencia switch();
JOptionPane.showMessageDialog simplemente nos imprime un mensaje en una ventana
JOptionPane.showInputDialog nos muestra un mensaje a elegir en una ventana, se debe declarar una
variable antes para que se le asigne todo el valor de la cadena o de el entero que se va a introducir por
teclado. Se utilizo el switch para generar el menú de las opciones principales del juego y también para sailr
de él.
El Integer.parseInt Convierte una cadena de texto en un número entero.
La sentencia try define el ámbito de sus manejadores de excepción asociados. Se pueden asociar
manejadores de excepción a una sentencia try proporcionando uno o más bloques catch directamente
después del bloque try. En otras palabras la sentencia try nos proporciono las validaciones necesarias en el
ingreso de datos, como por ejemplo que en el menú no se ingresen letras.
No puede haber ningún código entre el final de la sentencia try y el principio de la primera
sentencia catch. La forma general de una sentencia catch en Java es esta.
Se puede apreciar que el break, el catch, y el system.exit son comandos para salir del entorno java.
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 16 -
17. Y por último la sentencia if solo nos proporciona condicionamientos, la sentencia solo se ejecutara
siempre y cuando sea verdadera, un ejemplo es momento de ingresar en el número de jugadores,
éste debe ser mayor o igual a dos, en caso contrario se retorna al menú principal.
package ocio;
import javax.swing.JOptionPane;
public class Aplica {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,"JUGUEMOS BLACKJACK");
Mesa temp = new Mesa(0);
int indiceMenu = 0;
int a;
int numberJug = 0;
boolean ope1 = false, ope2 = false;
String pa = "";
do
for(;;){
String men = JOptionPane.showInputDialog(null,"tt MENU:
ntt1. Quiénes vamos a jugar?" +
"... ntt2. Repartir cartasn" +
"tt3. Desea más cartas...n" +
"tt4. Ver mis cartasn" +
"tt5. Conocer el estado de la mesan" +
"tt6. Ayudan" +
"tt7. Salirn");
try {
indiceMenu = Integer.parseInt(men);
}catch(NumberFormatException e){
JOptionPane.showMessageDialog(null,"Las letras no
se admiten como opciones" +
" del menú");
indiceMenu=8;
}
switch(indiceMenu) {
case 1:
boolean number = true;
do{
String me =
JOptionPane.showInputDialog(null,"Cuántas personas " +
"participarán??? ");
try {
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 17 -
18. numberJug = Integer.parseInt
(me);
number = false;
}catch(Exception e) {
JOptionPane.showMessageDialog(null,"ERROR!!!! nDigitaste " +
"mal? Recuerda
que es un número el " +
"que debes
ingresarn");
}
if(numberJug > 0 && numberJug < 2) {
number = true;
JOptionPane.showMessageDialog(null,"nDebe haber más de un " +
"jugadorn Repite el
proceso por favor");
}
if(numberJug < 0) {
number = true;
JOptionPane.showMessageDialog(null,"nNo puedes digitar " +
"números
negativos");
}
}while(number);
temp = new Mesa(numberJug);
ope1 = true;
break;
case 2:
if(!ope1) {
JOptionPane.showMessageDialog(null,"Primero menciona quién va a " +
"jugar");
break;
}
else {
for(int i=0; i < numberJug; i++) {
temp.getArregloJugador(i).setArregloCartas();
}
JOptionPane.showMessageDialog(null,"Las cartas han sido Repartidas!" +
"nnnnnnnn");
ope2=true;
}
break;
case 3:
if(ope1) {
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 18 -
19. if(!ope2){
JOptionPane.showMessageDialog(null,"Primero se deben repartir las" +
" cartas");
break;
}
else {
a = capturarPassword (numberJug,
temp, pa);
if(a >= 0 &&
temp.getArregloJugador(a).total() <= 21) {
JOptionPane.showMessageDialog(null,"Bienvenido " +
temp.getArregloJugador(a).getNombre());
JOptionPane.showMessageDialog(null,"Su total actual es de: " +
temp.getArregloJugador(a).total());
while(temp.getArregloJugador(a).preguntar()) {
temp.getArregloJugador(a).setCarta();
if(
temp.getArregloJugador(a).total()<=21)
JOptionPane.showMessageDialog(null,"Su total es de: " +
temp.getArregloJugador(a).total());
else {
JOptionPane.showMessageDialog(null,"Ya excedio el " +
"limite
de 21 con "
+
temp.getArregloJugador(a).total());
break;
}
}
}
else
JOptionPane.showMessageDialog(null,"Password mal Ingresado!");
}
break;
}
else{
JOptionPane.showMessageDialog(null,"Primero menciona quién va a " +
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 19 -
20. "jugar");
}
break;
case 4:
if(ope1) {
if(!ope2) {
JOptionPane.showMessageDialog(null,"Primero se deben repartir" +
" las cartasnn ");
}
else{
a = capturarPassword (numberJug,
temp, pa);
if(a >= 0)
temp.getArregloJugador(a).verCartas();
else
JOptionPane.showMessageDialog(null,"Contraseña incorrecta!");
}
break;
}
else {
JOptionPane.showMessageDialog(null,"Primero menciona quién va a " +
"jugar");
}
break;
case 5:
if(ope1){
if(!ope2){
JOptionPane.showMessageDialog(null,"Primero debe repartir cartas");
break;
}
else {
a=-1;
String m =
JOptionPane.showInputDialog(null,"Ingrese el password: ");
try {
pa = m;
}catch(Exception e) {
JOptionPane.showMessageDialog(null,"Error en la captura!");
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 20 -
21. }
if(pa.equals(temp.getArregloJugador(numberJug-1).getPass())) {
for(int i = 0; i <
numberJug; i++) {
temp.getArregloJugador(i).verCartas();
}
JOptionPane.showMessageDialog(null,"El ganador fue: " +
comparaJugadores(temp, numberJug) +
" y gano n" +
temp.sumaApuestas(numberJug));
indiceMenu=6;
}
else {
JOptionPane.showMessageDialog(null,"Usted no puede abrir la " +
"Mesa, El
Banco es el unico " +
"autorizado!");
}
break;
}
}
else {
JOptionPane.showMessageDialog(null,"Primero menciona quién va a " +
"jugar");
}
break;
case 6:
JOptionPane.showMessageDialog(null,"tttt
NO ES DIFÍCIL JUGAR BLACK " +
"JACK... Te ofrecemos una
ayudann" +
"1. Te recomendamos seguir los
el orden del menún" +
"2. Debes tratar de alcanzar la
suma de tus " +
"cartas cercano a 21 pero si lo
superas " +
"pierdes el juego
automáticamenten" +
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 21 -
22. "3. El As puede tomar el valor
de uno u oncen" +
"4. No te preocupes por los
resultados podrás" +
"mirarlo en la opción del menú
correspondiente" +
"conocer estado de la mesan" +
"5. GRACIAS POR JUGAR ES UN " +
"GUSTO SERVIRTEn");
break;
case 7:
{
JOptionPane.showMessageDialog (null,"ESPERO
QUE ESTE PROGRAMA HAYA SIDO DE SU AGRADO");
System.exit(0);
}break;
default:
JOptionPane.showMessageDialog(null,"Opción
Incorrecta, escoja de nuevo");
}
}while(indiceMenu!=7);
}
public static String comparaJugadores(Mesa a, int numberJug) {
int altoPuntaje = a.getArregloJugador(0).total();
if (altoPuntaje >= 2)
altoPuntaje=0;
int winner=0;
for(int i=1;i<numberJug;i++) {
if(a.getArregloJugador(i).total()>altoPuntaje &&
a.getArregloJugador(i).total()<=21) {
altoPuntaje=a.getArregloJugador(i).total();
winner=i;
}
}
return "" + a.getArregloJugador(winner).getNombre() + " con:
" + a.getArregloJugador(winner).total();
}
public static int capturarPassword(int numberJug, Mesa temp, String
pa) {
int p=-1;
String m =JOptionPane.showInputDialog(null,"***Digita tu
password: ");
try {
pa=m;
}catch(Exception e) {
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 22 -
23. JOptionPane.showMessageDialog(null,"ERROR!!!!");
}
for(int i=0 ; i<numberJug ; i++)
if(pa.equals(temp.getArregloJugador(i).getPass())) {
p=i;
}
return p;
}
}
Creación de la Clase Carta
Al principio del programa de debe definir la clase Carta, a continuación se debe declarar todas las
variables que necesitemos utilizar.
En esta clase se generan todas las 52 cartas del que se dispone en un juego de naipes, se les
asignan los valores para que puedan sumarse posteriormente.
package ocio;
import java.util.Random;
public class Carta {
private String valor;
private String palo;
public Carta() {
Random rnd = new Random();
int x = 1;
x += (int)(rnd.nextDouble() * 13.0);
switch (x) {
case 1:
valor = "A";
break;
case 11:
valor = "J";
x = 10;
break;
case 12:
valor = "Q";
x = 10;
break;
case 13:
valor = "K";
x = 10;
break;
default:
valor =Integer.toString(x);
}
int y = 1;
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 23 -
24. y += (int)(rnd.nextDouble() * 4.0);
switch (y) {
case 1:
palo="Corazones Rojos";
break;
case 2:
palo="Diamantes";
break;
case 3:
palo="Trébol";
break;
case 4:
palo="Espadas";
break;
default:
palo = Integer.toString(y);
}
}
public int getValor() {
if(valor.equals("A"))
return 1;
else
if(valor.equals("J") || valor.equals("Q") ||
valor.equals("K"))
return 10;
return Integer.parseInt(valor);
}
public String getPalo() {
return palo;
}
}
Creación de la Clase Jugador
Al principio del programa de debe definir la clase Jugador, a continuación se debe declarar todas
las variables que necesitemos utilizar.
Luego se pude apreciar que se declaran variables ingresadas por teclado y se les asigna una letra
para facilitar su uso posteriormente.
Se utilizo arreglos para repartir las cartas a cada jugador
Un arreglo es una colección de objetos numerados del mismo tipo, en donde cada variable o celda
en el arreglo tiene un índice. Las celdas están numeradas del 0 al N-1, donde N es el número de
celdas del arreglo es decir su capacidad.
Los índices de un arreglo en Java deben estar dentro de los límites, 0 – N-1, de lo contrario se
generará un error durante la ejecución.
Java implementa los arreglos como objetos que pueden ser tratados como cualquier otro objeto.
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 24 -
25. También implementa los arrays auténticos, en vez de listas enlazadas de punteros, con
comprobación de límites, para evitar la posibilidad de sobreescribir o corromper memoria
resultado de punteros que señalan a zonas equivocadas. Estas características reducen
drásticamente el tiempo de desarrollo de aplicaciones en Java.
Además se utilizaron lazos if para generar condiciones como la de que las cartas deben sumar 21.
package ocio;
import javax.swing.JOptionPane;
public class Jugador {
private String nombre;
private String password;
private int apuesta;
private Carta[] arregloCartas;
private int numCarta;
private boolean as;
public Jugador(int nj, int i) {
this.arregloCartas = new Carta[10];
as=false;
String a = JOptionPane.showInputDialog(null,"**Digita tu
nombre: ");
nombre = a ;
String b = JOptionPane.showInputDialog(null,"**Digita tu
password: ");
password = b;
for(;;){
String c = JOptionPane.showInputDialog(null,"Tu apuesta
es...?");
int d;
try {
d=Integer.parseInt(c);
if(d < 1)
JOptionPane.showMessageDialog(null,"Te
recordamos que tus apuestas deben exceder" +
" a un dólar");
else {
apuesta = d;
break;
}
}catch(Exception e){
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 25 -
26. JOptionPane.showMessageDialog(null,"Te recordamos
que tus apuestas deben exceder" +
" a un dólar");
}
}
numCarta=1;
}
public void setArregloCartas(){
for(int i=0;i<2;i++){
this.arregloCartas[i] = new Carta();
if (this.arregloCartas[i].getValor()==1)
as=true;
}
}
public void setCarta() {
numCarta+=1;
arregloCartas[numCarta] = new Carta();
}
public int getApuesta() {
return(apuesta);
}
public String getPass() {
return password;
}
public String getNombre() {
return nombre;
}
public boolean preguntar() {
String no = JOptionPane.showInputDialog(null,this.nombre + "
¿Desea otra carta?: n S o N");
if(no .toUpperCase().equals("S")) {
return true;
}
else {
if(no.toUpperCase().equals("N")) {
return false;
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 26 -
27. }
else {
JOptionPane.showMessageDialog(null,"Su opción no es
válida");
}
return false;
}
}
public int total() {
int sum = 0;
try {
for(int i = 0 ;i <= this.arregloCartas.length; i++) {
if(this.arregloCartas[i].getValor() == 1) {
sum = 11 + sum;
as=true;
}
else
sum = this.arregloCartas[i].getValor() +
sum;
}
}catch(Exception e) {
System.out.print("");
}
if(as)
if(sum > 21)
sum -= 10;
return (sum);
}
public void verCartas() {
JOptionPane.showMessageDialog(null,""+ this.nombre + ", tus
Cartas son:");
for(int i=0 ; i <= numCarta ; i++)
JOptionPane.showMessageDialog(null,this.arregloCartas[i].getValor()
+ " " + this.arregloCartas[i].getPalo());
}
}
Creación de la clase Mesa
Al principio del programa de debe definir la clase Jugador, a continuación se debe declarar todas
las variables que necesitemos utilizar.
En esta clase se imprime la suma de todas las apuestas de los jugadores y la imprime en pantalla.
package ocio;
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 27 -
28. import javax.swing.JOptionPane;
public class Mesa {
private int apuestaTotal;
private int saldo;
private Jugador [] arregloJugador = {};
public Mesa(int nj) {
Jugador [] arregloJugador = new Jugador[nj];
try{
for(int i=0;i<nj;i++) {
JOptionPane.showMessageDialog(null,"Jugador:
" + (i+1));
arregloJugador[i] = new Jugador(nj,i);
}
}catch(Exception e) {
}
this.arregloJugador = arregloJugador;
apuestaTotal = sumaApuestas(nj);
JOptionPane.showMessageDialog(null,"la apuesta
acumulada en mesa es: $ " + apuestaTotal);
saldo = sumaApuestas(nj);
}
public Jugador getArregloJugador(int n) {
return (arregloJugador[n]);
}
public int sumaApuestas(int nj) {
int sum = 0;
try {
for(int i = 0 ;i <= nj; i++) {
sum = this.getArregloJugador(i).getApuesta()
+ sum;
}
}catch(Exception e) {
System.out.print("");
}
return (sum);
}
}
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 28 -
29. PROGRAMA TIC-TAC-TOE
INTRODUCCION
Este programa simula al juego de tres en raya en el cual participan dos personas y la que logra
completar una línea horizontal, vertical o diagonal con (x) o (0) gana, este juego fue realizado con
applets para tener una interfaz grafica en el cual se muestre el tablero.
Los applet o apliques son pequeñas aplicaciones escritas en Java que permiten obtener una gran
variedad de efectos en las páginas web. En nuestro caso nos ayudo a crear el entorno grafico
DESARROLLO
El paquete game contendrá al juego. Importamos los paquetes que sean necesarios, todos con
igual importancia pero destacan las clases del paquete javax.swing para nuestras finalidades
gráficas, tales como javax swing applet.
ActionListener es una Interface del grupo de los Listeners (escuchadores). Nos ayuda a realizar
una aqcción por ejemplo al ingresar un botón. ActionEvent invoca al método actionPerformed que
realiza las acciones programadas.
Insertamos objetos por posición x e y con largo y ancho, mientras que la clase "String" y la clase
"TextField". Se verán las operaciones básicas con tiras (Strings) y algunos métodos asociados.
package game;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Ejecutable extends JApplet implements ActionListener{
private JTextField t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
private JLabel ganador,jugador;
private JButton player,reset;
private JPanel panel1;
private String playerA,playerB;
private String dato;
public void init(){
//Creacion de los elementos
t1=new JTextField("1");
t1.disable();
t2=new JTextField("2");
t2.disable();
t3=new JTextField("3");
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 29 -
35. CONCLUSIONES
Lo más significativo a nuestro parecer fue que Java realiza verificaciones en busca de problemas
tanto en tiempo de compilación como en tiempo de ejecución. La comprobación de tipos en Java
ayuda a detectar errores, lo antes posible, en el ciclo de desarrollo. Java obliga a la declaración
explícita de métodos, reduciendo así las posibilidades de error. Maneja la memoria para eliminar
las preocupaciones por parte del programador de la liberación o corrupción de memoria.
Además, para asegurar el funcionamiento de la aplicación, realiza una verificación de los byte-
codes, que son el resultado de la compilación de un programa Java. Es un código de máquina
virtual que es interpretado por el intérprete Java. No es el código máquina directamente
entendible por el hardware, pero ya ha pasado todas las fases del compilador: análisis de
instrucciones, orden de operadores, etc., y ya tiene generada la pila de ejecución de órdenes.
Se puede modificar cualquier tipo de código fuente a una interfaz gráfica son la ayuda de swing; es
importante el entorno grafico en la mayoría de programas en Java.
Documento elaborado por: Pérez Cristian y Pinto Andrea Página - 35 -