Вы находитесь на странице: 1из 72

2009

Instituto Tecnológico
de Durango
Ingeniería en Sistemas
Computacionales
Taller de Investigación
II
Software Libre y sus aplicaciones
orientadas a Videojuegos.

Gustavo Higareda Soto

18/06/2009
Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Tabla de contenido
1 Introducción. .............................................................................................................................................. 4
2 Planteamiento del problema...................................................................................................................... 5
3 Justificación ................................................................................................................................................ 5
4 Objetivo ...................................................................................................................................................... 5
5 Alcances y Limitaciones .............................................................................................................................. 6
CAPITULO I. SOFTWARE LIBRE ...................................................................................................................... 7
1.1 DEFINICION DE SOFTWARE LIBRE ................................................................................................. 7
1.2 ¿EN QUE CONSISTE EL SOFTWARE LIBRE? .................................................................................... 7
1.3 VENTAJAS Y DESVENTAJAS ............................................................................................................ 8
Principales ventajas. .............................................................................................................................. 8
Desventajas ........................................................................................................................................... 8
1.4 LICENCIAS ...................................................................................................................................... 9
Licencias de Software Libre ................................................................................................................... 9
1.5 CLASIFICACION DE SOFTWARE LIBRE .................................................................................................... 10
CAPITULO II APLICACIONES DE SOFTWARE LIBRE ....................................................................................... 12
2.1 ¿Qué es software de Sistema? .............................................................................................................. 12
2.2 Software de Programación. ................................................................................................................... 12
2.3 Software de Aplicación. ......................................................................................................................... 13
CAPITULO III LOS VIDEOJUEGOS.................................................................................................................. 15
3.1 CONCEPTO ............................................................................................................................................. 15
3.2 Origen .................................................................................................................................................... 15
3.3 Géneros ................................................................................................................................................. 19
3.3.1 ¿Definición de género en un videojuego?...................................................................................... 19
3.3.2 Diferentes Géneros ........................................................................................................................ 19
Acción .................................................................................................................................................. 19
Lucha ................................................................................................................................................... 20
Juegos de acción en primera persona ................................................................................................. 21
Acción en tercera persona .................................................................................................................. 22
Infiltración ........................................................................................................................................... 22
Plataformas ......................................................................................................................................... 22

Gustavo Higareda Soto Página 2


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Árcade.................................................................................................................................................. 23
Videojuegos de deportes..................................................................................................................... 23
Sport .................................................................................................................................................... 23
Carreras ............................................................................................................................................... 24
Agilidad mental.................................................................................................................................... 24
Educación ............................................................................................................................................ 24
Aventura .............................................................................................................................................. 25
Gráfica ................................................................................................................................................. 25
3.4 Los Videojuegos compatibles con Software Libre ................................................................................. 25
3.4.1 ¿Qué ofrece el software libre para la programación de videojuegos? .......................................... 26
Capítulo IV El software libre orientado a los videojuegos........................................................................... 27
4.1 Ventajas de un videojuego con código abierto ................................................................................. 27
4.2 Código fuente de juegos en diferentes lenguajes ............................................................................. 28
4.2.1- java ............................................................................................................................................ 28
4.2.2 Cuatro en raya ............................................................................................................................ 28
4.2.3 Buscaminas ................................................................................................................................. 33
CAPITULO V Metodología. ........................................................................................................................... 37
CAPITULO VI Resultados. ............................................................................................................................. 38
CONCLUSIONES ........................................................................................................................................... 42
ANEXOS ....................................................................................................................................................... 43
Anexo 1 .................................................................................................................................................... 43
Anexo 2 .................................................................................................................................................... 43
Anexo 3 .................................................................................................................................................... 44
Anexo 4 .................................................................................................................................................... 46
Anexo 5 .................................................................................................................................................... 62
Anexo 7 .................................................................................................................................................... 65
Anexo 8 .................................................................................................................................................... 67
Referencias. ................................................................................................................................................. 72

Gustavo Higareda Soto Página 3


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

1 Introducción.

Desde el principio de la humanidad el juego ha sido fundamental para el desarrollo del


ser humano desde que somos niños, jugando con una pelota, un papel y muchos otros
objetos, sin importar lo que fuera ya que el ser humano es capaz de transformar un
papel en un avión. Pero esto ha cambiado con el tiempo ya que con los avances de la
tecnología a lo largo de los años se crearon los primeros videojuegos con una
rudimentaria caja de madera, osciloscopio y unas cuantas palancas así nace el primer
videojuego llamado pong [13] siendo el pionero de una de las industrias más grandes
en la actualidad.
Desde el punto de vista teórico el tema se puede tornar un tanto complejo pero para
algunos en el instante que se toma un control de videojuego y se está de frente al
televisor se siente una adrenalina tal que hace emocionarse a tal grado que se quiera
seguir jugando; ya que un videojuego es; Más que realidad virtual trasciende hasta el
mudo real, un videojuego es más que una distracción, es un estilo de vida, que nos
permite llevar sus habilidades mas allá de lo real hasta llegar al punto de ser imbatibles.

Así en este proyecto se aborda el tema de los videojuegos desde la perspectiva del
software libre, iniciando desde las definiciones de software libre, pasando por un poco
de historia desde que se creó la primera consola en 1972 hasta llegar a la actualidad,
dando así una clasificación de los diferentes géneros que existen. Y finalmente
exponiendo un par de códigos de videojuegos creados en el lenguaje java.

Gustavo Higareda Soto Página 4


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

2 Planteamiento del problema

Con el avance tecnológico y los altos costos en recursos monetarios y tiempo de


desarrollo que se tiene al crear un videojuego; se tarda cualquier edición de algún
videojuego al salir a la venta para el usuario habitual de videojuegos resulta
desesperante tener que esperar meses e incluso años en que salga el tan ansiado
producto y en el momento que es insertado en la consola no sea lo que se espera de él,
a veces es peor que la versión anterior, y sin saber que hacer lo dejan a un lado.

3 Justificación

El motivo principal para este proyecto es dar a conocer el software libre y sus
aplicaciones a videojuegos llevando al usuario a un nivel superior: crearlo y mejorarlo a
su gusto, aprovechando la ventaja del software libre ya que brinda códigos,
aplicaciones y sobre todo flexibilidad al momento de desarrollar algún programa; sobre
todo que el mismo usuario crearía videojuegos más interesantes cubriendo varios
puntos a la vez como son: paciencia al momento de esperar algún producto nuevo,
tiempo a las empresas desarrolladoras de videojuegos para ofrecer juegos de buena
calidad al sacados al mercado.

4 Objetivo

El objetivo del siguiente trabajo de investigación es:

• Dar a conocer la variedad de software libre en el ámbito de los videojuegos


analizado sus ventajas, clasificaciones y código fuente.

Gustavo Higareda Soto Página 5


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

5 Alcances y Limitaciones

Este proyecto de investigación consiste en analizar las aplicaciones de software libre


para videojuegos dando a conocer las ventajas y desventajas del uso del código abierto
para dichas aplicaciones.
Las limitaciones de este proyecto son:
No se hablará a fondo de software propietario ya que no interesa.
No se explicarán a fondo las diferentes aplicaciones de software libre que hay,
solamente se tomaran en cuenta lo orientado a videojuegos.

Para concluir se mostraran diferentes indicadores manera de graficas mostrando


diferentes preguntas sobre software libre y videojuegos, incluyendo únicamente a
programadores de las carrera de ingeniería en sistemas computacionales e informática
del Instituto Tecnológico de Durango para dar un análisis sobre el conocimiento y uso
de software libre aplicado a los videojuegos dentro de una población estudiantil.
Los tipos de indicadores que se usaron en este proyecto de investigación fueron
diferentes preguntas a continuación enumeradas; y obteniendo de estas diferentes
resultados y representándolos de forma grafica.

1.- ¿Sabe lo que es el Software Libre?


2.- ¿Qué programas ha manejado de Software Libre?
3.- ¿Usted ha creado alguna aplicación de Software Libre?
4.- ¿Qué ventajas tiene desde su punto de vista el Software Libre?

Gustavo Higareda Soto Página 6


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

CAPITULO I. SOFTWARE LIBRE

1.1 DEFINICION DE SOFTWARE LIBRE

El término software libre (o programas libres) se refiere a libertad, tal como fue
concebido por Richard Stallman en su definición. [2]

En concreto se refiere a cuatro libertades:

1. Libertad para ejecutar el programa en cualquier sitio, con cualquier propósito y


para siempre.
2. Libertad para estudiarlo y adaptarlo a nuestras necesidades. Esto exige el
acceso al código fuente.
3. Libertad de redistribución, de modo que se nos permita colaborar con vecinos
y amigos.
4. Libertad para mejorar el programa y publicar las mejoras. También exige el
código fuente.[1; 2]

“Lo que es el software libre; está compuesto por libre esta palabra en si no nos dice
absolutamente nada, el término “free” su definición es libre a demás también significa
gratis, pero esta definición de gratis pues no se adecua a la esencia de software libre,
ya que no es lo mismo a que algún tipo de software se distribuya gratuitamente a que
sea libre en este caso se incluya el código”.

1.2 ¿EN QUE CONSISTE EL SOFTWARE LIBRE?

La esencia del software libre se basa en libertades:

• La libertad para utilizar un programa significa que cualquier individuo u


organización podrán ejecutarlo desde cualquier sistema informático, con
cualquier fin y sin la obligación de comunicárselo subsiguientemente ni al
desarrollador ni a ninguna entidad en concreto.

• La libertad para redistribuir copias supone incluir las formas binarias o


ejecutables del programa y el código fuente tanto de las versiones
modificadas como de las originales la distribución de programas en
formato ejecutable es necesaria para su adecuada instalación en sistemas
operativos libres.

Gustavo Higareda Soto Página 7


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

No pasa nada si no se puede producir una forma ejecutable o binaria dado


que no todos los lenguajes pueden soportarlo, pero todos debemos tener la
libertad para redistribuir tales formas si se encuentra el modo de hacerlo.[2]

1.3 VENTAJAS Y DESVENTAJAS

El software libre presenta una serie de ventajas sobre el software propietario por los
derechos que otorga a sus usuarios. Algunas de estas ventajas pueden ser más
apreciadas por los usuarios particulares, otras por las empresas, y otras por las
administraciones publicas.

Principales ventajas.

A continuación se enumeran las ventajas que tiene el software libre:

1. Bajo costo de adquisición y libre uso.


2. Innovación tecnológica.
3. Requisitos de hardware menores y durabilidad de las soluciones.
4. Escrutinio público.
5. Independencia del proveedor.
6. Adaptación del software.[1;3]

Desventajas

A continuación se muestra un enumerado de las desventajas que tiene el software


libre:

1. El software libre no tiene garantía proveniente del autor.


2. Se necesita dedicar recursos a la reparación de errores.
3. No existen compañías únicas que respalden toda la tecnología.
4. El usuario debe tener nociones de programación.[1;3]

Gustavo Higareda Soto Página 8


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

1.4 LICENCIAS

En este apartado se presenta la clasificación de distintos tipos de licencias de software


libre.
Licencia: Es un contrato entre el autor (o propietario de los derechos) y los usuarios,
que estipula lo que éstos pueden hacer con su obra: uso, redistribución, modificación,
etc., y en qué condiciones.[1]

Licencias de Software Libre

Las licencias de software libre dan ciertos permisos explícitos: Cuando recibes
un programa libre puedes redistribuirlo o no, pero si lo redistribuyes, sólo puedes
hacerlo porque la licencia te lo permite. Pero para ello es preciso cumplir con la
licencia.[4]

Licencia BDS

La única obligación que exige es la de dar crédito a los autores, mientras que
permite tanto la redistribución binaria, como la de los códigos fuentes, aunque no obliga
a ninguna de las dos en ningún caso. Asimismo, da permiso para realizar
modificaciones y ser integrada con otros programas casi sin restricciones.[4]

Licencia GPL

La licencia GPL permite la redistribución binaria y la de las fuentes, aunque, en el


caso de que redistribuya de manera binaria, obliga a que también se pueda acceder a
las fuentes. Asimismo, está permitido realizar modificaciones sin restricciones, aunque
sólo se pueda integrar código licenciado bajo GPL con otro código que se encuentre
bajo una licencia idéntica o compatible, lo que ha venido a llamarse el efecto viral de la
GPL, ya que el código publicado una vez con esas condiciones nunca puede cambiar
de condiciones.[4]

Licencia LGPL

La LGPL permite el uso de programas libres con software propietario. El


programa en sí se redistribuye como si estuviera bajo la licencia GPL, pero se permite
la integración con cualquier otro software prácticamente sin limitaciones.[4]

Gustavo Higareda Soto Página 9


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

En la tabla siguiente se muestra dos tipos de licencia; la tabla nos muestra sus
características referentes al software libre (ver página 1).

Tipo de Precio cero, archivos archivos Revisión Todos los


software / uso ilimitado y fuentes fuente pública de derivados
Características redistribución disponibles modificables archivos deben ser
de la Licencia permitida fuentes gratuitos
Fuente Abierta si si si
estilo BSD*
Fuente Abierta si si si si si
estilo
Linux/GNU

Tabla 1.1 Características del software libre.[5]

1.5 CLASIFICACION DE SOFTWARE LIBRE

A continuación se presenta un enumerado de la clasificación de software libre

1. De acuerdo al costo de adquisición: el Software Libre puede ser de las dos


clases, es decir, de costo cero o de costo mayor que cero. Lo que lo
diferencia del Software Propietario es que su costo es independiente del
número de computadoras que se poseen. Por ejemplo, en el caso del Sistema
Operativo Microsoft Windows 3.1/95/98/Me/NT/2000/XP por cada
computadora en que lo instale debo pagar una licencia. En cambio, si utilizo
en Sistema Operativo GNU/Linux (en cualquiera de sus distribuciones, como
Red Hat, Mandrake, Debian, Ubuntu) debo pagar una sola licencia (no
obstante, algunas licencias no tienen costo).[6]

2. De acuerdo a la apertura del código fuente: el Software Libre siempre es


"open source", es decir, de código fuente abierto, ya que dijimos que el
acceso al código fuente es necesario para el ejercicio de las libertades 1 y 3
arriba descriptas. El ser "open source" implica una serie de ventajas que
serán descriptas en la sección "Ventajas del Software Libre". [6]

Gustavo Higareda Soto Página 10


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

3. De acuerdo a su protección: el Software Libre siempre está protegido con


licencias, y más específicamente, con licencias de copyleft.

¿Por qué no de dominio público?. Porque de ese modo cualquiera puede


adueñarse de él, por ejemplo, adquiere un Software Libre, lo modifica, lo
compila y lo distribuye con código cerrado. ¿Por qué no con Copyright?
Porque de esa manera alguien le puede agregar alguna restricción, por lo
tanto no va a seguir siendo Software Libre.[6]

4. De acuerdo a su legalidad: el Software Libre siempre es legal, porque al


usarlo, estudiarlo, modificarlo, adaptarlo y/o mejorarlo no estoy violando
ninguna norma, ya que de por si este tipo de software me permite hacerlo,
con la única salvedad de no poder agregarle ninguna restricción adicional
cuando lo transfiera a otra persona.[6]

Gustavo Higareda Soto Página 11


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

CAPITULO II APLICACIONES DE SOFTWARE LIBRE

2.1 ¿Qué es software de Sistema?


El Software de sistema, es denominado software de base, consiste en un
software que sirve para controlar e interactuar con el sistema, proporcionando control
sobre el hardware y dando soporte a otros programas. En contraposición del llamado
Software de Aplicación. Ejemplos de software del sistema son sistema operativo,
sistema operativo de red, compiladores, Antivirus, librerías tales como Open GL (para la
aceleración gráfica), PNG para el sistema gráfico o demonios que controlan la
temperatura, la velocidad del disco duro (como hdparm) o la frecuencia del procesador
como por ejemplo cpudyn.

El software de sistema realiza tareas como la transferencia de datos entre la


memoria RAM y los dispositivos de almacenamiento (disco rígido, unidades de discos
ópticos, etc.), o bien puede realizar la operación de reenderizado de texto en una
pantalla. Clases de software de sistema pueden ser cargadores de programas,
sistemas operativos, controladores de dispositivos, herramientas de programación,
compiladores, ensambladores, enlazadores, y programas utilitarios.

Si el software de sistema se almacena en una memoria no volátil tal como


circuitos integrados, usualmente se lo denomina firmware.[7]

A continuación se enumeran diferentes tipos de software de sistema.[8]

1. Sistemas operativos
2. Controladores de dispositivo
3. Herramientas de diagnóstico
4. Herramientas de Corrección y Optimización
5. Servidores
6. Utilidades

2.2 Software de Programación.

El software de programación es el conjunto de herramientas que permiten al


programador desarrollar programas informáticos, usando diferentes alternativas y
lenguajes de programación, de una manera práctica.

Gustavo Higareda Soto Página 12


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

A continuación se enumeran diferentes tipos de software de programación

1. Editores de texto
2. Compiladores
3. Intérpretes
4. Enlazadores
5. Depuradores
6. Entornos de Desarrollo Integrados (IDE): Agrupan las anteriores herramientas,
usualmente en un entorno visual, de forma que el programador no necesite
introducir múltiples comandos para compilar, interpretar, depurar, etc.
Habitualmente cuentan con una avanzada interfaz gráfica de usuario (GUI).[9]

2.3 Software de Aplicación.

Software de aplicación es aquel que permite a los usuarios llevar a cabo una o
varias tareas específicas, en cualquier campo de actividad susceptible de ser
automatizado o asistido, con especial énfasis en los negocios.
A continuación se enumeran diferentes tipos de programación; en esta lista se entrara
más a fondo el número 7 en el capitulo siguiente.

1. Aplicaciones de Sistema de control y automatización industrial


2. Aplicaciones ofimáticas
3. Software educativo
4. Software empresarial
5. Bases de datos
6. Telecomunicaciones (p.ej. internet y toda su estructura lógica)
7. Videojuegos
8. Software médico
9. Software de Cálculo Numérico
10. Software de Diseño Asistido (CAD)
11. Software de Control Numérico (CAM)

Gustavo Higareda Soto Página 13


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Figura 2.1 Aplicaciones para el usuario final

La Figura 2.1 muestra la ubicación y relación que tienen estas aplicaciones para con el
usuario final, y con otros programas informáticos existentes.

Otros ejemplos de programas de aplicación pueden ser: programas de


comunicación de datos, Multimedia, presentaciones, diseño gráfico, cálculo, finanzas,
correo electrónico, compresión de archivos, presupuesto de obras, gestión de
empresas, etc.[10]

Gustavo Higareda Soto Página 14


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

CAPITULO III LOS VIDEOJUEGOS

“Jugar con videojuegos implica poner en marcha muchas de nuestras


capacidades y habilidades, necesitamos concentración, atención, control, y
mucha, pero mucha emoción.”[11]

Un videojuego va mucho más allá de la realidad virtual trasciende hasta el mudo


real, un videojuego es más que una distracción, es un estilo de vida, que nos
permite llevar nuestras habilidades mas allá de lo real hasta llegar al punto de ser
imbatibles.

3.1 CONCEPTO

Los Videojuegos son programas informáticos diseñados para el entretenimiento


que se puede utilizar de varios soportes como las consolas y ahora en la actualidad en
los teléfonos móviles.[12]

3.2 Origen

Durante bastante tiempo ha sido complicado señalar cuál fue el primer


videojuego, principalmente debido a las múltiples definiciones que de este se han ido
estableciendo, pero se puede considerar como primer videojuego el Nought and
crosses, también llamado OXO, desarrollado por Alexander S. Douglas en 1952. El
juego era una versión computarizada del tres en raya que se ejecutaba sobre la EDSAC
(ordenador de la época) y permitía enfrentar a un jugador humano contra la máquina.
[13]

Fig. 3.1 Imagen del juego Nought and crosses.

Gustavo Higareda Soto Página 15


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

En 1958 William Higginbotham creó, sirviéndose de un programa para el e cálculo


de trayectorias y un osciloscopio, Tennis for Two:: un simulador de tenis de mesa para
entretenimiento de los visitantes del Brookhaven National Laboratory.
Cuatro años más tarde Steve Russell, un estudiante del Instituto de Tecnología de
Massachussets,, dedicó seis meses a crear un juego para computadora usando gráficos
vectoriales: Spacewar!.. En este juego, dos jugadores controlaban la dirección y la
velocidad de dos naves espaciales que luchaban entre ellas. El videojuego funcionaba
sobre un PDP1 y fue el primero en tener un cierto éxito aunque apenas fue conocido
fuera del ámbito universitario. [13]

Fig. 3.2 Imagen del juego Tennis for Two

Fig. 3.3 Imagen del juego Spacewar!

En 1966 Ralph Baer empezó a desarrollar junto a Albert Maricon y Ted Dabney
un proyecto de videojuego llamado Fox and Hounds dando inicio icio al videojuego
doméstico. Este proyecto evolucionaría hasta convertirse en la Magnavox Odyssey, el
primer sistema doméstico de videojuegos lanzado en 1972 que se conectaba a la
televisión y que permitía jugar a varios juegos pregrabados. [13]

Gustavo Higareda Soto Página 16


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

La ascensión de los videojuegos llegó con la máquina recreativa Pong, muy


similar al Tennis for Two pero utilizada en lugares públicos: bares, salones recreativos,
aeropuertos, etc. El sistema fue diseñado por Al Alcorn para Nolan Bushnell en la recién
fundada Atari. Space Invaders se presentó en 1972 y fue la piedra angular del
videojuego como industria. Durante los años siguientes se implantaron numerosos
avances técnicos en los videojuegos (destacando los microprocesadores y los chips de
memoria), aparecieron en los salones recreativos juegos como Space Invaders (Taito) o
Asteroids (Atari) y sistemas domésticos como el Atari 260. [13]

Fig. 3.4 Imagen del juego Pong

“William Higginbotham, Alexander S. Douglas, Steve Russell, Ralph Baer, Al


Alcorn; Fueron los pioneros en esta gran industria llamada videojuegos a pesar de las
limitaciones tecnológicas ni siquiera ellos se imaginaban lo que pasaría después de 50
años de haber sido creado un video juego utilizando una computadora de ese tiempo;
con la creación de nuevos procesadores esta industria fue creciendo con gran auge ya
que hubo una transición, ya que la visualización de un videojuego era en una dimensión
en la actualidad está en tres dimensiones”.
A continuación se muestra la transición de que se está hablando.
A principios de los años 90 las videoconsolas dieron un importante salto técnico
gracias a la competición de la llamada "generación de 16 bits" compuesta por la Mega
Drive, la Super Famicom de Nintendo (cuyo nombre fue cambiado en occidente,
pasando a ser Super Nintendo Entertainmet System "SNES“), la PC Engine de NEC,
conocida como Turbografx en occidente y la CPS Changer de (Capcom).

Junto a ellas también apareció la Neo Geo (SNK) una consola que igualaba las
prestaciones técnicas de un arcade pero demasiado cara para llegar de forma masiva a
los hogares. Esta generación supuso un importante aumento en la cantidad de
jugadores y la introducción de tecnologías como el CDROM, además de una importante
evolución dentro de los diferentes géneros de videojuegos, principalmente gracias a las
nuevas capacidades técnicas.

Gustavo Higareda Soto Página 17


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Mientras tanto diversas compañías habían comenzado a trabajar en videojuegos


con entornos tridimensionales, principalmente en el campo de los PC, obteniendo
diferentes resultados desde las "2D y media" de Doom, 3D completas de 4D Boxing a
las 3D sobre entornos prerenderizados de Alone in the Dark.

Referente a las ya antiguas consolas de 16 bits, su mayor y último logro se


produciría en la SNES mediante la tecnología 3D de prerenderizados de SGI, siendo su
máxima expresión juegos como Donkey Kong Country y Killer Instinct. También surgió
el primero juego poligonal en consola, la competencia de la SNES, MegaDrive, lanzo el
Virtual Racing, que tuvo un gran éxito ya que marco un antes y un después en los
juegos 3D en consola. [13]

Rápidamente los videojuegos en 3D fueron ocupando un importante lugar en el


mercado, principalmente gracias a la llamada "generación de 32 bits" en las
videoconsolas: Sony PlayStation, Sega Saturn (que tuvo discretos resultados fuera de
Japón); y la "generación de 64 bits" en las videoconsolas: Nintendo 64 y Atari jaguar. En
cuanto a los PC, se crearon las aceleradoras 3D que permitían un gran salto en la
capacidad gráfica de los juegos.[13]

A continuación se muestra en tabla las diferentes consolas que se han creado a lo largo
de la historia.

Generación Año Bits Consolas


Magnavox Odyssey, Magnavox Odyssey 100,
Primera
(1972/1977) n/a Magnavox Odyssey 200, Atari Pong, Coleco
generación
Telestar

Fairchild Channel F, Atari 2600, Videopac G7000,


Segunda Intellivision, Atari 5200, Vectrex, Arcadia 2001,
(1976/1984) n/a
generación ColecoVision, Atari 5200, TV-Game 6, Sega SG-
1000

Atari 7800, Nintendo Entertainment System, Sega


Tercera
(1983/1992) 8 bits Master System, PV-1000, Epoch Cassette Vision,
generación
Supergame VG 3000

Sega Mega Drive, Neo-Geo, Super Nintendo


Cuarta
(1988/1996) 16 bits Entertainment System, TurboGrafx-16/PC Engine,
generación
CD-TV, CD-i

3DO, AmigaCD32, Atari Jaguar, Sega Saturn,


Quinta 32 bits y Virtual Boy, PlayStation, Nintendo 64, Apple
(1993/2002)
generación 64 bits Pippin, Casio Loopy, Neo Geo CD, PC-FX,
Playdia, FM Towns Marty

Gustavo Higareda Soto Página 18


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Sexta Sega Dreamcast, PlayStation 2, Xbox y Nintendo


(1998/2006) 128 bits
generación GameCube

Séptima Hercio(next- Xbox 360, PlayStation 3 y Wii


(2005/)
generación
gen)
Tabla 3.1 Diferentes generaciones de las consolas

3.3 Géneros

3.3.1 ¿Definición de género en un videojuego?

Un género de videojuego designa un conjunto de juegos que poseen una serie


de elementos comunes. A lo largo de la historia de los videojuegos aquellos elementos
que han compartido varios juegos han servido para clasificar como un género a
aquellos que les han seguido, de la misma manera que ha pasado con la música o el
cine. [13]

Los videojuegos se pueden clasificar como un género u otro dependiendo de su


representación gráfica, el tipo de interacción entre el jugador y la máquina, la
ambientación y su sistema de juego, siendo este último el criterio más habitual a tener
en cuenta. [13]

3.3.2 Diferentes Géneros


La siguiente lista de géneros de videojuegos va acompañada de una breve
descripción y algún ejemplo de cada uno. Hay que decir que cada vez es más habitual
que un juego contenga elementos de diversos géneros, cosa que hace difícil su
clasificación. [13]

Acción

Acción o "juegos de pelea a progresión" son juegos similares a los de lucha, con
la diferencia de que en este caso los jugadores deben combatir con un gran número de
individuos mientras avanzan a lo largo de varios niveles. En los tipos de accion suele
ser posible jugar dos o más personas a la vez de forma cooperativa para facilitar el
progreso. [13]

Gustavo Higareda Soto Página 19


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Fig. 3.5 Imagen de juego de acción “Tomb raider”

Lucha

Los juegos de lucha, como indica su nombre, recrean combates entre personajes
controlados tanto por un jugador como por la computadora. El jugador ve a los
combatientes desde una perspectiva lateral, como si se tratase de un espectador. Este
tipo de juegos ponen especial énfasis en las artes marciales, reales o ficticias
(generalmente imposibles de imitar), u otros tipos de enfrentamientos sin armas como el
boxeo o la lucha libre. [13]

Gustavo Higareda Soto Página 20


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Fig. 3.6 Imagen de juego de lucha “The Kings of Fighters”

Juegos de acción en primera persona

En los juegos de acción en primera persona (Shoot'em UP), las acciones básicas
son mover al personaje y usar un arma, un arma se anuncia en la pantalla de primera
plana y el jugador puede interactuar con éste. Esta perspectiva tiene por meta dar la
impresión de estar detrás de la mano y así permitir una identificación fuerte
(Perspectiva de primera persona). Las gráfica en tres dimensiones aumentan esta
impresión. [13]

Fig. 3.7 Imagen de juego de accion en primera persona “HALO”

Gustavo Higareda Soto Página 21


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Acción en tercera persona

Los juegos de disparos en tercera persona se basan en el alternamiento entre


disparos y pelea o interacción con el entorno, pero a diferencia de los juegos de mira
(primera persona), se juega con un personaje visto desde atrás y en ocasiones, desde
una perspectiva isométrica. Estos juegos sacrifican la precisión a la ganancia de una
gran libertad de movimientos. [13]

Fig. 3.8 Imagen de juego de acción en tercera persona “Gears of Wars”

Infiltración

Normalmente los juegos de infiltración aparecen como un subgénero de los


juegos de disparos, aunque podemos encontrar juegos como Commandos, que se
puede clasificar a la vez como juego de estrategia y de infiltración. [13]

Plataformas

En los juegos de plataformas el jugador controla a un personaje que debe


avanzar por el escenario evitando obstáculos físico, ya sea saltando, escalando o
agachándose. Además de las capacidades de desplazamiento como saltar o correr, los
personajes de los juegos de plataformas poseen frecuentemente la habilidad de realizar
ataques que les permiten vencer a sus enemigos, convirtiéndose así en juegos de
acción. Inicialmente los personajes se movían por niveles con un desarrollo horizontal,
pero con la llegada de los gráficos 3D este desarrollo se ha ampliado hacia todas las
direcciones posibles. A partir del sistema de cambio de perspectiva (o movimiento de
"cámara") se ha permitido una verdadera libertad de movimiento en tales ambientes.
[13]

Gustavo Higareda Soto Página 22


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Árcade

Los juegos de árcade, se caracterizan por la simplicidad de acción rápida de


jugabilidad, esto obtuvo la gloria en la época de 1980. No requiere historia, solo juegos
largos o repetitivos. [13]

Videojuegos de deportes
Sport

Los juegos de Deporte son aquellos que simulan juegos de deporte real, entre
ellos encontramos, golf, tenis, futbol, hockey, juegos olímpicos, etc. Una gran mayoría
entre ellos, notablemente Tony Hawk's Pro Skater. El participante directamente lo juega
a través del control. El propósito es el mismo que el deporte original, solo que a veces
varía otros agregados. [13]

Fig. 3.9 Imagen de juego de deportes “Tony hawk’s Pro Skater”

Gustavo Higareda Soto Página 23


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Carreras

Principalmente son juegos que se dedican a comenzar de un punto y llegar a una


meta antes que los contrincantes. Juegos así se han desarrollado de su forma común
en vehículos, hasta otras formas como juego de plataformas. La idea principalmente es
competir en llegar primero, y algunas veces se suelte ampliar este concepto, originando
herramientas y trampas para la carrera. [13]

Fig. 3.10 Imagen de juego de carreras “Rush”

Agilidad mental

Estos son juegos donde tienes que pensar y agilizar el pensamiento. El objetivo
aquí es resolver ejercicios con dificultad progresiva para desarrollar la habilidad mental.
[13]

Educación

Aunque antiguamente solo se ha usado para juegos infantiles, los juegos


educativos son aquellos que enseñan mientras promueven diversión o entretenimiento
(Didactismo). A diferencia de una enciclopedia, trata de entretener mientras se
memoriza conceptos o información. En algunos casos se duda de que sea un género
de video juego, ya que el concepto no está muy desarrollado, ya que en cierto caso
estos juegos fallan enseñando más que leer y aprender que darlo a la práctica. [13]

Gustavo Higareda Soto Página 24


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Aventura

En estos, el jugador utiliza el teclado para introducir órdenes como “coger la


cuerda” o “ir hacia el oeste” y el ordenador describe lo que pasa. Cuando el uso de
gráficos se generalizó, los juegos de aventura textuales dejaron paso a los visuales (por
ejemplo, con imágenes del lugar presente) que substituyeron de este modo las
descripciones por texto, que se habían vuelto casi superfluas. Estos juegos de aventura
con gráficos seguían, no obstante, sirviéndose de la introducción de texto. Además,
sigue existiendo una comunidad de autores y jugadores activos de ficción interactiva,
aunque la participación de grandes empresas comerciales es más bien rara.[13]

Gráfica

A comienzos de los 1990, el uso creciente del ratón dio pie a los juegos de
aventura de tipo "Point and click", también llamados aventura gráfica, en los que ya no
se hacía necesaria la introducción de comandos. El jugador puede, por ejemplo, hacer
clic con el puntero sobre una cuerda para recogerla.[13]

“Aun faltan muchos géneros mas ya que es un tema muy extenso, pero lo que se
toma en cuenta que los géneros faltantes son ramificaciones de los anteriormente
descritos”.

3.4 Los Videojuegos compatibles con Software Libre

Como ya se definió en paginas anteriores los conceptos de Software Libre y


Videojuegos, es obvio que es compatible ya que un video juegos es un programa; y el
software está diseñado por programadores.
Lo mejor de que un videojuego sea libre es que se pueden encontrar muchas
diferentes versiones de un solo juego llamadas versiones “beta” este tipo de versiones
son versiones modificadas que no salen de la trama o historia del videojuego en
cuestión lo que cambia son imágenes modos de juego, creando así una mejoría.

Gustavo Higareda Soto Página 25


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

3.4.1 ¿Qué ofrece el software libre para la programación de


videojuegos?

El software libre posee casi todas las herramientas que se podrían necesitar y
más, pero en un mundo donde la mayoría utiliza Windows es muy difícil pero siempre
hay herramientas para hacerlo.
A continuación se mostrara una lista de gestores de videojuegos. [14]

• Atari Lite-C: Es un lenguaje de programación enfocado en los videojuegos


desarrollado por la Conitec en colaboración con Atari. Esta pensado para
desarrollar rápida y fácilmente gráficos o mundos virtuales como en los juegos
2D y 3D. Cuenta con modelaje de objetos en 3D, detección de colisiones,
animaciones, multitasking, manejo de sonidos, soporte a funciones de DirectX9
entre muchas cosas más. Unas pocas líneas de código en Lite-C son capaces de
lograr el mismo resultado que cientos de líneas en C/C++.

• IndieLib: Es una especie de “engine” o motor para desarrollo de juegos basado


en C++ y enfocada al desarrollo de juegos 2D sin embargo soporta muchas
funciones de 3D. Es muy completa, con un desarrollo muy activo y foros de
soporte muy útiles con demos y herramientas extras.

• Platform Studio: Simple pero a la vez poderosa herramienta para crear juegos de
plataforma en 2D. Esta más enfocado en la creación de gráficos y niveles que en
escribir y depurar código.

• Adventure Game Studio y AGAST: Te facilitan la creación de aventuras del tipo


“point and click” como las populares de Sierra y LucasArt de comienzos de los
90s. Si eres nostálgico o te gusta este genero de videojuegos es la herramienta
para ti.

• GameMaker: Esta es la herramienta si quieres desarrollar un juego sin pasar


horas programando, prácticamente todo se hace arrastrando y soltando objetos,
los juegos que puedes crear son sencillo pero dependiendo de tu creatividad
puede ser muy entretenidos, son el tipo de juegos enfocados al jugador casual
estilo la Wii. Cuenta con una comunidad Hispana donde se puede conseguir
soporte en nuestro idioma y un blog que muestra algunas creaciones.

Gustavo Higareda Soto Página 26


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Capítulo IV El software libre orientado a los videojuegos

4.1 Ventajas de un videojuego con código abierto

A continuación se muestra un listado de ventajas de tener código abierto en


videojuegos.

• Se obtienen sin costo alguno.

• Código abierto.

• Comunidad (ayuda y pertenecer).

• Programas fáciles de obtener e instalar.

• Aplicaciones pequeñas.

• Libertad y Flexibilidad.

• Portabilidad.

• Reaprendizaje [15]

Pero como toda ventaja tiene su desventaja

• Mucha flexibilidad puede ser frustrante.


• No siempre son tan completas.
• Filosofías (poca atención al usuario).
• Hay que animarse a usarlas.
• Versiones “beta” inestables.
• Poca Industria (todavía)[15]

Pero estas desventajas son mínimas ya que los usuarios están acostumbrados a utilizar
software privativo y para una persona que no está acostumbrada a lenguajes de
programación le es más difícil aplicar algún tipo de software libre.

Gustavo Higareda Soto Página 27


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

4.2 Código fuente de juegos en diferentes lenguajes


4.2.1- java

En qué consiste el lenguaje java (definición).

Java es un lenguaje de programación orientado a objetos desarrollado por Sun


Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha de su
sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina
herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación
directa de punteros o memoria.[16]

4.2.2 Cuatro en raya


Reglas

El tablero de juego consta de 7x6 campos que deben ser rellenados desde abajo
hacia arriba. Los campos quedan marcados por el color del jugador que ha realizado el
movimiento. En lo alto de cada columna una flecha de color indica dónde se ha
realizado el último movimiento.

Nota: Para cada una de las siguientes figuras (4.1 a 4.4) el código fuente se
presenta en los anexos 1 al 3; así mismo si se desea ver el código fuente completo se
encuentra en el anexo 4.

Gustavo Higareda Soto Página 28


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Fig. 4.1 Imagen de la pantalla principal del juego cuatro en raya

Gustavo Higareda Soto Página 29


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Fig 4.2 Imagen del juego cuatro en raya “iniciando a jugar”

Gustavo Higareda Soto Página 30


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Fig. 4.3 Imagen del juego cuatro en raya “La maquina gano”.

Gustavo Higareda Soto Página 31


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Fig. 4.4 Imagen del juego cuatro en raya “Gano el jugador humano”.

Gustavo Higareda Soto Página 32


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

4.2.3 Buscaminas
Reglas

Las casillas que no han sido aún inspeccionadas tienen oculto su contenido.
Inicialmente todas las casillas están ocultas.
El usuario va escogiendo casillas para inspeccionar. Si el jugador destapa una casilla
con mina pierde el juego.
Si, por el contrario, logra levantar todas las casillas libres sin pisar ninguna mina, gana.
Si la casilla no tiene mina pueden darse dos posibilidades. La primera es que la casilla
sea vecina de alguna mina. En ese caso, la casilla se considera inspeccionada y se
muestra el número de casillas vecinas que tienen minas. Se consideran vecinas las
casillas adyacentes tanto vertical, horizontal como diagonalmente.
Si la casilla inspeccionada no tiene minas alrededor, las casillas vecinas se van
destapando automáticamente.
Este proceso se repite para las casillas adyacentes que tampoco tienen minas
alrededor. Se para de levantar casillas cuando el área que se está destapando acaba
rodeada de casillas que sí tienen minas a su lado. En la figura 4.5 se ve el tablero
antes y después de inspeccionar la casilla (2, 2).

Fig. 4.5 Juego buscaminas

Nota: para cada una de las figuras siguientes (4.6 a 4.8) el código fuente se resenta en
los anexos 5 al 7; asi como el código completo se encuentra en el anexo 8.

Gustavo Higareda Soto Página 33


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Fig. 4.6 pantalla principal de “buscaminas”.

Gustavo Higareda Soto Página 34


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Fig. 4.7 pantalla del “buscaminas” ya iniciado.

Gustavo Higareda Soto Página 35


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Fig. 4.8 pantalla del “buscaminas” ya finalizado.

Gustavo Higareda Soto Página 36


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

CAPITULO V Metodología.

La metodología que se utilizó para llevar a cabo este proyecto de investigación


fue a través de recopilación de información, artículos y la realización de una encuesta
para el capítulo de resultados.
Se llevo a cabo una investigación transversal de tipo cualitativo realista.

Rec opil ac ión


de
inform ac ión
(ar tículos
científic os) ,
enc ues tas Trans v er sal
c ualitati va
enc uesta, teór ic o
reali s ta

Figura 5.1 “Modelo de cebolla aplicado al proyecto

Gustavo Higareda Soto Página 37


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

CAPITULO VI Resultados.

Los resultados siguientes son con base en una población de de cien personas
de las carreras de Ingeniería en sistemas Computacionales e Informática del Instituto
Tecnológico de Durango, Mostrando los siguientes resultados; cabe destacar que los
resultados obtenidos no fueron suficientemente satisfactorios ya que son muy pocas las
personas que programan fuera de contexto escolar.

Sabe lo que es el software Libre.

20%

Si
No

80%

Grafica 6.1. “Sabe Lo que es el Software Libre”

Gustavo Higareda Soto Página 38


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

En la gráfica siguiente sobre pasa el número de cien personas encuestadas ya


que al momento de realizar la encuesta se obtuvieron diversos resultados en esta
pregunta.

Qué programas de Sofware Libre ha


manejado
60,00

50,00

40,00

30,00

20,00

10,00

0,00
Java SQL Sistemas Aplicaciones Ninguno No tiene idea
Operativos de S.L

Gráfica 6.2. “Que Programas ha manejado de Software Libre”

Gustavo Higareda Soto Página 39


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Usted ha creado alguna aplicación con


Sofware Libre

4%

Si
No

96%

Grafica 6.3. “Usted ha Creado algún Software Libre”

En la grafica anterior de las personas que han creado algún software libre los resultados
obtenidos fueron:

Dato Programa desarrollado Lenguaje


1 Editor de audio. JAVA
2 Sistema para un video club. JAVA
3 Programa para Horarios. UB.Net
4 Calculadora, Juego cuatro JAVA
en Ra ya, buscaminas.
Tabla. 6.1.”Resultados de las personas que si han creado alguna aplicación software libre”

Gustavo Higareda Soto Página 40


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

En esta grafica nos muestra las ventajas que las personas encuestadas creen sobre el
software libre así mismo las respuestas que se encontraron
ncontraron coinciden con lo investigado en el
Capitulo 1.

Que ventajas desde su punto de vista tiene el


Software Libre
35

30

25

20

15

10

0
Es gratuito Modificable Accesible No se

Grafica 6.4. “Que ventajas desde su punto de vista tiene el software Libre”

Nota:: en páginas anteriores se dice que fueron un total de cien personas encuestadas aquí se
rebasa ese número ya que las diferentes personas dieron dos o más respuestas ya que la
realización de la encuesta fue abierta.

Gustavo Higareda Soto Página 41


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

CONCLUSIONES

En este proyecto de investigación se pretendió abordar exclusivamente el área de los


videojuegos desde su clasificación hasta su desarrollo en base a su código fuente,
desde el punto de vista del software libre.
La aportación de este proyecto de investigación hacia mi persona fue el conocer a
fondo el software libre más que nada las diferentes aplicaciones de este hacia distintas
ramas de la computación.
Para concluir con este proyecto de investigación da pie a seguir investigando, con el
propósito de encontrar mejores resultados; como se dijo en el apartado de resultados
no se obtuvieron resultados satisfactorios.
Sugiriendo que las próximas investigaciones se den en una comunidad de
programadores más amplia de la antes tomada para este proyecto de investigación;
buscando resultados satisfactorios, y si es que es la respuesta es afirmativa se
proporcione el código fuente y la documentación del trabajo realizado.

Gustavo Higareda Soto Página 42


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

ANEXOS
Anexo 1

JButton Comienza = new JButton ("Recomenzar");

JButton btnModo = new JButton ("Dos Jugador");

JButton Salir = new JButton ("Salir");

Label Vez = new Label ("Turno:");

Label Quien = new Label ("Patetico Humano1");

Label Victorias = new Label ("Victorias: 0");

Label Derrotas = new Label ("Derrotas: 0");

Label Jugadas = new Label ("Jugadas: 0");

Esta parte de código nos muestra lo que contiene la pantalla principal.

Anexo 2

public void PintaCasilla (int x)

Graphics g = getGraphics ();

int Resultados [] [] = new int [3] [3];

int result;

int z = 0;

int y;

for (z = 0 ; z < 7 ; z++)

if (estados [x] [z] != 0)

break;

Gustavo Higareda Soto Página 43


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

if (z == 0)

y = 7;

else

y = z - 1;

if ((y == 6 && estados [x] [y] == 0) || ((y < 6) && (estados [x] [y + 1] != 0) && (estados [x] [y] == 0)))

if (Turno % 2 == 0)

g.setColor (Color.red);

estados [x] [y] = -1;

Quien.setText ("Maquina");

if (!unjugador)

Quien.setText ("Patetico Humano 2");

else

g.setColor (Color.blue);

estados [x] [y] = 1;

Quien.setText ("Pattico Humano 1");

En esta parte de código se colorean las casillas de los jugadores, azul para el jugador
humano y rojo para la maquina.

Anexo 3

public void Ganaste (int jugador)

String s;

Thread tiempo = new Thread ();

Gustavo Higareda Soto Página 44


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

if (jugador == (- 1))

victorias++;

if (unjugador)

s = "GANASTE JUGADOR HUMANO";

Victorias.setText ("Victorias: " + Integer.toString (victorias));

Derrotas.setText ("Derrotas: " + Integer.toString (derrotas));

else

s = "GANASTE JUGADOR 1";

Victorias.setText ("Victorias J1: " + Integer.toString (victorias));

Derrotas.setText ("Victorias J2: " + Integer.toString (derrotas));

else

derrotas++;

if (unjugador)

s = "GAN LA MQUINA!!!";

Victorias.setText ("Victorias: " + Integer.toString (victorias));

Derrotas.setText ("Derrotas: " + Integer.toString (derrotas));

En esta parte de código nos muestra si gano la maquina o el jugador.

Gustavo Higareda Soto Página 45


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Anexo 4

Código completo.

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class CuatroRaya extends Frame implements MouseListener, ActionListener

JButton Comienza = new JButton ("Recomenzar");

JButton btnModo = new JButton ("Dos Jugador");

JButton Salir = new JButton ("Salir");

Label Vez = new Label ("Turno:");

Label Quien = new Label ("Pattico Humano1");

Label Victorias = new Label ("Victorias: 0");

Label Derrotas = new Label ("Derrotas: 0");

Label Jugadas = new Label ("Jugadas: 0");

int estados [] [] = new int [7] [7];

int Turno;

int victorias;

int derrotas;

boolean jugando;

boolean unjugador;

Panel PanelPrincipal = new Panel ();

CuatroRaya ()

super ("Cuatro en Raya Hatakegus");

int x, y;

setLayout (new GridLayout (20, 5));

addMouseListener (this);

Gustavo Higareda Soto Página 46


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Comienza.addMouseListener (this);

Salir.addMouseListener (this);

btnModo.addActionListener (this);

PanelPrincipal.add (Vez);

PanelPrincipal.add (Quien);

PanelPrincipal.add (Victorias);

PanelPrincipal.add (Derrotas);

PanelPrincipal.add (Jugadas);

PanelPrincipal.add (Comienza);

PanelPrincipal.add (btnModo);

add (PanelPrincipal);

victorias = 0;

derrotas = 0;

jugando = false;

unjugador = true;

addWindowListener (new WindowAdapter ()

public void windowClosing (WindowEvent we)

System.exit (0);

);

public void PintaCasilla (int x)

Graphics g = getGraphics ();

int Resultados [] [] = new int [3] [3];

int result;

int z = 0;

Gustavo Higareda Soto Página 47


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

int y;

for (z = 0 ; z < 7 ; z++)

if (estados [x] [z] != 0)

break;

if (z == 0)

y = 7;

else

y = z - 1;

if ((y == 6 && estados [x] [y] == 0) || ((y < 6) && (estados [x] [y + 1] != 0) && (estados [x] [y]
== 0)))

if (Turno % 2 == 0)

g.setColor (Color.red);

estados [x] [y] = -1;

Quien.setText ("Maquina");

if (!unjugador)

Quien.setText ("Pattico Humano 2");

else

g.setColor (Color.blue);

estados [x] [y] = 1;

Quien.setText ("Pattico Humano 1");

g.fillOval ((x * 90) + 20, (y * 80) + 100, 70, 70);

Gustavo Higareda Soto Página 48


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Turno++;

Jugadas.setText ("Jugada: " + Integer.toString (Turno));

if (CompruebaCasilla (x, y, Resultados))

Ganaste (estados [x] [y]);

else

if (Turno % 2 != 0)

if (unjugador)

result = JuegaIA (0);

if (result >= 10)

System.out.println ("la IA decidi: " + Integer.toString ((result / 10) - 1));

PintaCasilla ((result / 10) - 1);

else

System.out.println ("la IA decidi: " + Integer.toString (result));

PintaCasilla (result);

public boolean CompruebaCasilla (int posx, int posy, int cuantas [] [])

int jugador = estados [posx] [posy];

int x, y;

Gustavo Higareda Soto Página 49


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

//System.out.println("entr en Compruebacasilla el Jugador: " + jugador + " y la casilla x:


"+Integer.toString(posx) + " y: "+Integer.toString(posy));

for (x = (- 1) ; x < 2 ; x++)

for (y = (- 1) ; y < 2 ; y++)

if (x != 0 || y != 0)

cuantas [x + 1] [y + 1] = CompruebaLinea (posx, posy, x, y);

if (cuantas [x + 1] [y + 1] >= 4)

return true;

return false;

public int CompruebaLinea (int posx, int posy, int x, int y)

int tempx, tempy;

int val;

int cuantas = 1;

int jugador = estados [posx] [posy];

tempx = posx + x;

tempy = posy + y;

while ((tempy >= 0 && tempx >= 0) && (tempx < 7 && tempy < 7))

if (estados [tempx] [tempy] == jugador)

cuantas++;

tempx += x;

tempy += y;

else

tempx = (- 1);

Gustavo Higareda Soto Página 50


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

tempx = posx - x;

tempy = posy - y;

while ((tempy >= 0 && tempx >= 0) && (tempx < 7 && tempy < 7))

if (estados [tempx] [tempy] == jugador)

cuantas++;

tempx -= x;

tempy -= y;

else

tempx = (- 1);

return cuantas;

public int JuegaIA (int Nveces)

int temp;

int ValoresEl [] [] = new int [3] [3];

int ValoresYo [] [] = new int [3] [3];

int PuntosCasilla [] = new int [7];

int x, y, casilla;

int z;

boolean mayor;

// System.out.println("entr en JuegaIA, Turno: " + Integer.toString(Turno));

//Recorrer cada casilla en busca de la mejor opcin

for (casilla = 0 ; casilla < 7 ; casilla++)

//calculo la y actual para cada casilla

Gustavo Higareda Soto Página 51


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

z = 0;

while (estados [casilla] [z] == 0)

z++;

if (z == 7)

break;

if (z == 0)

y = 6;

else

y = z - 1;

// System.out.println("IA analizando x: " +


Integer.toString(casilla) + " y: "+Integer.toString(y));

//Una casilla recibe puntos por altura, un factor semialeatorio, para evitar

//bucles infinitos

PuntosCasilla [casilla] += y;

//otro factor aleatorio para evitar atascos

PuntosCasilla [casilla] += Nveces % (casilla + 1);

//Obtengo los valores para esa jugada simulando la colocación de una ficha

estados [casilla] [y] = 1;

CompruebaCasilla (casilla, y, ValoresYo);

estados [casilla] [y] = -1;

//Se obtiene los resultados que se tendra con esa jugada simulando

CompruebaCasilla (casilla, y, ValoresEl);

estados [casilla] [y] = 0;

for (x = 0 ; x < 3 ; x++)

for (z = 0 ; z < 3 ; z++)

Gustavo Higareda Soto Página 52


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

if (ValoresYo [x] [z] >= 4)

PuntosCasilla [casilla] += 1000;

if (ValoresEl [x] [z] >= 4)

PuntosCasilla [casilla] += 100;

if (ValoresYo [x] [z] == 3 && Nveces < 3)

estados [casilla] [y] = 1;

System.out.println ("Llamando a IA Recursiva en la vez: " + Nveces);

if (JuegaIA (Nveces + 1) > 10)

PuntosCasilla [casilla] += 90;

else

PuntosCasilla [casilla] += 5;

estados [casilla] [y] = 0;

if (ValoresEl [x] [z] == 3 && Nveces < 3)

estados [casilla] [y] = (- 1);

System.out.println ("Llamando a IA Recursiva en la vez: " + Nveces);

if (JuegaIA (Nveces + 1) > 10)

PuntosCasilla [casilla] += 100;

else

PuntosCasilla [casilla] += 10;

estados [casilla] [y] = 0;

if (ValoresYo [x] [z] == 2)

PuntosCasilla [casilla] += 5;

//Compruebo la casilla de encima Tanto de l como yo

Gustavo Higareda Soto Página 53


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

if (y > 0)

estados [casilla] [y - 1] = (1);

CompruebaCasilla (casilla, y - 1, ValoresYo);

estados [casilla] [y - 1] = (- 1);

CompruebaCasilla (casilla, y - 1, ValoresEl);

estados [casilla] [y - 1] = 0;

//valoro si el gana poniendo encima de mi o si me jodo

for (x = 0 ; x < 3 ; x++)

for (z = 0 ; z < 3 ; z++)

//Me jodera una de victoria y eso no mola

if (ValoresYo [x] [z] >= 4)

PuntosCasilla [casilla] -= 10;

//Le dara la victoria y eso solo lo puedo permitir

//si gano con esa jugada(o sea con 1000 de antes)

if (ValoresEl [x] [z] >= 4)

PuntosCasilla [casilla] -= 100;

//Tenemos los tanteos de cada casilla

//as que vamos a ver cual tiene mayor puntuacin y colocar en ella

z = 0;

for (y = 0 ; y < 7 ; y++)

// System.out.println("La opcin: "+Integer.toString(y) + "


Recibe "+Integer.toString(PuntosCasilla[y])+ " Puntos");

mayor = true;

Gustavo Higareda Soto Página 54


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

for (x = 0 ; x < 7 ; x++)

if (PuntosCasilla [y] < PuntosCasilla [x])

mayor = false;

if (mayor == true)

if (z != 0)

z = y * 10;

else

z = y;

System.out.println ("Final de JuegaIA");

return (z);

/***************************HASTA AQU LA IA***************************/

public void Ganaste (int jugador)

String s;

Thread tiempo = new Thread ();

if (jugador == (- 1))

victorias++;

if (unjugador)

s = "GANASTE JUGADOR HUMANO";

Victorias.setText ("Victorias: " + Integer.toString (victorias));

Derrotas.setText ("Derrotas: " + Integer.toString (derrotas));

Gustavo Higareda Soto Página 55


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

else

s = "GANASTE JUGADOR 1";

Victorias.setText ("Victorias J1: " + Integer.toString (victorias));

Derrotas.setText ("Victorias J2: " + Integer.toString (derrotas));

else

derrotas++;

if (unjugador)

s = "GAN LA MQUINA!!!";

Victorias.setText ("Victorias: " + Integer.toString (victorias));

Derrotas.setText ("Derrotas: " + Integer.toString (derrotas));

else

s = "GANASTE JUGADOR 2";

Victorias.setText ("Victorias J1: " + Integer.toString (victorias));

Derrotas.setText ("Victorias J2: " + Integer.toString (derrotas));

CuadroDialogo dig = new CuadroDialogo (this, s);

// g.setColor(Color.white);

// g.setFont (new Font ("Impact",10,60));

// g.drawString(100,333,s);

jugando = false;

dig.move (300, 10);

Gustavo Higareda Soto Página 56


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

dig.setVisible (true);

try

tiempo.sleep (1000);

catch (InterruptedException e)

public void paint (Graphics g)

int x;

int y;

g.setColor (Color.lightGray);

g.fillRect (1, 1, 650, 690);

g.setColor (Color.white);

g.fillRect (1, 1, 650, 55);

for (x = 0 ; x < 7 ; x++)

for (y = 0 ; y < 7 ; y++)

g.fillOval ((x * 90) + 20, (y * 80) + 100, 70, 70);

estados [x] [y] = 0;

public void ReStart ()

Graphics g = getGraphics ();

int x;

int y;

Turno = 0;

Gustavo Higareda Soto Página 57


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

jugando = true;

System.out.println ("reestart");

g.setColor (Color.lightGray);

g.fillRect (1, 1, 650, 690);

g.setColor (Color.white);

g.fillRect (1, 1, 650, 50);

for (x = 0 ; x < 7 ; x++)

for (y = 0 ; y < 7 ; y++)

g.fillOval ((x * 90) + 20, (y * 80) + 100, 70, 70);

estados [x] [y] = 0;

public static void main (String [] Args)

CuatroRaya a = new CuatroRaya ();

a.pack ();

a.setSize (650, 690);

a.setResizable (false);

a.show ();

public void actionPerformed (ActionEvent ae)

if (ae.getSource () == btnModo)

if (btnModo.getLabel () == "Un Jugador")

Victorias.setText ("Victorias: " + Integer.toString (victorias));

Derrotas.setText ("Derrotas: " + Integer.toString (derrotas));

btnModo.setLabel ("Dos Jugadores");

Gustavo Higareda Soto Página 58


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

unjugador = true;

else

Victorias.setText ("Victorias J1: " + Integer.toString (victorias));

Derrotas.setText ("Victorias J2: " + Integer.toString (derrotas));

btnModo.setLabel ("Un Jugador");

unjugador = false;

public void mousePressed (MouseEvent me)

int z;

z = me.getX ();

System.out.println ("evento click");

if (jugando)

System.out.println ("evento click jugando");

z = (z - 10) / 90;

PintaCasilla (z);

if (me.getSource () == Salir)

System.exit (0);

if (me.getSource () == Comienza)

ReStart ();

Gustavo Higareda Soto Página 59


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

public void mouseClicked (MouseEvent me)

//Vacio

public void mouseEntered (MouseEvent me)

//Vacio

public void mouseExited (MouseEvent me)

//Vacio

public void mouseReleased (MouseEvent me)

//Vacio

class CuadroDialogo extends Dialog

Button aceptar = new Button ("OK");

Label texto = new Label ();

String cad;

CuadroDialogo (Frame f, String s)

super (f, "informacion");

setSize (400, 100);

setResizable (false);

setBackground (Color.white);

texto.setText (s);

Gustavo Higareda Soto Página 60


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

add ("North", texto);

add ("South", aceptar);

public void paint (Graphics g)

g.setColor (Color.white);

g.drawString (cad, 50, 50);

public boolean action (Event evt, Object obj)

if (evt.target == aceptar)

dispose ();

return true;

return false;

Gustavo Higareda Soto Página 61


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Anexo 5

Frame f = new Frame();

PanelBuscaminas panel = new PanelBuscaminas();

f.add(panel);

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent we) {

System.exit(0);

});

f.setSize(900, 540);

f.show();

Esta parte de código es la pantalla principal.

Gustavo Higareda Soto Página 62


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Anexo 6

class PanelBuscaminas extends Panel {

Casilla tablero[][];

boolean minas[][];

int maxMinas;

PanelBuscaminas(){

int f,c;

setLayout(new GridLayout(30,50));

tablero = new Casilla[30][50];

minas = new boolean[30][50];

maxMinas = 250;

// creamos los botones y vaciamos la matriz donde

// colocaremos las minas

for(f=0; f<30; f++)

for(c=0; c<50; c++)

minas[f][c] = false;

tablero[f][c] = new Casilla("");

Gustavo Higareda Soto Página 63


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

add(tablero[f][c]);

tablero[f][c].addActionListener(new AccionBoton(this,f,c));

// colocamos minas

for(int n=0; n<maxMinas; n++)

do {

f = (int)(Math.random()*30);

c = (int)(Math.random()*50);

}while(minas[f][c]);

minas[f][c] = true;

Esta parte de código nos indica que la casilla seleccionada se vacía con u numero o
una mina.

Gustavo Higareda Soto Página 64


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Anexo 7

class AccionBoton implements ActionListener {

PanelBuscaminas pb;

int f, c;

AccionBoton(PanelBuscaminas p,int ff, int cc){

pb = p;

f = ff;

c = cc;

public void actionPerformed(ActionEvent ae) {

if(!pb.tablero[f][c].descubierta)

pb.tablero[f][c].descubierta = true;

pb.tablero[f][c].setBackground(new Color(170,255,255));

if(pb.minas[f][c])

pb.tablero[f][c].setLabel("*");

for(int x=0; x<30; x++)

for(int y=0; y<50; y++)

if(pb.minas[x][y])

pb.tablero[x][y].setBackground(new Color(255,50,100));

pb.tablero[x][y].setLabel("*");

JOptionPane.showMessageDialog(pb.getParent(), "Lo siento, has perdido");

System.exit(0);

else

Gustavo Higareda Soto Página 65


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

int numMinas = CuentaMinas(f,c);

switch(numMinas){

case 0:

AutoDescubrir(f,c);

break;

default:

pb.tablero[f][c].setLabel(Integer.toString(numMinas));

};

int nd = numDescubiertas();

((Frame)pb.getParent()).setTitle("Quedan " + Integer.toString(1500-nd)+" casillas");

if(1500-nd == pb.maxMinas)

JOptionPane.showMessageDialog(pb.getParent(), "Muy bien, ya has terminado");

System.exit(0);

En esta parte de código nos dice quien gana si la maquina o el jugador.

Gustavo Higareda Soto Página 66


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Anexo 8

Código Completo.

import java.awt.*;

import java.awt.event.*;

import javax.swing.JOptionPane;

public class Buscaminas {

public static void main(String[] args) {

Frame f = new Frame();

PanelBuscaminas panel = new PanelBuscaminas();

f.add(panel);

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent we) {

System.exit(0);

});

f.setSize(900, 540);

f.show();

class PanelBuscaminas extends Panel {

Casilla tablero[][];

boolean minas[][];

int maxMinas;

PanelBuscaminas(){

int f,c;

setLayout(new GridLayout(30,50));

tablero = new Casilla[30][50];

minas = new boolean[30][50];

Gustavo Higareda Soto Página 67


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

maxMinas = 250;

// creamos los botones y vaciamos la matriz donde

for(f=0; f<30; f++)

for(c=0; c<50; c++)

minas[f][c] = false;

tablero[f][c] = new Casilla("");

add(tablero[f][c]);

tablero[f][c].addActionListener(new AccionBoton(this,f,c));

// colocamos minas

for(int n=0; n<maxMinas; n++)

do {

f = (int)(Math.random()*30);

c = (int)(Math.random()*50);

}while(minas[f][c]);

minas[f][c] = true;

class Casilla extends Button {

boolean descubierta;

Casilla(String t){

super.setLabel(t);

setBackground(new Color(200,200,200));

setFont(new Font("Comic Sans Ms", Font.BOLD, 20));

descubierta = false;

Gustavo Higareda Soto Página 68


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

class AccionBoton implements ActionListener {

PanelBuscaminas pb;

int f, c;

AccionBoton(PanelBuscaminas p,int ff, int cc){

pb = p;

f = ff;

c = cc;

public void actionPerformed(ActionEvent ae) {

if(!pb.tablero[f][c].descubierta)

pb.tablero[f][c].descubierta = true;

pb.tablero[f][c].setBackground(new Color(170,255,255));

if(pb.minas[f][c])

pb.tablero[f][c].setLabel("*");

for(int x=0; x<30; x++)

for(int y=0; y<50; y++)

if(pb.minas[x][y])

pb.tablero[x][y].setBackground(new Color(255,50,100));

pb.tablero[x][y].setLabel("*");

JOptionPane.showMessageDialog(pb.getParent(), "Lo siento, has perdido");

System.exit(0);

else

int numMinas = CuentaMinas(f,c);

Gustavo Higareda Soto Página 69


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

switch(numMinas){

case 0:

AutoDescubrir(f,c);

break;

default:

pb.tablero[f][c].setLabel(Integer.toString(numMinas));

};

int nd = numDescubiertas();

((Frame)pb.getParent()).setTitle("Quedan " + Integer.toString(1500-nd)+" casillas");

if(1500-nd == pb.maxMinas)

JOptionPane.showMessageDialog(pb.getParent(), "Muy bien, ya has terminado");

System.exit(0);

int CuentaMinas(int ff, int cc){

int nm = 0;

for(int x=ff-1; x<=ff+1; x++)

for(int y=cc-1; y<=cc+1; y++)

if(!(x==ff && y==cc) &&

x>=0 && x<30 &&

y>=0 && y<50)

if(pb.minas[x][y])

nm++;

return nm;

void AutoDescubrir(int ff, int cc){

pb.tablero[ff][cc].setBackground(new Color(170,255,255));

Gustavo Higareda Soto Página 70


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

pb.tablero[ff][cc].descubierta = true;

for(int x=ff-1; x<=ff+1; x++)

for(int y=cc-1; y<=cc+1; y++)

if(x>=0 && x<30 && y>=0 && y<50 &&

!(x==ff && y==cc) &&

!pb.tablero[x][y].descubierta)

int numMinas = CuentaMinas(x,y);

switch(numMinas){

case 0:

AutoDescubrir(x,y);

break;

default:

pb.tablero[x][y].descubierta = true;

pb.tablero[x][y].setBackground(new Color(170,255,255));

pb.tablero[x][y].setLabel(Integer.toString(numMinas));

};

int numDescubiertas(){

int nd=0;

for(int x=0; x<30; x++)

for(int y=0; y<50; y++)

if(pb.tablero[x][y].descubierta)

nd++;

return nd;

Gustavo Higareda Soto Página 71


Instituto Tecnológico de Durango Ingeniería en Sistemas Computacionales
Taller de Investigación II

Referencias.

[1] Jesus Gonzalez Barhaona, "Software Libre," 2003.

[2] Richard M.Stallman, "Software Libre Para Una Sociedad Libre,", 1.1 ed 1999.

[3] Moserrat Culebro Juarez and Susana Torres Sanchez, "Software Libre vs Software
Propietario: Ventajas y Desventajas," 2009.

[4] Jorge Nonius, "Introduccion a las licencias de Software Libre,", 0.92 ed 2002.

[5] Jose Ramon Perez Agüera, "Documentacion y Software Libre," 2009.

[6] Fabiola Carugo and Alejandro Mazzencio, "Conociendo el Software Libre," 2007.

[7] D. R. Cheriton, "The V Kernel: A Software Base for Distributed Systems," 2006.

[8] Marlene Pérez Rivera, "Software de Sistema.," 2003.

[9] "Software Requirements Engineering,", 2nd Edition ed 1997.

[10] Moriel Retocada, "Categorías de Software," 2003.

[11] A.Gil Vida, "The Videogames, Los Videojuegos," 2008.

[12] A.Gil Vida, "The Videogames, Los Videojuegos," 2008.

[13] Simone Belli, "A brief History of videogame," 2008.

[14] "Clud de Desarrolladores de Videojuegos," 2009.

[15] Juan Linetsky, "Herramientas Alternativas Para El Desarrollo de Videojuegos,", 2nd


Edition ed 2006.

[16] Bruce Eckel, "Thinking in java,".

Gustavo Higareda Soto Página 72

Вам также может понравиться