ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA INFORMÁTICA DAMAS CHINAS

Tamaño: px
Comenzar la demostración a partir de la página:

Download "ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA INFORMÁTICA DAMAS CHINAS"

Transcripción

1 ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA INFORMÁTICA DAMAS CHINAS Realizado por JESÚS MUROS PONCE Dirigido por JOSÉ RAMÓN PORTILLO FERNÁNDEZ Departamento MATEMÁTICA APLICADA I Sevilla, Diciembre de 2008

2

3 Índice 1. Definición de objetivos Análisis de antecedentes Historia Tablero de juego Número de jugadores y posiciones iniciales Objetivo del juego Reglas del juego Finalidad del juego Variantes del juego Aportación realizada Análisis de requisitos Comparación con otras alternativas Selección del sistema operativo Selección del lenguaje de programación a utilizar XNA Qué es XNA? Objetivos de XNA Las capas Características Diseño de la aplicación Elección de sistema de desarrollo y lenguaje de programación Elección del menú Manejo de la aplicación Texturas y gráficos Implementación de la aplicación Clases básicas utilizando XNA Elementos del juego La clase Tablero La clase Casilla La clase Jugador La clase Ficha Valores invariantes del tablero de juego La clase Estaticos Estados del juego La clase ManejadorDeEstados La interfaz IEstadoDeJuego

4 La clase EstadoBienvenida La clase EstadoMenu La clase EstadoJuegoDC Desarrollando la inteligencia artificial La clase Sucesores La clase Sucesor La clase ProfundidadYPeso La clase Minimax Instalación previa a la aplicación Manual de usuario Pantalla de bienvenida Pantalla de menú Pantalla de juego Zona de jugadores Zona del tablero de juego Botones de la pantalla de juego Pruebas Pruebas a nivel de profundidad Pruebas a nivel de profundidad Pruebas a nivel de profundidad Pruebas a nivel de profundidad Pruebas a nivel de profundidad Pruebas a nivel de profundidad 6 y superiores Análisis temporal y costes de desarrollo Costes de desarrollo Análisis temporal Posibles mejoras para el futuro Conclusiones Bibliografía

5 1.-Definición de objetivos El objetivo de este proyecto es realizar la correcta implementación del conocido juego popular de mesa llamado Damas chinas. La complicación que conlleva esto podría dividirse en diferentes puntos: Implementar el juego en un lenguaje de programación, de forma que sea intuitivo y fácil el manejo del ejecutable obtenido. Conseguir que el programa cumpla todas las reglas del juego y no permita estados inválidos. Conseguir darle inteligencia artificial al juego, de manera que se pueda realizar una partida contra la computadora, y ésta sea capaz de realizar movimientos suficientemente inteligentes. Obtener unos tiempos de computación coherentes con el tiempo empleado en realizar la computadora cada movimiento. Por lo que, será necesario utilizar un lenguaje suficientemente moderno, que de opciones al manejo fácil de los elementos que contenga nuestra aplicación, ya sea mediante teclado o ratón. Y con una interfaz intuitiva. Los más actuales y validos que se podrían utilizar para este tipo de aplicación podrían ser Java, C++, C#, o parecidos. Ya que estos manejan clases que permiten encapsular mejor la información de una manera mucho más ordenada y a su vez. A su vez, necesitamos que se pueda aplicar esta programación a una interfaz lo más manejable y fácil de acceder posible. De nada sirve utilizar un buen lenguaje de programación, si luego a la hora de manejar el programa es complicado y poco intuitivo. Por tanto, también depende la aplicación de la interfaz gráfica utilizada. 5

6 Además se debe conocer todas las reglas del juego, (posiciones válidas, movimientos permitidos, etcétera) y no dejar opciones a llegar a una situación no permitida. En este punto hay que ser muy cuidadoso y conocer perfectamente antes de comenzar a programar cómo funciona el juego y cómo evitar los problemas típicos de programación que dan lugar a fallos graves. Se puede utilizar una interfaz gráfica y un lenguaje muy buenos, pero antes que todo eso está siempre el buen funcionamiento del programa. El punto más importante de este proyecto será obtener la inteligencia artificial de la computadora. Esto requerirá la utilización de un algoritmo de búsqueda y conocer además posibles estrategias para conseguir la mayor calidad de movimiento realizado por la máquina. Fusionando esas dos ideas, se podrá conseguir un adversario digno para cualquier jugador humano. Se debe conseguir que cuando se ejecute la aplicación, esta sea suficientemente rápida para darle un uso normal y cómodo frente al usuario que la maneja. Deberá funcionar para ordenadores actuales, y seleccionar el sistema operativo en el que se ejecutará, ya sea Linux, Windows u otro, según el lenguaje elegido. También, no se debe cargar demasiado de procesos la aplicación que conlleve a la lentitud de utilización del programa. Esto nos lleva a una contradicción. Cuando se intenta mejorar la habilidad de la máquina a la hora de realizar movimientos lo más inteligentemente posible, casi siempre requiere un número de cálculos proporcional a la inteligencia artificial que se desea obtener de la computadora. 6

7 Por lo tanto, podremos obtener una máquina invencible si llevamos la cantidad de cálculo movimientos y estrategias al máximo. Así que, la solución está en conseguir un algoritmo que calcule el máximo posible de movimientos en busca del mejor, de este modo, será imposible perder. Pero por otro lado, el objetivo de este proyecto, es poder jugar una partida que se haga amena, y no haya que esperar un intervalo de tiempo muy extenso para un movimiento. Se trata de movimientos razonablemente rápidos para poder llevar una partida como si con otro humano se tratase. Hemos llegado a un punto en el que necesitamos, movimientos relativamente rápidos, pero a su vez se exige una inteligencia razonable. Por lo que, lo más importante de este proyecto no es conseguir una inteligencia artificial imposible de derrotar, ni tampoco conseguir la velocidad de movimiento y de juego más rápida posible. La clave está en conseguir un buen procesamiento inteligente por parte de la computadora a la hora de jugar, pero que a la vez no requiera un tiempo de ejecución excesivamente elevado para que se pueda realizar una partida en un tiempo razonable. 7

8 8

9 2.-Análisis de antecedentes 2.1-Historia Para hablar de la historia de las damas chinas, tenemos que hablar del juego de mesa llamado Halma. Halma fue creado en Gran Bretaña alrededor de 1880 y llegó a ser mundialmente popular con suma rapidez. La versión original se juega sobre un tablero de 16x16. Las reglas son las mismas para ambas versiones, 8x8 y 10x10. En la posición inicial las fichas de ambos jugadores ocupan sus yardas. El objetivo de este juego es mover todas las piezas propias a la yarda del rival. El jugador que consigue esto primero, gana. También existe una versión de este juego llamado Halma veloz, obtenido a partir del original, y utilizando un tablero de Solitario. Las reglas son las mismas. La única diferencia es el tablero y el número de piezas con las que participa cada jugador. 9

10 Otra diferencia es el número de jugadores posibles, mientras que para Halma, se puede jugar de dos a cuatro jugadores. En este tablero debido a su tamaño solo podrían participar 2 de ellos. Las Damas Chinas, decepcionantemente, no son más que el Halma llevado a un tablero de forma de estrella. Fue patentado primero en el Occidente por Ravensburger, la famosa compañía de juegos alemana, con el nombre de Stern-Halma en Alemania unos pocos años después que apareciera el Halma. Fue lanzado en EEUU con el nombre más tramposo de Damas Chinas, y así es como se conoce al juego hoy en día. Se cree que J. Pressman es la persona que introdujo el juego a EEUU durante 1928 aunque varios otros fabricantes comenzaron a hacerlo en lo sucesivo incluyendo a Milton Bradley que, patentó el juego en Tablero de juego El juego se desarrolla en un tablero en forma de estrella de 6 puntas. Hay diferentes versiones de este tablero con respecto el número de casillas existentes. Los más conocidos son los tableros de 73 casillas y 6 fichas por jugador, 121 casillas y 10 fichas por jugador, e incluso variantes de 73 casillas y 10 fichas por jugador (lo que implica menor número de jugadores posibles) y derivados. 10

11 Lo más común es utilizar el tablero de 121 casillas y 10 fichas por jugador, que es como se realizará este proyecto. Como se puede observar en la figura, los tableros tradicionales están construidos de forma que cada casilla constituye una hendidura en dicha estructura. De esta forma, las piezas, comúnmente superficies esféricas, podrán ser posicionadas en las casillas sin problemas de cambios de posiciones no deseadas Número de jugadores y posiciones iniciales Cada jugador dispone de 10 fichas, que serán colocadas inicialmente en las puntas de la estrella, dependiendo del número de jugadores que participen en la partida. Una partida se puede realizar a partir de 2 jugadores, y hasta 6 participantes. Dependiendo del número de jugadores, la colocación inicial de las piezas será diferente: 2 jugadores. Los jugadores son colocados de forma que se encuentren enfrentados, es decir, la esquina opuesta a la posición inicial está ocupada por el adversario. 11

12 3 jugadores. En este caso, cada jugador ocupará una punta de la estrella de forma que queden libres las esquinas opuestas de cada uno de los participantes. 4 jugadores. Se colocarán enfrentándose 2 a 2, un contrincante tendrá en su esquina opuesta a otro jugador, y los restantes se enfrentarán de igual manera. 5 jugadores. Para este número de jugadores, se colocan las piezas en cualquiera de las esquinas, dejando libre una de ellas. 6 jugadores. Este caso ocupa el total de las esquinas existentes en el tablero. Hay que destacar que mientras que para 2, 3, 4 y 6 jugadores, ninguno de los jugadores juega con ventaja respecto al otro, para 5 jugadores, tendrá una leve ventaja el jugador que en su esquina opuesta no participe ningún contrincante Objetivo del juego El objetivo del juego es conseguir llevar todas las piezas propias desde las posiciones iniciales, hasta la esquina opuesta del tablero. La complejidad de esto, es conseguir ese objetivo antes que el jugador contrario lo complete, ya que un movimiento propio, puede beneficiar al jugador contrario de alguna forma Reglas del juego Las reglas se pueden dividir en varios puntos: Turno de juego. El juego se desarrollará por turnos. El primer jugador comenzará moviendo una única pieza realizando un movimiento permitido y dará paso al siguiente jugador. Cuando se complete una ronda volverá el turno al jugador que movió primero. 12

13 Posiciones válidas. Las únicas posiciones válidas son las señaladas como casillas de juego. Y en ningún caso se podrá ocupar una casilla ocupada por otra ficha, sea propia o no. Movimientos permitidos. Los movimientos que se pueden realizar en el turno del jugador para una ficha puede ser: Mover a una casilla adyacente libre. Se trata de un movimiento simple que se variará la posición a una de las 6 o menos casillas adyacentes de la casilla de la ficha actual. Saltar a una casilla libre adyacente. Este caso solo es posible si a la casilla donde se salta es adyacente a distancia dos, y en la misma dirección a una casilla adyacente ocupada a la casilla de la cual parte la ficha a mover.la ficha de la casilla adyacente puede ser propia, o de un adversario. Si se ha realizado un salto, no es posible hacer un movimiento a una casilla adyacente libre y viceversa. Saltar a una casilla libre no adyacente. En este caso, si al realizar un salto simple, se puede continuar realizando otro salto de la misma manera que la anterior, es posible mover hacia esa siguiente casilla. Este paso se puede repetir siempre que se pueda, de forma que se podría recorrer, si la situación lo permite, el tablero entero con una pieza en un solo turno. Hay que destacar, que a diferencia con otros juegos de tablero del mismo tipo, en este caso, cuando se realiza un salto sobre una pieza de un contrincante o propia, no se elimina la pieza del tablero. 13

14 2.6.-Finalidad del juego El juego termina cuando uno de los jugadores consigue posicionar todas sus fichas en la esquina opuesta. Si participan más de 2 jugadores, se puede continuar la partida para conocer cuál de los contrincantes restantes terminará antes la partida Variantes del juego Existen 2 conocidos variantes del juego de las damas chinas que utilizan el mismo tablero, pero se diferencian en una pequeña variación de sus reglas: Hop across rápido (Damas chinas rápidas). Se trata de una variante jugada sobre todo en Hong Kong. En ella, una pieza puede sobrepasar a otra que no esté en la casilla adyacente. Este paso consiste en saltar hasta una posición simétrica al otro lado de la ficha saltada. Por ejemplo, si hay dos casillas vacías entre la pieza que se mueve y la sobrepasada, la que se mueve acaba en la tercera casilla del otro lado, dejando dos vacías en medio. No se permite pasar sobre dos casillas ocupadas en un mismo salto. Por tanto, en esta variante, agrupar las piezas para evitar el avance del adversario es aún más importante que en la original. Capture. Se trata de una versión en la que en este caso, si se comen las piezas al saltar sobre ellas. Las sesenta fichas se colocan en el hexágono de en medio alrededor del agujero central, que queda vacío. Los jugadores por 14

15 turnos, pueden pasar cualquier pieza sobre otra adyacente. Cada jugador retira del tablero las piezas sobre las que ha movido otra (las come o las captura) y las guarda en su depósito. Al principio del juego, las piezas están muy concentradas, por lo que sólo se puede capturar una ficha por turno. Pero cuantas más piezas se vayan retirando, más espacios quedarán libres, permitiendo múltiples capturas. Al final del juego, gana el que más piezas tenga en su depósito (el que más fichas haya comido). Pueden participar dos o más jugadores, pero con más de seis, no todos tienen oportunidades parecidas. La versión original de este juego sólo permite avanzar una casilla, y si la adyacente está vacía, permite desplazar. 15

16 16

17 3.-Aportación realizada La base de estudio de este proyecto, y lo que realmente lo hace complicado, es obtener un algoritmo, función o similar, que permita una buena inteligencia artificial por parte de la computadora y que a su vez no consuma recursos excesivos. Teniendo en cuenta el lenguaje de alto nivel que utilizamos, también se tiene la posibilidad de reutilización de código para futuras mejoras, lo que ayuda a un posterior desarrollo o estudio de la aplicación a diseñar. Partimos del juego de mesa compuesto de un tablero, piezas como objetos materiales, y el humano es el que se encarga de darle inteligencia para poder competir y ganar a su adversario. Pero cómo sería si lo quisiéramos llevar a un modo virtual, del que no se necesite nada material, y se pueda abrir y cerrar en el momento que deseemos? Es más, ya no solo eso, uno de los problemas que podemos encontrarnos jugando en la vida real, es la infracción de alguna regla de dicho juego de mesa. No puedo siempre estar seguro de que he realizado un movimiento permitido, o como es más lógico, que el adversario realice un movimiento que no sea válido según las normas. Una de las aportaciones de este proyecto, es poder jugar de la misma manera o incluso más cómodamente que se jugaría si dispusiéramos del material físico necesario, pero en este caso, con un solo clic de ratón. Además, en este caso, no cabe duda de que un jugador, ya sea humano o artificial, realiza un movimiento permitido, y no se ha equivocado, ya sea 17

18 intencionadamente o no. Para ello se utilizan técnicas que calculen antes de poder posicionar la pieza, si ese movimiento está permitido o no, si no lo está, obliga incondicionalmente a que el jugador rectifique y selecciona un movimiento correcto. Por tanto, esto hace que el juego sea más seguro y no esté dado a errores, para que se pueda jugar con tranquilidad. Hasta ahí bien, pero y si nos planteamos si hay alguna forma mejor de jugar? O en un determinado momento de la partida, Cuál será el movimiento más correcto? En una partida normal, un humano puede adelantarse un número de jugadas limitadas, dependiendo del punto en el que se encuentre la partida y la habilidad del jugador. Pero son suficientes? Para ello, ideamos formas de que una máquina se encargue de realizar grandes cálculos, y nos permita conocer cuál es el verdadero movimiento correcto. Todo esto suena muy bien, pero para que la máquina juegue bien, hay que darle unas pautas básicas de las normas del juego, enseñarle a jugar, y además, enseñarle como elegir el mejor movimiento. Lo cual nos lleva a otro problema a plantearse, cómo le hago saber a la computadora si un movimiento es bueno o malo? No es fácil elegir una opción que nos permita saber en cada momento cuál es la mejor jugada, pero se intenta acercarse lo máximo posible a dicho movimiento. Para juegos simples, (como por ejemplo 3 en raya), es fácil llegar a una solución final, ya que no se compone de una gran complejidad y el movimiento correcto es bastante sencillo de calcular. La cosa se complica cuando no hablamos de 7 u 8 movimientos posibles, sino cuando podríamos hablar de millones de posibles jugadas. 18

19 Sabemos que las máquinas son capaces de calcular miles de operaciones por segundo mucho más rápido que cualquier humano, pero aún así, tardarían años en calcular todas las opciones posibles para este tipo de juegos más complejos. En todo esto se basa lo más importante que se intenta aportar en este proyecto. Se estudian diferentes formas de afrontar los problemas y determinar la mejor opción, y el coste que puedan conllevar cada uno de ellos. 19

20 20

21 4.-Análisis de requisitos En este proyecto se pretende cumplir los siguientes requisitos: Ejecutarse correctamente en un PC con un sistema operativo actual instalado. Tener opción de seleccionar el número de jugadores posibles, dando opción a poder participar de 2 a 6 jugadores, ambos inclusive. Debe existir la opción de jugar una partida participando la computadora, eligiendo también el número de participantes de este tipo. Cumplir correctamente las normas del juego establecidas por ambos tipos de jugadores, humano o computadora. Dicha computadora debe ser capaz de completar una partida de manera competente y en un tiempo razonable. Para este tipo de proyectos, los requisitos no son excesivos. Pero aunque no sean demasiados, resulta bastante complicado llegar a obtener una solución válida para cumplir cada uno de estos objetivos. Ya que, algunos de ellos, abarca una complicación interna bastante elevada. Estos requisitos, dan libertad a la hora de elegir lenguaje de programación y sistema operativo, pero a su vez, hay que tener cuidado cual elegir a la hora de intentar cumplir el resto de requisitos necesarios. 21

22 22

23 5.-Comparación con otras alternativas En este punto, antes de pasar a comparar y dar las razones de porque se ha elegido una opción respecto a otras posibles, debemos analizar, cuáles son aquellos puntos que nos han dado lugar a dudas debido a las diferentes posibilidades existentes. Estos puntos podrían dividirse en: Selección del sistema operativo. Selección del lenguaje de programación a utilizar Selección del sistema operativo Esta es una duda, que puede asaltar a cualquier programador a la hora de realizar cualquier tipo de aplicación. Para qué sistema operativo sería mejor optimizarlo? Siempre llegamos a reducir esa duda a las dos vertientes más comunes: Windows y Linux. Windows. Es una familia de sistemas operativos desarrollados y comercializados por Microsoft. Existen versiones para hogares, empresas, servidores y dispositivos móviles, como computadores de bolsillo y teléfonos inteligentes. Hay variantes para procesadores de 16, 32 y 64 bits. Incorpora diversas aplicaciones como Internet Explorer, el Reproductor de Windows Media, Windows Movie Maker, Windows Mail, Windows Messenger, Windows Defender, entre otros. Desde hace muchos años es el sistema operativo más difundido y usado del mundo, de hecho la mayoría de los programas (tanto comerciales como gratuitos y libres) se desarrolla originalmente 23

24 para este sistema. Todos los fabricantes del planeta dedicados a equipos basados en procesadores Intel o compatibles con éstos (excepto Apple Inc.) preinstalan Windows en su versión más reciente y todas sus variantes. Windows Vista es la versión más reciente para computadoras personales, Windows Server 2008 para servidores y Windows Mobile 6.0 en los dispositivos móviles. Linux. Es un sistema operativo, una gran pieza de software que controla un computador. Es parecido a Microsoft Windows, pero completamente libre. El nombre correcto es GNU/Linux pero "Linux" se usa más. Linux no es el producto de una sola compañía, es el resultado de la contribución de un gran número de compañías y grupos de personas. De hecho, el sistema GNU/Linux es un componente central, el cual se transforma en muchos productos diferentes: las llamadas distribuciones. Las distribuciones cambian la apariencia y funcionamiento de Linux completamente. Las hay desde grandes sistemas completos totalmente equipados (respaldadas por compañías) hasta las más ligeras que entran en un llavero USB o funcionan en computadores viejos (usualmente desarrolladas por voluntarios). Una distribución destacada, completa y fácil de usar para iniciarse en GNU/Linux es Ubuntu. GNU/Linux no es más difícil de usar que Windows, y tiene muchas más funcionalidades. Se tarda sólo unos minutos en familiarizarse con una distribución, las cuales suelen venir con 24

25 muchos programas instalados. Existen muchos miles de programas que se puede encontrar, instalar y desinstalar de una forma intuitiva y sencilla. Cuando obtiene una distribución de GNU/Linux, también obtiene la libertad para estudiarla, copiarla, cambiarla, y redistribuirla. Eso es lo que la hace realmente libre. Ahora entrando en comparación con Windows, tiempo atrás, Linux se trataba de un sistema operativo sin interfaz gráfica, un poco complicado de manejar, mientras que Windows ofrecía la serie de comodidades que un usuario sin experiencia en la materia necesita. Por este motivo, aun siendo libre el software, y por tanto gratuito, la gran mayoría hace años, prefería por comodidad utilizar Windows. Este problema se solventó no hace muchos años, con la entrada de los primeros sistemas operativos GNU/Linux con interfaz gráfica. Lo que produce que sea muy parecida la forma de utilizarse con respecto a Windows, con algunas diferencias. Por tanto, todo apunta a que sea más conveniente utilizar Linux antes que Windows. Pero aunque la forma de utilizarse Linux sea muy parecida hoy en día a Windows, hay pequeñas diferencias que hacen incomodo su uso a usuarios no avanzados. Increíblemente, aun siendo gratuitas las distribuciones creadas de Linux, gran parte de la población aun prefiere seguir gastándose una gran suma de dinero en las últimas versiones de los sistemas operativos desarrollados por Microsoft. Según un estudio que se realizado en Junio de 2007 con los accesos realizados a una página web se puede obtener el siguiente gráfico: 25

26 Como se puede observar, aún conociéndose el gran avance y la mejora en cantidad de usuarios que utilizan Linux, Windows sigue estando a la cabeza con una diferencia abrumadora en utilización por los usuarios comunes. Sabiendo que se tienen las desventajas de no tener el código libre, su coste y alguna que otra característica más, lo que nos interesa es la utilización que se le pueda dar a este programa. Y como se puede observar, y aunque parezca una incongruencia, lo más lógico es desarrollar esta aplicación para Windows, ya que podrá ser utilizado hoy en día por una cantidad de personas muchísimo mayor. Además, cabe destacar, que existen emuladores de sistemas operativos para Windows y para Linux, por tanto no habría problema de pasarlos si se entiende un poco de un sistema operativo a otro. Pero si pensamos esto más detenidamente, el usuario de Linux, suele tener bastante más experiencia en la utilización de sistemas operativos que el usuario medio de Windows. 26

27 Por tanto, le será más fácil, al usuario de Linux, conseguir utilizar Windows, ya que es muy probable que lo haya utilizado alguna vez. La opción contraria es también posible pero menos común. Un usuario de Windows puede haber utilizado Linux alguna vez, pero el porcentaje es mucho menor que para el caso contrario, y por tanto tendrá más complicación a la hora de usar este programa si se realiza para Linux. Por todo ello, se decide optimizar esta aplicación para Windows en vez de para Linux o para versiones de sistemas operativos menos conocidas Selección del lenguaje de programación a utilizar Para este caso, existen grandes cuestiones por muchos programadores que defienden con sus motivos cada uno de los lenguajes de programación existentes. De los lenguajes actuales, por comodidad, orden y reutilización, se busca programación orientada a objetos. La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar. De esta forma, un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separan ni deben separarse el estado y el comportamiento. 27

28 Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a ninguno de ellos, hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos. Esto difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada sólo se escriben funciones que procesan datos. Los programadores que emplean éste nuevo paradigma, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos. Los lenguajes actuales que utilizan esta técnica son: C++. Es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. De su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido. 28

29 Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje multiparadigma. Una particularidad del C++ es la posibilidad de redefinir los operadores (sobrecarga de operadores), y de poder crear nuevos tipos que se comporten como tipos fundamentales. C++ está considerado por muchos como el lenguaje más potente, debido a que permite trabajar tanto a alto como a bajo nivel, sin embargo es a su vez uno de los que menos automatismos trae, con lo que obliga a usar librerías de terceros, como por ejemplo Boost (enlace externo). Por tanto C++ es uno de los primeros lenguajes de programación orientados a objetos y una posible opción válida para utilizar en el programa a desarrollar. C#. Es un lenguaje de programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma.net, que después fue aprobado como un estándar por la ECMA e ISO. Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma.net el cual es similar al de Java aunque incluye mejoras derivadas de otros lenguajes (entre ellos Delphi). El símbolo # viene de sobreponer "++" sobre "++" y eliminar las separaciones, indicando así su descendencia de C++. C#, como parte de la plataforma.net, está normalizado por ECMA desde diciembre de 2001 (ECMA-334 "Especificación del Lenguaje C#"). El 7 de noviembre de 2005 salió la versión 2.0 del lenguaje que incluía mejoras tales como tipos genéricos, métodos anónimos, iteradores, tipos parciales y tipos anulables. 29

30 El 19 de noviembre de 2007 salió la versión 3.0 de C# destacando entre las mejoras los tipos implícitos, tipos anónimos y el LINQ (Language Integrated Query). Como se puede observar, C# al derivar de C++, adopta el estilo de programación orientado a objetos, pero llevándolo más lejos y añadiéndole mejoras respecto a C++. Actualmente es uno de los lenguajes más utilizados por los programadores. Con esto, podríamos señalar que al ser, aunque no exactamente, C# una versión mejorada y más reciente de C++, será más lógico la utilización de C# en vez de C++ en la aplicación que se desarrolla. Java. Es un lenguaje de programación con el que podemos realizar cualquier tipo de programa. En la actualidad es un lenguaje muy extendido y cada vez cobra más importancia tanto en el ámbito de Internet como en la informática en general. Está desarrollado por la compañía Sun Microsystems con gran dedicación y siempre enfocado a cubrir las necesidades tecnológicas más punteras. Una de las principales características por las que Java se ha hecho muy famoso es que es un lenguaje independiente de la plataforma. Eso quiere decir que si hacemos un programa en Java podrá funcionar en cualquier ordenador del mercado. Es una ventaja significativa para los desarrolladores de software, pues antes tenían que hacer un programa para cada sistema operativo, por ejemplo Windows, Linux, Apple, etc. Esto lo consigue porque se ha creado una Máquina de Java para cada sistema que hace de 30

31 puente entre el sistema operativo y el programa de Java y posibilita que este último se entienda perfectamente. La independencia de plataforma es una de las razones por las que Java es interesante para Internet, ya que muchas personas deben tener acceso con ordenadores distintos. Pero no se queda ahí, Java está desarrollándose incluso para distintos tipos de dispositivos además del ordenador como móviles, agendas y en general para cualquier cosa que se le ocurra a la industria. Pues bien, llegados a este punto, se debe decidir que lenguaje de programación utilizar, C# o Java. Por lo que se puede observar, Java permite multiplataforma, lo que C# no, ya que depende de los sistemas operativos de Microsoft. Esto puede ser un problema importante, y a simple vista parece el único problema que plantea, pues sería lógico elegir programar en Java. Pero no es tan sencillo, el principal problema de Java es que al ser multiplataforma, necesita la utilización de la máquina virtual de Java. Dicha aplicación, hace que se ralenticen más de la cuenta las aplicaciones pudiendo dar lugar a programas un poco más lentos de lo normal. Esto podría no ser un problema si se tratara de una aplicación que no necesitara el consumo de muchos recursos, de este modo no tendríamos problemas a la hora de seleccionar el sistema operativo que utilizar, como ya se discutió antes. En este caso, lo que más nos interesa es el rendimiento de la aplicación, ya que a más velocidad de ejecución, más eficientes serán los movimientos realizados por la computadora, así que por tanto, es 31

32 preferible una mejora en la velocidad de ejecución, frente a la multiplataforma. En definitiva, el lenguaje que más nos conviene para este proyecto, al ser una aplicación que requiere gran cantidad de recursos a mayor inteligencia artificial requerida es C#, frente a Java que no nos será de la misma utilidad en este proyecto. 32

33 6.-XNA En este apartado se trata de explicar un poco como funciona y de donde sale XNA. No se entrará en detalles de ningún tipo de programación como C#, C o algo similar, ya que para estos lenguajes de programación, ya hay suficiente documentación sobre ellos y muchos proyectos ya se han basado en ellos. Tampoco nos centraremos en la explicación de la utilización de los programas con los que se ha llevado a cabo toda la aplicación, por motivos similares. Todo esto, solo conllevaría a relleno innecesario de páginas sin información realmente útil. Lo que sí se puede considerar información útil, debido a su reciente aparición en los diseños de programación, es la utilización el manejo y la utilidad de XNA. Por esto, se ha reservado este apartado específico para explicarlo Qué es XNA? XNA Game Studio permite a estudiantes y a programadores de juegos, aficionado a crear juegos que usando.net funcionen en Windows y su Xbox 360. El sistema XNA Framework es el sistema de las bibliotecas de.net con las cuales los programadores pueden disfrutar construyendo sus juegos. Está disponible la primera versión beta desde agosto 30 del Objetivos de XNA Los objetivos contenidos en esta herramienta de programación son: Plataforma cruzada de desarrollo. El objetivo fundamental es hacer fácil desarrollar los juegos. Usando el XNA Framework los juegos funcionan en Windows y el Xbox 360, de esta manera es fácil desarrollar juegos de Windows y una fiel versión de 33

34 Xbox 360 de ella. Aun así existen funcionalidades distintas en una u otra plataforma pero el objetivo primordial fue unificarlas en la medida de lo posible. Simplificar el desarrollo del juego. El desarrollo de juegos es una tarea compleja hasta para el más experimentado programador, cómo será para un simple aficionado? La meta del XNA es crear juegos en "5 minutos", eliminado elementos de programación tales como: Crear una ventana. Enumerar los aparatos gráficos y sus características. Crear dispositivos de representación 3D (Direct3D). Manejar punteros y direcciones a objetos e interfaces. Estas tareas representan elevada complejidad. En XNA lo importante es enfocarse en crear un bueno código para un buen juego. 34

35 6.3.-Las capas A continuación se muestran las capas de las que está compuesto XNA: Plataforma. La plataforma es la capa más baja y agrupa API nativo, enmascarado por XNA. A esta capa pertenecen las APIs: Direct3D 9. XACT. XInput. Content. Núcleo del Framework. El núcleo es la primera capa del XNA y proporciona las funcionalidades sobre las cuales las otras capas trabajan. Si se tuviera que asociar algún trabajo de DirectX, esta sería la capa. Aquí se encuentran las demás partes agrupadas por funcionalidad: 35

36 Gráficos. Audio (XACT). Entradas (XInput). Matemáticas. Almacenaje. Framework de extensión. El foco principal de esta capa es hacer el desarrollo del juego más fácil. En la actualidad actualmente, esta capa tiene dos componentes principales: El Modelo de Aplicación. Administrador de Contenido (Tubería) Content Pipeline Características Modelo de aplicación. El propósito del modelo es alejar al programador de los problemas de la plataforma, para solo centrarse en escribir el juego. No hay porque preocuparte al crear ventanas, manejar sus mensajes, crear contador de tiempo o un reloj, XNA proporciona todo esto al programador. Se proporciona un componente primario llamado GraphicsDeviceManager (servicio para administración de gráficos) que se encarga de la creación y gestión de los dispositivos gráficos, de esta manera no es necesario escribir código para crear un dispositivo gráfico DirectX. Igualmente en el Xbox 360 no son necesarias las ventanas así el desarrollo ahora unifico para ambas plataformas. 36

37 También se ha proporcionado un modelo básico de componente, que permite que incorporar y crear fácilmente GameComponents (componentes del juego) escritos por otras personas en tu juego. Lo que representa una gran para la creación de una biblioteca de componentes reutilizables. Gráficos. El sistema gráfico actual del XNA Framework (XNA GSE 2.0) se encuentra sobre DirectX 9. El grupo desarrollador empezó el desarrollo desde MDX pero realizaron una reconstrucción total para hacerlas más fáciles utilizar y más constante con las pautas del diseño de.net. XNA Framework carece de ayuda para la funciones fijas o funciones integradas a las tarjetas graficas T&L (como sombreado Pong y Goraund, Bump-maping, Luces tipo T&L Spot, point, etc.). Esto a favor de los esquemas de con sombreadores personalizados (en otras palabras se requiere una buena tarjeta de video). Las razones para esta decisión es que el futuro de los gráficos de computadora en tiempo real como el "Direct3D 10" ya no ofrecerá soporte a las funciones fijas. Se consideró más valioso lograr programar en PC y XBOX 360 de forma idéntica que la entender la forma que se realizan sus funciones internamente. También tiene una implicación sobre los programadores veteranos. Deben aprender a trabajar solo con sombreadores para evitar errores en la compilación. Se ha integrado un objeto llamado BasicEffect (que es un objeto que maneja los efectos) más fácil utilizar que los dispuestos para DirectX bajo C++, y con características tales como luces y 37

38 texturas, de modo que la experiencia de los primeros 5 minutos siga estando adentro del alcance del usuario. Con el BasicEffect se pueden conseguir efectos sorprendentes en pantalla muy rápidamente y fácilmente sin tener que realmente escribir un sombreador. Se brindando la facilidad de sombreadores y efectos en el componente BasicEffect lo que permite comenzar a escribir tus propios sombreadores y efectos, utilizar estos directamente. Audio. El audio en XNA se construyó sobre XACT, o plataforma cruzada de audio creada para Windows y el Xbox 360. La idea detrás de XACT es imitar los fundamentos de los sombreadores del Direct3D. Los autores pueden utilizar las herramientas de XACT para crear los paquetes de efectos sonoros y configurar cosas como el volumen, mezclarse (incluyendo 5.1), etc. El desarrollador entonces toma el paquete, lo carga, y puede reproducir fácilmente sonidos por su nombre, no teniendo que preocuparse de los almacenamientos (buffers) intermediarios o de inicialización. Un autor puede crear un sonido y llamarlo Gran Explosión de diversos archivos de WAV, que contenga tenga un efecto de LFE (de baja frecuencia), y se mezcle entre los otros canales. El programador no necesita saber ninguno de estos detalles; él apenas con llamar a la Gran Explosión" este se reproduce. 38

39 Entradas o Mandos. En XNA no necesitas listar dispositivos, iniciarlos y leerlos porque todos los dispositivos están siempre listos para ser leídos, todo lo que se necesita es llamar al GetState del dispositivo para leerle su estado. Se habilitaron entradas desde el teclado y el ratón para Windows. En cuanto a mandos, el sistema de interacción se construyó sobre la librería XInput, que es la plataforma cursada que conduce al mando del Xbox 360, común para ambas plataformas. Como la filosofía es facilitar el desarrollo, se deshabilitaron los dispositivos de mando como los gamepad o joystick, lo que evita de cierta forma la necesidad de preocuparse de configurar o de lanzar un dispositivo. Almacenamiento. El API Almacenaje proporciona la manera que puedes leer y escribir datos del juego (tales como juegos de ahorro, cuentas altas, etc.) de una manera neutral. En Windows no es un reparo puesto que se poseen las librerías System.IO y los métodos del sistema que permiten la localización correcta para el usuario actual. En el Xbox 360, es necesario el estado del juego asociado a un perfil y a un dispositivo de almacenaje, tal como el disco duro o una unidad de memoria. El almacenamiento se hace muy fácil, y, en armonía con la meta de una plataforma cruzada, así XNA emula el manejo en Windows, acoplándolo a las características de XBOX 360, para utilizar el mismo código en ambas plataformas así poder leer y para escribir los datos. 39

40 Matemáticas. Las matemáticas del XNA proporcionan los tipos de uso frecuente para el juego 2D y 3D. XNA incluye un paquete de matemáticas vectoriales como por ejemplo Vector2, Vector3, Vector4, matriz, el plano, y el rayo. También está incluida la limitación por volumen como BoundingBox, BoundingSphere y BoundingFrustum (ayudas para cálculos de colisiones en 3D desde la cámara), éstos incluyen los métodos para hacer pruebas de la intersección y de la contención. Las librerías matemáticas son derechas por defecto. También se conocen de la mano derecha usan coordenadas basadas en la regla de la mano derecha, con la palma de la mano derecha extendida apuntando hacia el eje X se cierra la mano en la dirección del eje Y el dedo pulgar da la dirección del eje Z en el sentido positivo. Para programadores muy experimentados se provee del método CreateLookAt, que proporciona una matriz derecha de la visión en vez de ofrecer un CreateLookAtLH y un CreateLookAtRH. La razón es el facilitar la integración en la creación de componentes. Con un sistema de coordenada estándar es más fácil utilizar el contenido fuera de XNA. Para un sistema absolutamente zurdo (o algo más sofisticado) se pueden elaborar con la penalidad de que debe ser realizada la matemática por cuenta propia. 40

41 7.-Diseño de la aplicación En este apartado se intentará razonar debidamente las determinaciones informáticas que se han tomado para la realización de este proyecto. Datos como la elección del lenguaje de programación, la presentación y ejecución de la aplicación, se abordarán detenidamente en este apartado Elección de sistema de desarrollo y lenguaje de programación Ya se comentaba como uno de los requisitos necesarios, conseguir ejecutar la aplicación en un PC actual con un sistema operativo no obsoleto. Se podrían plantear diferentes sistemas operativos donde ejecutarse, pero siempre se llega a los dos grandes de la informática y con los que hay tantas disputas y debates, Windows y Linux. En este caso, la elección ha sido que funcione particularmente en Windows, ya que se ha desarrollado en un tipo de programación perteneciente a.net de Microsoft, que se dedica particularmente a juegos. Esto da ventaja y facilidad a proyectos parecidos a este, que se basan en la programación de aplicaciones dedicadas al estudio de la inteligencia artificial dados en juegos. El lenguaje utilizado en este proyecto es C#, apoyándose en XNA, parte especializada en juegos de.net. Se trata de un lenguaje muy actual y que está en pleno auge. Dentro de las diferentes versiones existentes de XNA, se ha utilizado la versión 2.0. Existen la 1.0 y la 3.0. La primera versión no se ha utilizado por motivos obvios, ya que la segunda ofrece una mejora respecto a la primera en gran medida. 41

42 Por qué no hemos utilizado la versión más moderna y actualizada de XNA? Como ya se sabe, cuando se lanza una versión al mercado de cualquier tipo de software, no se ha explotado suficientemente hasta pasado un tiempo. Como aconsejan muchos programadores expertos, es más aconsejable utilizar XNA 2.0 en este momento. Aunque no dentro de mucho, todos utilizarán la versión más moderna de este software. Otra de las ventajas que ofrece este servicio es poder trasladar esta aplicación a videoconsolas, ya que XNA ofrece la opción de ejecutar los programas realizados de dicha manera en XBOX 360 de manera muy sencilla, ya que el lenguaje utilizado es exactamente el mismo. El software se ha desarrollado particularmente para que se pueda ejecutar correctamente en sistemas operativos Windows 2000/NT, Windows XP o Windows Vista. Esto no hace que solo sea posible ejecutarse en dichos sistemas operativos, ya que, se están desarrollando compiladores para Linux que son capaces de ejecutar C# sin necesidad de utilizar ninguno de los sistemas operativos desarrollados por Microsoft. Como estamos desarrollando una aplicación para Windows utilizando XNA, es lógico que nuestro compilador sea Visual Studio Este compilador está especializado en este lenguaje al igual que otros, pero además, permite la instalación del plug-in para XNA 2.0. Utilizándolo, se obtendrá una versión del software en un ejecutable.exe que junto con el contenido utilizado en el diseño, nos permitirá la correcta ejecución de la aplicación. Una vez claro dónde y cómo se va a desarrollar la aplicación, hay que tener en cuenta los detalles que contendrá el programa para que satisfaga los requisitos y objetivos requeridos. 42

43 7.2.-Elección del menú Todo juego hoy en día, antes de comenzar la partida necesita que se le especifiquen una serie de cuestiones, para ver que características son las que desea el usuario que va a ejecutar nuestro programa. Por tanto no nos bastará con una pantalla que inicie el juego, sino que debemos previamente crear una especie de menú donde podremos señalar previamente las opciones pertinentes. Se dividirá las pantallas a mostrar en tres diferentes: Pantalla de bienvenida. Se tratara simplemente de una imagen que dará titulo a la aplicación que durará breves segundos y dará paso incondicionalmente a la pantalla de menú. Pantalla de menú. Esta pantalla nos permitirá acceder a las características posibles que se le pueda dar al juego. Casos como el número de jugadores que participarán, o el número de computadoras e humanos, deben estar disponibles a elección. Además, ya que se trata de un proyecto que estudia las diferentes posibilidades de inteligencia artificial que puede obtener una máquina, junto con el coste que conlleva, debemos tener la opción de definir de alguna manera, la dificultad de cálculo o el tipo del mismo, que podrá ejecutar la computadora. Pantalla de juego. En esta pantalla se debe tener bien definido el tablero de juego, con las fichas correspondientes al número de jugadores previamente indicados. Además se debe indicar los números de jugadores que participan y permitir solo mover las fichas del jugador al que pertenece el turno. Debe quedar claro cuando finaliza una partida y cuáles jugadores han conseguido el objetivo antes que el resto de adversarios. 43

44 El paso de una pantalla a otra debe ser cómodo y sin complicaciones, que no haga falta finalizar una partida para poder salir o comenzar de nuevo una partida con las mismas, o distintas características Manejo de la aplicación Dado que se está realizando una aplicación para PC principalmente, el manejo deberá estar basado en el uso de teclado y ratón. Además, ya que se está utilizando XNA, es muy fácil adaptarlo para que funcione en XBOX, pero en este caso no entraremos en ese detalle ya que no se trata de un producto final para comercializar, sino un proyecto de estudio. Esta vez, no será necesario la utilización de teclado, excepto para la opción de salir de la aplicación, que siempre estará activo el botón de ESC para ese cometido. Para el resto, será mucho más intuitivo poder señalar las opciones disponibles mediante botones donde se pueda pinchar y marcar Texturas y gráficos Cuando utilizamos Visual Studio, son muchas las posibilidades de diseño gráfico las que tenemos. Podemos, ayudándonos de diferentes programas, añadir imágenes o incluso estructuras en 3 dimensiones para que sean ejecutadas y programadas dentro de cualquier aplicación. Esto nos da la opción de elegir el número de dimensiones que usará la aplicación. Como estamos hablando de un juego de mesa, la necesidad de utilizar tres dimensiones para visualizar de forma mejorada el tablero de juego y sus movimientos no es necesaria en este estudio. Eso incluiría un retraso, ya que el simple hecho de calcular coordenadas, estaría condicionada en cada caso por un punto más. 44

45 Además, el simple hecho de programar con esas condiciones añadiría una complicación, que no sería relevante para el cometido de este proyecto. En este proyecto se pretende realizar una inteligencia artificial rápida y eficaz, y eso no depende del número de dimensiones. Para versiones posteriores dedicadas a la comercialización o uso como objeto de entretenimiento y no de estudio, se podría plantear el uso de tres dimensiones a modo de mejora. Por tanto, se utilizará programación en dos dimensiones, y las texturas que se utilizarán serán imágenes previamente diseñadas para darle un realismo y claridad lo suficientemente cómodo para el usuario. Obviamente, tampoco es necesario centraremos demasiado en el diseño de las imágenes, ya que ocurre lo mismo que en el caso anterior, no nos es relevante en el estudio que se pretende realizar, pero es un detalle que siempre resulta positivo, el detalle de la presentación. 45

46 46

47 8.-Implementación de la aplicación Cómo se puede conseguir que un juego de mesa con su tablero y fichas físicas pueda reproducirse en una pantalla de dos dimensiones? De ello se encarga la programación. A partir de simples reglas y algoritmos, aunque resulte increíble, se puede llegar a obtener verdaderas aplicaciones con grandes funcionalidades. Y cómo se consigue que parezca un juego y se diferencie correctamente cuáles son los elementos del juego? Una de las ventajas de los lenguajes de programación actuales, es que nos permite poder cargar elementos externos al entorno de programación que utilicemos. Utilizando simples imágenes básicas, podemos hacer que el juego tome una forma semejante a la realidad. En este caso, se utiliza programación orientada a objetos, lo cual dará ventaja para poder ordenar los diferentes tipos de elementos del juego Clases básicas utilizando XNA Como ya se comentó anteriormente, Visual Studio 2005 posee una extensión para la aplicación que permite que se creen proyectos dedicados expresamente a la implementación de juegos. Al comenzar un proyecto de este tipo, proyecto llamado Windows Game 2.0 dentro de las opciones de XNA Game Studio 2.0, se generan automáticamente varias clases dentro del proyecto. Estas clases son la base de las aplicaciones diseñadas específicamente como juegos. Estas clases iniciales son: Program. Esta clase se genera automáticamente y no es necesario que sea modificada. Simplemente se encarga de realizar la ejecución cuando se haga la llamada a Game1. 47

48 Game1. Es el esqueleto de cualquier aplicación de este tipo. Inicialmente, contiene una serie de funciones que deben ser implementadas según las exigencias de la aplicación a diseñar. Las funciones que deben ser implementadas son las siguientes: Initialize. Se inicializa todos los valores que deben conocerse antes de ejecutarse la aplicación. Opciones como el tamaño que tendrá la ventana, el título, si el ratón será visible o no, etcétera, serán los valores que deben estar contenidos aquí. Al final de la función debe aparecer escrita la sentencia: base.initialize(); Es la que se encarga que se hagan válidas todas las instrucciones. LoadContent. Aquí se cargan todos los elementos externos a la programación. Las imágenes y archivos que sean necesarias para nuestro proyecto pero que no se puedan generar desde Visual Studio 2005, deberán agregarse en esta parte del código con la sentencia de carga correspondiente. Se debe también, cargar el archivo al proyecto pinchando en la carpeta Content y añadiendo el elemento existente. Update. Aquí se actualizan todos los elementos de la aplicación. Esta función está continuamente ejecutándose, y debe tenerse en cuenta cada cambio que deba producirse para que se actualice correctamente. Sin esta función, el juego no tendría cambios en el tiempo, y por tanto no podría ser un juego en tiempo real. También debe contener al final de la función la sentencia: base.update(gametime); 48

49 Que establecerá todos los cambios realizados en este momento de ejecución. Draw. Es la que se encarga de la interfaz gráfica. En ella, todos los elementos gráficos que participan en el programa, son dibujados según las características fijadas por las variables de las que dependen. Estas variables serán modificadas en la función Update y debido a dicha modificación, se producirán cambios gráficos y alteraciones de posición de elementos en la pantalla. La sentencia que activa el repintado de la pantalla es: base.draw(gametime); Con ella todos los elementos a dibujar se hacen efectivos. Normalmente, la función Game1 es la que ocupa mayor parte de cualquier proyecto y lleva más carga de código. Esta vez, hay poco que comentar de esta función, ya que la función Game1 ha sido dividida en diferentes clases las que se compondrá la aplicación. Usualmente, estos juegos se componen de una única pantalla, donde se realizan todos los cambios, pero este añadido ha sido necesario por limpieza y comodidad. Por eso, en cada función, solo se le ha pasado la funcionalidad a la clase que corresponda. En esta clase, se ejecutarán las funciones de inicialización, carga de elementos externos, actualización y representación gráfica según convenga en cada caso. Su funcionamiento será explicado a continuación. 49

50 8.2.-Elementos del juego Qué elementos intervienen en un juego de tablero? Como en cualquier juego de mesa, los elementos más importantes son: Fichas Tablero Jugadores El jugador en sí, no es un elemento físico del juego, pero es la parte más importante del mismo. Cómo se podría organizar estos elementos en clases de una forma ordenada y que convenga para la implementación? Hay muchas posibles soluciones para esta pregunta. La solución que se ha utilizado para el desarrollo de esta aplicación parte de un elemento principal, el tablero, que contiene cada uno de los elementos que compone la mesa La clase Tablero Esta clase contiene todos los elementos que participan en el juego. A partir de ella, desde la clase principal, se crea una instancia de esta clase, un objeto, y será el pilar de toda la partida. A partir de ella se realizarán los cambios en el juego y mantendrá todos estos internamente sin perder la más mínima información. Los componentes más importantes de esta clase son: Casillas. Reúne la totalidad de casillas que componen el tablero de juego. En este caso, el número de casillas es 121. Se inicializan cada una de ellas indicando el número correspondiente de la casilla, y la posición que ocupará en la pantalla. Cada casilla tiene 50

51 un número, que parte del 0 hasta el 120 sin repetirse, y será su identificador. Dependiendo del número de jugadores participantes y las casillas que estos jugadores ocupen inicialmente, deberá utilizarse diferente tipo de constructor. Esto se explicará más detenidamente en la clase Casilla. Jugadores. Partiendo del número que indica los jugadores que participarán, se inicializa cada uno de los jugadores. Cada uno de ellos formará un objeto de la clase Jugador, que serán independientes unos de otros La clase Casilla Cada objeto creado de esta clase, forma una de las casillas de las 121 de las que se compone el tablero. Aunque parezca muy simple para formar una clase, tiene una serie de atributos que hacen que los movimientos realizados por las fichas en las casillas sean más fáciles de programar. Sus atributos más importantes son: Número de casilla. Se trata de un simple identificador para poder diferenciar una casilla de otra dentro del tablero. Número de jugador. Si la casilla está ocupada por alguna ficha, esa ficha pertenecerá a alguno de los jugadores participantes. Aquí se indica el número del jugador que posee esa ficha que está ocupando la casilla. Número de la ficha. Cada jugador posee 10 fichas. Cada una de estas fichas tiene un identificador. Con este atributo, se puede obtener cual es el número de la ficha que está ocupando la casilla en cuestión. Utilizando este valor junto con el número de jugador, se está completamente informado de cuál es exactamente la ficha que ocupa la posición de la casilla, ya que el par de valores número de ficha y jugador, no se puede repetir en todo el tablero. 51

52 Valor lógico ocupado. Si la casilla está ocupada por alguna ficha de alguno de los participantes de la partida, este valor será verdadero. Si por el contrario, ninguna ficha ocupa esta posición, tendrá valor falso. Como ya se comentó antes, dependiendo del número de jugadores iniciales, estarán ocupadas unas casillas y otras no. Por ello, se utilizan dos tipos de constructores: Constructor para casilla inicial vacía. Únicamente se inicia el valor del identificador, número de casilla. El resto de valores se inician a falso o -1, ya que no nos interesan. Constructor para casilla inicial ocupada. En este caso, esta casilla ocupa una posición en la partida que será ocupada por alguna ficha de los jugadores del juego. Dichos valores son pasados por parámetros y se inicializarán asignando los valores de la forma comentada anteriormente. Además, esta clase posee los métodos necesarios para poder cambiar sus atributos, es decir, poder cambiar de posición, desocuparla, etcétera. Resulta irrelevante entrar en detalles por la sencillez de dichos métodos La clase Jugador Existirá un objeto de esta clase a la hora de ejecutar el programa por cada uno de los jugadores que participen. Aquí se conserva la información de las posiciones de las fichas, y otros datos relevantes para el juego. Los atributos más importantes son: Fichas. Cada jugador dispone de 10 fichas. Aquí se crea el vector que genera cada una de esas fichas. Estas fichas tendrán una posición inicial y serán las que se irán moviendo por todo el tablero ocupando y desocupando casillas. 52

53 Número de movimientos. Se trata de un contador que se incrementa cada vez que el jugador realiza un movimiento válido. De esta forma se lleva la cuenta de cuantos movimientos ha realizado el jugador. Número de saltos máximo. Cada vez que un jugador realice un salto, se tendrá en cuenta. Al realizar saltos simultáneos en una misma jugada, se comparará con el valor actual y si se supera, éste será su nuevo valor. Número de fichas colocadas. Para llevar la cuenta de cuantas fichas en posiciones finales tiene el jugador, se ha creado esta variable. Cuenta el número de fichas que están posicionadas en casillas finales. Las casillas finales son diferentes en cada jugador. Distancia total restante. Este número puede ser un buen valor aproximado de cómo se está desarrollando la partida. Obviamente es muy relativo, ya que solo cuenta la distancia en casillas que existe de todas las fichas por colocar, pero la colocación de las fichas para posibles saltos no se tiene en cuenta. Vector de posiciones finales. Dependiendo de la posición inicial del jugador, se creará un vector que contendrá justamente las casillas de la esquina opuesta que ocupa el jugador. Estos valores serán las posiciones finales que debe alcanzar el participante. Punto central. Es un atributo auxiliar. Para los cálculos en heurísticas, una de las opciones que se tomó es calcular la distancia a la casilla más lejana de las posibles finales. Este valor señala dicha casilla. En el constructor se inicializan todos estos valores y algunos atributos más de la clase que no se han comentado. Valores como el vector de posiciones iniciales y el punto central, son dependientes de la posición inicial del jugador que forma este objeto. 53

54 La clase Ficha Cada una de las piezas de un jugador debe ser un objeto de esta clase. Los atributos relevantes que forman esta clase son: Número de casilla. Identificador de la casilla en la que está posicionada. Así podemos llevar un seguimiento de la posición en la que se encuentra dicha ficha. Posición de la ficha. En el tablero, cada ficha ocupa un par de coordenadas X e Y que indican la posición en pantalla en la que debe dibujarse la ficha. Este par de valores se encargan de ello. Textura de la ficha. En todo juego de tablero donde las fichas son de la misma forma, es necesario una diferenciación de alguna tipo sobre los demás jugadores. En este caso, se utilizan imágenes de distinta forma y color según el jugador. Cada una de las fichas, dependiendo del jugador al que pertenezca, poseerá una textura que determinará qué forma y color tendrá. Valor lógico Seleccionado. Valor que determina si el ratón está pulsando encima de la ficha o no. Toma valor verdadero si lo está haciendo y falso en caso contrario. Las funciones de las fichas son las básicas necesarias para los cambios de posiciones. Pero, además, hay una función que se utiliza para la correcta interacción entre las fichas y el ratón. En ella, cuando el atributo de la clase seleccionada está activo, permite el desplazamiento libre de la ficha por las posiciones que se sitúe el ratón por toda la pantalla. Ese atributo que permite eso depende, entre otras cosas, de que el botón izquierdo del ratón esté pulsado y haya sido sobre esta ficha Valores invariantes del tablero de juego Muchos atributos dentro de la programación, resultan invariantes. Es decir, son valores necesarios para los cálculos en la aplicación, pero se 54

55 sabe que sus valores nunca variarán. Por eso, añadirlo dentro de una clase que formará un objeto puede ser algo innecesario y puede producir un gasto inútil de memoria y cálculo. Conociendo eso, los lenguajes de programación incorporan clases, funciones y métodos para los que no son necesarias la creación de un objeto para poder ser utilizado. Estamos hablando de las clases estáticas. En esta aplicación se dispone de una única clase estática que recoge aquellos valores necesarios, pero que no precisan de pertenecer a ninguna clase que se vaya a utilizar un objeto de la misma. La clase que contiene todos esos valores estáticos se llama Estaticos La clase Estaticos Los elementos principales e invariantes de esta clase son: Posiciones. El tablero es un elemento fijo en la pantalla de juego. Siempre ocupará la misma posición. Por consiguiente, sus casillas incluidas dentro de él, tampoco variarán su posición. La posición de una casilla viene determinado por un valor X y un valor Y, es decir, las coordenadas en pantalla. Este atributo estático almacena la posición central de cada una de las casillas del tablero. Está formado por 121 pares de valores X e Y, y se utiliza como base para los cálculos de posiciones en la clase Casilla y resto de cálculos para dibujar elementos que dependan de las casillas en la pantalla. Con conocer el número de la casilla, podemos determinar las coordenadas en las que estará centrada. Adyacentes. Cada casilla ocupa una posición en el tablero, y esta posición puede ser cercana como máximo a 6 casillas por la 55

56 forma en la que están dispuestas éstas en el juego. Para calcular más cómodamente cuáles son las casillas adyacentes de cada una de ellas, se utiliza este atributo estático. Se utilizan vectores de tamaño 6, dándole un valor numérico por orden. Se comienza por la casilla próxima inferior más a la izquierda de la casilla en cuestión. Luego se procede en sentido contrario a las agujas del reloj hasta completar las 6 casillas adyacentes. Según ese orden va de 0 a 5. Si no existe alguna de las casillas adyacentes por encontrarse en una esquina o similar, el valor que toma es -1. Si existe, se almacena el identificador numérico de esa casilla. De esta forma se está informado sin necesidad de cálculos extras del grafo de adyacencia que forma el tablero. Distancias. Parte esencial en el desarrollo del juego. Con este valor estático, se acelera eficazmente los cálculos realizados por la computadora. Como se puede observar, la distancia de una casilla a otra siempre es la misma, eso nunca variará, ya que las casillas siempre tendrán la misma numeración y el tablero tendrá la misma forma, independientemente de si es más grande o más pequeño, etcétera. Hay que señalar, que las distancias calculadas son en número de casillas, ya que es más lógico que utilizar distancia euclídea o alguna parecida, debido a la forma de la mesa de juego. Se utiliza un vector de 2 dimensiones, en el que cada una de las dimensiones es un número de casilla, y el valor que tiene almacenado es la distancia entre esos 2 números dados. Para calcular esto, es impensable escribir cada valor a mano, ya que si tenemos en cuenta todas las posibles combinaciones, habría que escribir cada una de las combinaciones. Por ello, se ha 56

57 utilizado un algoritmo utilizando sistemas de almacenamiento de tipo cola, y partiendo de los valores adyacentes de cada casilla para poder calcular todas ellas Estados del juego Como se ha comentado anteriormente, los juegos utilizando XNA por defecto, suelen llevar un único estado, donde se desarrollará todo el juego sin cambios. En este caso, se ha utilizado una interfaz, y un manejador de estados, para poder cambiar de estado con comodidad. Por tanto, todo esto consta de 3 partes importantes formando clases: Manejador de estados. Es la clase que se encarga de intercambiar entre los diferentes estados existentes. Interfaz de estados. Contiene las funciones principales necesarias para cualquier Estado: Draw, Update y LoadGraphicsContent que es derivado de LoadGraphics. Clases que implementan la interfaz de estados. Cada una de las clases que forman parte de un estado del juego debe implementar la interfaz de estados con sus funciones correspondientes. El manejador de estado elegirá cuál es el estado correspondiente. Los estados que se han utilizado en el programa son: Estado de bienvenida, estado de menú, y estado de juego La clase ManejadorDeEstados Contiene como atributo principal un elemento de tipo interfaz de estado del juego. Para poder alternarse entre los diferentes estados del programase utiliza una pila. Los métodos que componen esta clase son: AgregarEstados. Como el propio nombre indica, este método se encarga de agregar estados a la pila. 57

58 RemoverEstados. En este método se elimina el estado de la pila. Los métodos Draw, Update y LoadGraphicsContent también deben ser implementados en esta clase. Estos son llamados por el estado que ocupa la cima de la pila de la clase, es decir, dependiendo del estado que ocupe la cima, será el que ejecute cualquiera de las funciones señaladas La interfaz IEstadoDeJuego En esta interfaz simplemente se recogen aquellas funciones que deben tener cada uno de los estados que la implementen. Estas son: Draw Update LoadGraphicsContent Esta interfaz, está implementada por 3 clases que forman 3 estados diferentes: La clase EstadoBienvenida La clase EstadoMenu La clase EstadoJuegoDC A continuación se detallarán cada una de las clases, con sus atributos, estas funciones, y otras específicas de la clase La clase EstadoBienvenida Esta clase presenta a la aplicación. No tiene ninguna función especial, solo se trata de una bienvenida que precede al programa. Inicialmente, se añade un objeto de esta clase a la pila del manejador de estados. En esta clase se carga una imagen por pantalla que se va modificando levemente y dura unos breves segundos. Transcurridos unos segundos, se 58

59 desapila del manejador de estados y se añade la clase que contiene el estado del menú. De esta forma se intercambia del estado de bienvenida al estado de menú del juego La clase EstadoMenu Aquí se configuran las opciones que se tendrán en cuenta para el juego. Esta clase está formada principalmente por: Elementos de tipo BoundingSphere y BoundingBox. Estos elementos se utilizan para detectar zonas virtualmente en la pantalla. Se pueden dibujar esferas y rectángulos en la pantalla y realizar operaciones invisibles gráficamente con ellas. Texturas. Las texturas se hacen coincidir con las posiciones de los elementos anteriores. Al colocarlas en la misma posición, se puede utilizar el ratón para pinchar sobre las texturas y realizar operaciones como cambiar de imagen al pasar el ratón por encima o al pinchar sobre ella. Las operaciones se realizan sobre los elementos tipo Bounding, pero lo que cambia son las imágenes. De esta forma se crea el efecto de señalar una opción del menú y que se observe que realmente lo ha reconocido el programa. Variables de tipo lógico y numérico. Al hacer clic sobre una de las texturas que actúan como opciones, se activan cambios de imágenes, pero no queda recogido de ninguna forma para que la pantalla de juego lo tenga en cuenta. Por tanto es necesario además, el uso de variables que recojan esa información cada vez que se haga un cambio de selección en pantalla. Estas variables son pasadas por parámetros al estado de juego. Funciones de colisión. Una de las funciones que tienen los elementos BoundigSphere y BoundingBox es la comprobación de posiciones contenidas. Con ella podemos comprobar que una posición determinada está contenida dentro del elemento en 59

60 cuestión. Con esta función, podemos adaptarla para que cada uno de los elementos pueda reconocer si se está pinchando en él o no. Implementación de las funciones Draw, Update y LoadGraphicsContent. En todos los estados es necesaria esta implementación. Aquí se procede como se comentó anteriormente, sin nada especial que especificar La clase EstadoJuegoDC En esta clase es donde se desarrolla en el juego. Es la clase más importante del programa, ya que pone en marcha todo el mecanismo del juego y utiliza el resto de clases creadas para su ejecución. Los atributos relevantes de explicación que posee esta clase son utilizados en las funciones que contiene. Las funciones que componen esta clase son: Constructor. Aquí se inicializan los valores de las variables que componen esta clase. Se almacenan los valores de las variables obtenidas desde el estado menú y se crea un objeto de tipo tablero, que será el atributo que tendrá contenida la partida y todos sus cambios realizados en él. Funciones de colisión. Para esta pantalla, también es necesario este tipo de funciones para obtener las colisiones con los botones existentes y para realizar movimientos sobre las fichas. Tienen la misma función que en el estado de menú. Función leerraton. Esta función se encarga de llevar a cabo las funciones que debe realizar este periférico en el tablero de juego. Si se dan las condiciones necesarias para que se deba realizar un movimiento en el tablero por un jugador humano, esta función se encarga de ello. Estas condiciones deben ser: 60

61 El turno del jugador actual no sea el de un jugador artificial. El jugador actual no debe haber finalizado la partida. Si se cumplen esas condiciones, se realiza el proceso de posibilidad de movimiento de ficha del jugador actual. En primer lugar, se produce una comprobación continua de colisión con las fichas del jugador actual. En el momento que exista una colisión del ratón al pinchar en alguna de las diez fichas pertenecientes al jugador se pasa al paso siguiente. Mientras se mantenga el ratón pulsado, la ficha estará enlazada al ratón, la cual será redibujada continuamente con cada movimiento de ratón. Cuando se suelta el botón izquierdo del ratón pasamos al siguiente paso. En este paso, se obtiene mediante las funciones cercano y posicionvalida si el lugar en donde se pretende soltar la ficha es una casilla permitida y válida. Si lo es, la ficha se coloca en el centro de dicha casilla, y se modifican las posiciones en el objeto de tipo tablero, modificando a su vez todos aquellos atributos internos de tablero como el número de movimientos, fichas finales colocadas, etcétera. Si la posición no cumple los requisitos, no se produce ningún cambio y la ficha vuelve a su estado original, esperando a una nueva detección de colisión. Si resulta ser la última ficha del jugador por colocar en una posición final, se añade este jugador a la lista de ganadores y no se le permite realizar más movimientos en un futuro. 61

62 Función leerteclado. Esta función se encarga del cometido del teclado. En este proyecto, no se le ha dado especial importancia al uso del teclado, ya que con el manejo del ratón se puede completar perfectamente cualquiera de las funciones requeridas en la aplicación. La única utilidad que se le ha dado por comodidad, es poder salir de la aplicación en cualquier momento con la simple pulsación de la tecla ESC. Esta función se encarga de ello. Función cercano. Se trata de una función auxiliar utilizada en leerraton. Para darle un cierto orden al juego, las fichas dibujadas en pantalla siempre mantendrán la misma posición si mantienen la misma casilla. Pero esto puede ser un problema a la hora de intentar colocarlo con el ratón. Por eso, esta función calcula la cercanía de la ficha a una casilla, permitiendo como margen de error un número de pixeles de lejanía. De esta forma, la ficha se colocará automáticamente en su posición si esta en torno a la posición central de la casilla en la que se pretende colocarse. Función distancia. A partir de 2 valores dados devuelve el valor de distancia contenido en el vector de dos dimensiones Distancia, dentro de la clase estática Estaticos. Función cambiarjugador. Cuando un jugador humano o artificial realiza un movimiento, es necesario pasarle el turno al siguiente jugador válido. Esta función se encarga de eso. Función ganador. Un jugador que ha finalizado el juego, no debe poder participar más en la partida. Esta función comprueba este tipo de jugadores. Función posicionvalida y posicionvalida2. Estas dos funciones, permiten el cumplimiento de las reglas de movimientos establecidas por el juego de las damas chinas. Sin 62

63 estas funciones, un jugador podría libremente mover cualquiera de sus fichas el cualquiera de las posiciones existentes del tablero. Además de comprobarse que la casilla a la que se desplaza la ficha debe estar desocupada, aquí se comprueba que ocurra uno de los siguientes hechos: La casilla a la que se desplaza la ficha es adyacente a la casilla de la que se parte. La casilla a la que se desplaza la ficha es adyacente a una distancia de 2 unidades de la casilla de la que se parte. Además, la casilla intermedia debe estar ocupada por alguna ficha de un jugador opuesto o propio. La casilla a la que se desplaza la ficha puede realizar movimientos de adyacencia del tipo del apartado anterior, de forma que se permiten un número de saltos indeterminado en un mismo turno. La forma de programar esto es mediante recursión. En primer lugar se examina que la casilla seleccionada no sea ninguna de las adyacentes desocupadas de la posición inicial. Si lo es, la búsqueda termina y se considera un movimiento válido. Si no lo es se continua la búsqueda. A continuación, se busca las casillas adyacentes de la casilla nueva a colocar la ficha que estén ocupadas. Éstas, son aptas para poderse realizar un salto. Se comprueba que las adyacentes en esa dirección cumplen el requisito de estar desocupada a una distancia de 2 casillas. Si coincide con la casilla inicial, la posición nueva es válida. 63

64 Por último, se entra en un proceso recursivo al llamar a la función posicionvalida2. En ella, al comprobar un salto válido, pero no resultar ser la casilla de la que parte la ficha, se realiza un nuevo salto a partir de esa posición, abarcando recursivamente todas las posibles posiciones válidas del tablero a partir de la posición final. Cada vez que se pasa por un nodo, este nodo se marca, para no repetirse, y no entrar de este modo en un bucle infinito. Si llega el punto en que no quedan más nodos que comprobar, esto significará que la posición deseada no es válida y se informará por tanto de ello. Podría verse como una recursión en sentido contrario, que en vez de partirse de la posición inicial y buscar la posición final deseada, se parte de la posición final, en busca de la posición de la que partía la ficha. Se consideró esta forma de programación por eficiencia. Función jugadorvalido. Comprueba sin un jugador participa en la partida. Esto se utiliza para la distribución de colores para cada jugador en la pantalla. Función calcularsegundosactuales. Esta función obtiene los segundos y minutos actuales. Con ellos, y usándola en el momento de cálculo de la computadora, podemos obtener el tiempo empleado en cálculo de movimiento de la CPU. Función LoadGraphicsContent. El cometido de esta función es similar al del resto de estados. Se encarga de cargar todas esas imágenes que participarán en la ejecución de la pantalla de juego. Función Update. Esta función es la más importante de esta clase. Se encarga de poner en marcha todo el juego. 64

65 En primer lugar, realiza las comprobaciones pertinentes para conocer si el usuario esta pulsando alguno de los botones existentes en la pantalla como Reiniciar, Menú o Salir, y dependiendo de cuál se esté pulsando se realiza la operación esperada. Las primeras dos operaciones se hacen utilizando la pila del ManejadorDeEstados, eliminando el último estado y añadiendo el estado de juego o el estado de menú según convenga. Si no se está pulsando ninguno de estos tres botones, se comprueba que tipo de jugador participará en el turno actual, CPU o humano. Para el caso que sea humano, bastará con llamar a la función leerraton, que se encarga de las tareas activadas por movimiento de ratón por parte del humano. Sin embargo, si el jugador actual es la computadora, el proceso es diferente. Primero se comprueba si se ha configurado para que se ejecute paso a paso el juego o no. Si es así, debe esperarse a la validación de la variable PasoAPaso. Se crean dos objetos, un objeto de tipo Sucesores y otro objeto de tipo Minimax. Estos se encargarán de realizar el algoritmo que calcule la mejor posición según las condiciones establecidas en el menú. Al crear el objeto Minimax, se le pasa como parámetro la heurística a utilizar y el tablero donde realizar las modificaciones. Los sucesores obtienen listas de los movimientos candidatos posibles de la computadora. Inicialmente, la lista de sucesores que se crea es la de todos los posibles movimientos entre todas sus fichas que puede realizar el jugador actual. 65

66 Una vez creados estos dos elementos, se llama a la función desicionminimax perteneciente a la clase Minimax que utilizando como parámetro los sucesores y la configuración de heurística y profundidad, se encarga de obtener el movimiento acorde con las características más satisfactorio. Este proceso complejo será explicado más detalladamente dentro de cada una de dichas clases. Una vez obtenido el movimiento a realizar, se hacen los cambios necesarios en la pantalla para que sea visible gráficamente. En este caso como es lógico, no hay necesidad de desplazamientos utilizando el ratón ni nada por el estilo. El cambio de posición se hace automáticamente y da paso al turno siguiente. Función Draw. Esta función se encarga de redibujar continuamente todos los elementos de la pantalla. Además de los ya comentados, como el tablero, las fichas y los botones, también en esta pantalla se va dibujando y actualizando aspectos como los marcadores de cada jugador, el turno del jugador actual, la señalización de fin de partida por parte de un jugador mediante el símbolo de la medalla y la finalización total mediante unas letras grandes que así lo indican. Según el valor de las variables de las que dependen, se dibujarán unos elementos y otros en determinadas posiciones. Cabe destacar, que utilizando dos variables que almacenan el último movimiento de cada jugador, queda señalado en la pantalla mediante un repintado extra, la posición de la que partió, y en la que se posicionó finalmente la ficha del último movimiento de cada jugador. 66

67 8.5.-Desarrollando la inteligencia artificial En esta parte, se implementa la inteligencia que obtiene la máquina para realizar movimientos suficientemente coherentes. Para ello, es necesaria la utilización de un algoritmo que calcule la jugada correcta. En este caso, se utilizará el algoritmo Minimax, ya que es un algoritmo muy bueno utilizado en juego por turnos. En total, será necesario la utilizando del algoritmo correcto, un almacenador de movimientos posibles y alguna función auxiliar. En resumen las funciones que forman la parte de inteligencia artificial son: Sucesores. Sucesor. ProfundidadYPeso. Minimax La clase Sucesores Esta clase contiene el conjunto de movimientos posibles del turno actual para el jugador. Su atributo principal es una lista de sucesores, donde cada sucesor en un elemento de ese conjunto. Además se tiene información de valores como el nivel de profundidad al que nos encontramos, la heurística que se está utilizando, el número de jugador del turno y la jugada anterior de la que proviene si procede. A continuación se comenta cada una de las funciones relevantes de las que está compuesta esta clase: Función crearlista. Esta función se encarga de asignar el valor al atributo de la clase lista de sucesores, con cada uno de los sucesores posibles. Para poder hacerlo, se utiliza el número de jugador, y partiendo del tablero de juego, se comprueba por cada 67

68 ficha todas las posiciones válidas que puedan tomarse desde la posición inicial de cada pieza. Función posicionesvalidas y posicionesvalidas2. Al igual que en la clase EstadoJuegoDC, estas funciones se encargan de solo permitir movimientos válidos. La diferencia es que en este caso no tenemos que comprobar si la casilla seleccionada es válida o no, sino que se deben calcular todos los movimientos posibles válidos. Por tanto, en este caso no se puede partir de la posición final, ya que no se conoce desde un principio. Recorriendo cada una de las diez fichas pertenecientes al jugador actual, se analiza las posibilidades de colocación. Se utiliza un algoritmo recursivo que parte de la posición inicial de la ficha y comprueba las posibilidades a partir de las casillas cercanas avanzando hasta las más lejanas, comprobando si es preciso todo el tablero. Primero se analizan las casillas adyacentes, a la ficha, si están libres. Serán posiciones válidas para añadir a la lista. Seguidamente, las casillas adyacentes que estén ocupadas se estudian de otro modo. Se calcula se las casillas adyacentes a una distancia de dos casillas, si están libres, se puede acceder a ella mediante un salto. Por lo que también será un movimiento válido a añadir a la lista. De este modo se calcula así cada una de las casillas cercanas. Después, se procede de la misma manera con las casillas que se han obtenido que sea posible su acceso mediante un salto. Por lo que, según las reglas, se podrá avanzar de la misma manera hacia una casilla adyacente a 2 unidades de distancia si cumple las 68

69 mismas condiciones anteriores. Teniendo en cuenta todas esas casillas que ya han sido exploradas para que no vuelvan a examinarse, se obtendrá todos los movimientos válidos posibles de la ficha del jugador. De la misma manera, se recopilan los movimientos del resto de fichas, de forma que al final de la ejecución de la función crearlista, se han recopilado gracias a esta función, las casillas válidas que pueden tomar todas las fichas del jugador actual La clase Sucesor Esta clase forma cada uno de los elementos contenidos en la lista de la clase Sucesores. Los atributos más relevantes de esta clase son: Valor numérico fichamov. Esta variable contiene el número de la ficha del jugador a la que se le está aplicando el cambio de posición. Así se puede diferenciar de las demás fichas que no se modifican. Valor numérico PosAnterior. Como se está creando un conjunto de posibles movimientos, es necesario conocer la posición de la que parte la ficha. Así se controla que movimiento se pretende realizar. Valor numérico PosPosterior. Para controlar totalmente cual es el movimiento que se pretende almacenar como posible jugada, obviamente es necesario conocer la supuesta posición final que ocupará la ficha. Aquí se almacena ese valor. Valor numérico Peso. Este factor juega un papel muy importante en el cálculo de la jugada elegida artificialmente por la computadora. Resume en un valor, la bondad de una jugada realizada por el jugador. A mayor valor obtenido, mejor movimiento se estará realizando. Por tanto siempre se busca 69

70 maximizar este valor para el jugador al que posee el turno. Inicialmente, la clase Sucesores le da un valor de -1 por defecto. En la clase Minimax, se obtiene el valor correspondiente. Esto será explicado más adelante. Valor numérico Salto. Se mantiene un contador para el número de saltos realizados en una misma jugada. Este valor será finalmente comparado con el contador de saltos actual del objeto jugador. Si lo supera, éste reemplazará el valor anterior. Valor numérico Profundidad. Otro factor muy importante para la inteligencia de la computadora. Aquí se almacena el valor de la profundidad según la elegida en el menú de opciones. Este valor va decrementando a medida que se va avanzando en el algoritmo Minimax La clase ProfundidadYPeso Esta clase se ha creado para ser utilizada auxiliarmente por la clase Minimax. Como motivo de mejora, se decidió que era conveniente añadir a los métodos del famoso algoritmo el conocimiento de la profundidad a la que se determina los pesos. Este algoritmo inicialmente, no diferenciaba en qué momento se obtenía una solución válida, ya que solo se seleccionaba la mejor solución mediante el mayor peso obtenido. Los atributos por tanto que componen esta clase son: Valor numérico Profundidad. Valor numérico Peso. De esta forma, cuando dos pesos coinciden, no elegimos aleatoriamente cualquiera de los movimientos válidos, sino que es preferible escoger aquella opción que obtiene el mismo resultado alguna jugada antes. Así se evitan posibles bucles, ya que algunas veces si seleccionará la opción 70

71 más larga, al hacer el próximo cálculo, podría a realizar el mismo movimiento, y podría ocurrir que a un paso de la victoria, la ficha no alcance la meta porque la ha calculado que realizando dos movimientos puede obtener el mismo resultado. Este cambio, y alguno más realizado sobre el bucle, serán detallados en la explicación de la clase Minimax La clase Minimax Esta clase es la más importante de este apartado, ya que aquí se desarrolla el algoritmo que realiza los cálculos para que la computadora adquiera inteligencia. El algoritmo que se ha utilizado como el propio nombre de la clase es el Minimax. La versión utilizada es la que realiza poda Alfa-Beta, ya que de esta forma se minimiza el tiempo computacional empleado obteniendo la misma eficacia. Se le han aplicado varios cambios al algoritmo para poderlo acoplar a la aplicación. Han sido necesarios estos cambios, debido a que: El algoritmo original obtiene la solución de mayor valor de heurística para el jugador actual. Si existen varias soluciones del mismo peso, se queda con la última obtenida. El algoritmo está pensado para partidas en las que participan 2 jugadores. Los problemas que puede producir esto respectivamente son: Se trata de un juego en la que existe el retroceso. Es decir, se pueden repetir situaciones en diferentes momentos de la partida. Si todos los jugadores realizan un movimiento y luego 71

72 deciden volver a la posición de la que partieron en la siguiente jugada, esto puede crear un problema. El algoritmo Minimax está pensado para juegos en las que no se pueden repetir situaciones en diferentes etapas del juego. No hay vuelta atrás, juegos como el tres en raya, en el que las fichas se colocan y no se pueden volver a sacar ni cambiar de posición, son perfectos para este algoritmo original. En este tipo de juegos, no nos importa el momento en el que obtenemos el mejor resultado, ya que no será dado a cambios. Por tanto si tenemos asegurada la partida realizando un movimiento en la siguiente jugada o en la próxima, no nos importará cuál opción tomemos, ya que eso no cambiará porque el oponente no puede modificar los movimientos ya realizados por él mismo. En este caso la cosa cambia, ya que no es lo mismo realizar un movimiento antes o después, ya que no puedes asegurarte que en la próxima jugada se obtenga el mismo beneficio. Por tanto, esto es un aspecto a tener en cuenta. El tablero de juego puede tener hasta 6 participantes, por lo que no sirve un algoritmo solo pensado para que participen como máximo dos jugadores. A la hora de obtener la heurística que nos indicará que opción tomaremos, no bastará con tener en cuenta el peso de los jugadores y restarlo o algo por el estilo. Habrá que conocer el número de jugadores que participan, y según esto, usar una heurística de forma que sea acorde con este número de participantes. 72

73 Esto implicará otro cambio en la función normal del algoritmo, adaptándose así para el correcto funcionamiento de la aplicación. Una vez explicada la versión teórica de los cambios realizados en el algoritmo Minimax, a continuación se entra en detalles de implementación, se comentan las modificaciones realizadas sobre el algoritmo original con poda Alfa-Beta y los atributos y funciones que se han utilizado. Los atributos que dispone la clase Minimax son: Sucesor MAXNodo. Este será el valor final obtenido por las funciones de la clase. Tras el proceso que realiza el algoritmo, este valor irá cambiando hasta obtener el resultado más correcto dependiendo de la profundidad y heurística tomada. Se trata de un objeto Sucesor ya que en él se recogen los valores necesarios para realizar el cambio en el tablero de juego. Valor numérico número de jugador. Para realizar los cálculos que permitan obtener una jugada, es necesario conocer de que jugador se trata. Dependiendo del número de jugador, se obtendrá unos resultados u otros. Tablero de juego. Aquí se desarrollan todos los cambios en la mesa para las suposiciones del algoritmo. A medida que se va avanzando, se realiza en este tablero un cambio de posición de una ficha, y se recalcula su valor conforme a la conveniencia del jugador. Así se procede con todas las ramas de los movimientos posibles de cada ficha que no sean podados por el algoritmo. Una vez examinada una rama, se vuelve a retroceder a la posición de la que partió para comprobar el próximo movimiento. Valor numérico tipo de heurística. Este es el valor que determina que heurística se utilizará. Cada número, del 0 al 5, 73

74 selecciona una de las 6 heurísticas diferentes que se pueden utilizar. La clase Minimax es una de las que más tamaño ocupa debido a la importancia de los métodos que la componen. Dichos métodos más relevantes de la clase serán detallados a continuación: DecisionMinimax. Es el método del que parte el algoritmo Minimax para conseguir seleccionar el movimiento que se tomará. Por cada uno de los nodos que forma la lista de sucesores pasada como parámetro, se realiza el cambio temporal en el tablero que tiene como atributo la clase. Además, mediante la función estática, se obtiene el peso con ese movimiento incluido según la función heurística indicada. A continuación se llama a la función ValorMinimax, la siguiente parte perteneciente al algoritmo. Con esta función se obtiene el movimiento más correcto que debe ejecutar el programa. Una vez obtenido ese valor, se invierte el movimiento realizado por cada uno de los elementos de la lista sobre el tablero, para que se mantengan las posiciones iniciales antes de las suposiciones que realiza el algoritmo. En este punto llegamos a otro detalle de implementación importante. En el algoritmo Minimax original, el valor de mayor peso se conservaba como mejor opción. Si se encontraba un valor igual o mejor, este era sustituido. Es decir, solo se mantenía un valor de ese tipo. En este caso, además del detalle de tener en cuenta no solo el peso, sino también la menor profundidad para seleccionar la mejor opción, puede ocurrir el caso que aún así, existan dos o más 74

75 opciones de igual profundidad e igual peso en los cálculos realizados. Por tanto, podría pensarse que es irrelevante realizar un movimiento u otro, por lo que se podría seleccionar al azar una de estas posibilidades. Después de muchas pruebas ejecutando el programa y observando los resultados obtenidos permitiendo la aleatoriedad de selección entre opciones de igual peso y profundidad, se observa que al mover fichas más avanzadas en el tablero, las fichas más retrasadas se convierten en piezas aisladas, por lo que al intentar desplazarlas hacia la meta, se convertirán en un problema debido a no poder desplazarse combinando con saltos entre las fichas más cercanas del jugador. Por tanto se ha llegado a la conclusión de que es conveniente avanzar las piezas más retrasadas en el caso de que se trate de un movimiento que no resulta menos inteligente que cualquier otro posible. Todos los elementos de mismo peso y profundidad elegidos por el algoritmo como movimientos óptimos, son almacenados en una lista. Si esta lista contiene más de un elemento (como mínimo contendrá uno), significa que no solo hay una posibilidad. Por tanto, de esa lista se seleccionará el movimiento que utilice la ficha que se mantenga más alejada de las posiciones finales del jugador que le corresponde mover. Maximixador. Esta función es llamada cuando el turno que se está calculando es la del jugador que posee el turno. Básicamente, este método realiza la misma función que el método DecisionMinimax pero con pequeñas variaciones. Dado que se 75

76 está utilizando poda Alfa-Beta, los valores numéricos Alfa y Beta obtenidos por parámetros son bastante importantes. Con ellos se puede eliminar aquellos elementos de la lista que nunca van a ser mejores que los elementos ya analizados. De esta manera, cuando el valor de Alfa, supera al valor de Beta, se detiene el análisis de los próximos nodos, ya que no será posible la obtención de un resultado mejor. Este método, al ejecutarse cuando el jugador a analizar es el que mantiene el turno, nos interesa quedarnos con la opción más positiva para el mismo, es decir, el valor que haga que obtenga mayor peso. Aquí no es necesario el almacenamiento de ningún valor en lista, ya que no nos interesa el movimiento que se realiza, sino el mayor peso que se puede obtener. Minimizador. Se trata de un método muy similar a maximizador. La gran diferencia es que es un método ejecutado en el caso de que el jugador que se está analizando no sea el jugador que le toca mover. Se estudia cada uno de los movimientos que podría realizar el adversario y que efecto provocaría dicho movimiento. A mejor resultado obtenga el oponente, menor valor en el peso se obtendrá. Como se pretende crear un juego suficientemente inteligente, este algoritmo siempre supone que el adversario realizará el mejor movimiento que esté en su mano en ese momento. Por lo tanto, en este caso estamos buscando la jugada que provoque el peso de menor valor. Exceptuando este detalle importante, el resto de pasos que realiza este método es exactamente igual que el método maximizador. 76

77 ValorMinimax. Esta función devuelve un valor de tipo ProfundidadyPeso que contendrá el peso y la profundidad de la mejor opción. Si no se trata de un estado final o no se ha llegado a la profundidad mínima posible, el algoritmo debe seguir calculando jugadas adelantándose a los próximos movimientos de todos los jugadores. Esto se consigue de la siguiente forma: partiendo del tablero actual, se realiza otro cálculo de todas las posibilidades existentes de movimientos. Si anteriormente se ha calculado las jugadas posibles que podrá realizar el jugador 1, y a partir de una de esas posibilidades se ha llegado hasta aquí, ahora se construirá la lista de las jugadas posibles que podrá realizar el jugador 2 suponiendo que el jugador 1 hizo el movimiento escogido. De esta forma se está siguiendo el juego internamente y se puede obtener movimientos que aun no se han realizado. Una vez creada esa lista, si se trata del jugador que posee el turno, esta lista será utilizada por el método maximizador. En caso contrario la lista la utilizará el método minimizador. De esta forma se diferencia en qué momento deseamos obtener el mayor peso por ser una jugada propia, y en qué momento deseamos obtener el peor peso para suponer un gran movimiento del adversario. En la versión original del algoritmo, se va alternando cada vez el uso de las funciones maximizar y minimizar, ya que solo participan comúnmente 2 jugadores. En este caso, excepto para 2 jugadores, el algoritmo optará en mayor cantidad de ocasiones por usar la función minimizador, ya que es posible tener hasta 5 adversarios a la vez. 77

78 festatica. Este método en sí, es solamente un selector de heurística. Según el número pasado por parámetro, se optará por utilizar una heurística u otra con el fin de obtener el peso del sucesor que se esté analizando. Esta aplicación, en vez de basarse únicamente en una posible heurística para realizar los cálculos, se ha decidido poder optar entre diferentes heurísticas. Cada una de ellas tienen sus ventajas e inconvenientes, pero se han considerado lo suficientemente interesantes para ser añadidas al proyecto. En primer lugar, se puede hacer una separación en dos grupos según los jugadores que se han tenido en cuenta. Estos grupos son: Heurísticas que tienen en cuenta todos los pesos de todos los jugadores. Esta heurística tiene en cuenta que a la hora de realizar un movimiento positivo para el propio jugador, puede ser aún mejor para un adversario, y por tanto beneficiar al oponente, cosa que se intenta evitar a toda costa. Por tanto, se calculan las heurísticas del jugador del turno y la de los demás posibles jugadores, y se realiza una resta específica teniendo en cuenta el número de jugadores que participan. Así, el mejor movimiento que se obtenga será el que encuentre el promedio entre la mejor posibilidad para el jugador actual y a la vez, la que menos favorezca al resto de los adversarios. Heurísticas que solo tienen el cuenta el peso del jugador actual. En este caso, a la hora de obtener los 78

79 pesos, solo se tendrá en cuenta la opción que más convenga al jugador que mueve ficha. Esto puede ser un problema, ya que como se ha comentado antes, un movimiento favorable, puede resultar aun más favorable para un oponente. La ventaja de utilizar esta opción es la reducción de tiempos de computación. Mientras que para el caso anterior había que realiza un bucle por cada uno de los jugadores participantes, esta vez, con una sola iteración en ese bucle se resuelve la función estática. En cada uno de estos dos grupos, existen otras dos posibles formas e afrontar la resolución del peso del sucesor. Estas opciones también se han tomado teniendo en cuenta las mejores respuestas en tiempo y en eficacia. Estos son: Calculando las distancias, teniendo en cuenta todas las fichas no colocadas en posiciones finales y todas las casillas finales desocupadas. Esta podría ser la opción más correcta en el cálculo de distancias. Las fichas que ya alcanzaron su objetivo no deben ser tomadas en cuenta, pero todas aquellas que queden por colocar, no se conoce cual posición final tendrá en un futuro. Lo lógico por tanto, es calcular la media a todas las distancias posibles a las casillas libres que queden, una vez por cada ficha no posicionada en una casilla final. El problema de esta opción, es la cantidad de bucles que se realizarán para obtener ese resultado. Para valores de profundidad alto, puede generar retrasos. Calculando las distancias teniendo en cuenta la distancia a la casilla más lejana de las posiciones finales del jugador. De esta manera, se ahorra uno de los 79

80 bucles que calculan la media de todas las distancias a las casillas finales libres. Pero de esta forma, se sacrifica que se obtenga un peso más cercano a lo real. Esto es así ya que no es lo mismo que falte por colocar la ficha que ocupa el extremo más lejano de las posiciones finales, a que sea una de las cuatro casillas más cercanas posibles. Además, dentro de esta opción, se ha diferenciado en dos posibilidades más: Solo teniendo en cuenta las fichas que no han alcanzado una casilla final. Las fichas que se encuentran colocadas en una casilla final no variará el valor del peso obtenido. Esto puede ser una ventaja, ya que calcular la distancia total de las fichas, no deberían de tenerse en cuenta aquella que ya están colocadas. Por otro lado, puede producir un problema, ya que aquellas fichas que falten por colocar, no diferenciarán la lejanía de la casilla final libre que quede. Se obtendrá el mismo peso para cualquiera que sea las posiciones finales que queden libres, ya sea la del extremo o la más inmediata. Teniendo en cuenta todas las fichas, estén colocadas en posición final o no. Esto también puede tener sus ventajas e inconvenientes. En este caso no tenemos el problema que ocurría en el caso anterior, pero se obtienen valores añadidos al peso por fichas que ya están posicionados en su casilla final. 80

81 De esta forma, queda distribuida cada una de las seis heurísticas que se utilizan en esta aplicación. Todas ellas poseen sus inconvenientes y sus ventajas. En el apartado de pruebas se podrá observar gráficamente cada uno de ellos. 81

82 82

83 9.-Instalación previa a la aplicación Antes de poder iniciar la aplicación, es necesaria la instalación de una serie de programas que permitan la ejecución de la misma. Depende del lenguaje que se utilice, la plataforma en la que se haga funcionar, el tipo de programa que sea, serán necesarios una serie de pasos previos diferentes de instalación que hay que tener en cuenta. Para este caso, se requiere un sistema operativo tipo Windows, siendo válido cualquiera de los medianamente actuales y utilizados hoy en día: Windows 2000/NT. Windows XP. Windows Vista. Teniendo uno de estos sistemas operativos instalados, es aconsejable tenerlo actualizado lo máximo posible. Además, es necesario, poseer una tarjeta gráfica común, pero que permita aceleración 3D, lo cual la mayoría de las tarjetas actuales lo posee. Una vez realizado estos pasos, que ya se supone que casi todo usuario lo tiene hecho previamente (a excepción de usuarios de otros sistemas operativos), se debe instalar los programas necesarios para poner en funcionamiento las aplicaciones desarrolladas con XNA: 83

84 .NET Framework. Visual Studio 2005 con Service Pack. Microsoft XNA Game Studio 2.0. En primer lugar se debe instalar.net Framework 2.0. Además es recomendable, la instalación de la versión más avanzada.net Framework 3.5. Se podrán descargar e instalar cómodamente desde la web de Microsoft que permite su descarga gratuita. A continuación será necesaria la instalación del compilador Visual Studio Se utiliza esta versión ya que es la más compatible con la versión de XNA que utilizamos. Se puede descargar fácilmente de la zona privada de descarga para los alumnos de la escuela de informática. Una vez hemos completado la instalación de los 2 CD de este programa, se procede a descargarse el Service Pack 1 del mismo. De esta forma tendremos actualizado el programa. En este momento ya podemos programar y formar aplicaciones, pero aun no utilizamos la funcionalidad de XNA, para ello es necesaria la instalación de un Plug-in específico para ello. 84

85 Ahora procedemos a descargar desde la web de Microsoft el ejecutable de XNA Game Studio 2.0. Al instalarla quedará ligada automáticamente a nuestro programa Visual Studio 2005 SP1. En este punto ya podremos utilizar y crear las aplicaciones desarrolladas mediante XNA. Es aconsejable la instalación de Project Upgrade Wizard for XNA Game Studio 2.0. Esto nos da la posibilidad que convertir proyecto creados con XNA 1.0, que son incompatibles con Visual Studio 2005 utilizando XNA 2.0, a proyectos compatibles. 85

86 Además, también es aconsejable la instalación de DirectX 9c SDK o posterior, ya que permite una mejora del rendimiento de la tarjeta gráfica que estemos utilizando para desarrollar juegos. Llegados a este punto, ya dispondríamos de todo lo necesario para poder ejecutar y desarrollar nuestros propios juegos. 86

87 10.-Manual de usuario Una vez instalado todos los componentes necesarios para la utilización de la aplicación, se detallará paso a paso el manejo del programa con todas sus características y opciones. Para ejecutar el programa, nos dirigimos a la carpeta donde está contenido el ejecutable junto con sus archivos gráficos. La ubicación de dicho ejecutable no es relevante, ya que no es necesario colocarlo en ningún directorio raíz predeterminado. Lo que si es necesario es que dicho ejecutable esté siempre acompañado de las texturas precompiladas utilizadas en la aplicación. Abrimos el archivo ejecutable, y al hacerlo, se iniciará la aplicación. La aplicación está dividida en 3 pantallas diferentes: Pantalla de bienvenida Pantalla de menú Pantalla de juego 87

88 10.1.-Pantalla de bienvenida La primera pantalla a la que se accede será la de bienvenida. En ella, se podrá visualizar una imagen que presentará el programa realizado. Al cabo de 5 segundos, esta pantalla desaparecerá automáticamente para dejar paso a la pantalla de menú. En ésta, se podrán seleccionar las diferentes posibilidades que ofrece la aplicación interactuando únicamente con el ratón y de manera intuitiva y sencilla. 88

89 10.2.-Pantalla de menú Como se puede observar, el menú está compuesto por varias zonas: Título. Representa en nombre del proyecto. Zona de selección de jugadores. En ella se dispone de 5 botones, donde cada uno de ellos representa el número de jugadores posibles en las partidas. Cada uno de esos botones, viene acompañado del texto que define la cantidad de jugadores que participarán dependiendo de la opción que elija. Solo hay 5 botones ya que en este juego de mesa, no tiene sentido jugar una partida 1 único jugador, y a su vez, no está diseñado para que participen más de 6 jugadores, debido a su forma de estrella de 6 puntas. 89

90 Por defecto está configurado para que participen el mínimo de jugadores. De esta forma, si el usuario olvida señalar ese valor, la partida se iniciará con el valor por defecto. La manera de modificar el número de participantes es bien sencilla. Simplemente deberá pinchar con el ratón en el botón deseado, y éste, cambiará indicando que está marcado. Zona de selección de jugadores artificiales. En este apartado se seleccionan dentro del número de participantes que se han seleccionado para jugar la partida, cuáles de ellos jugarán de manera artificial. Inicialmente, si no se modifica esta opción, no participarán jugadores manejados por la CPU. Al pinchar sobre cualquiera de las casillas que determinan cada jugador, esta se marcará como válida, y significará que el jugador marcado será movido por la maquina. Como se puede observar, como los valores por defecto del número de jugadores participantes son el mínimo permitido, el programa únicamente nos muestra y nos permite marcar al jugador 1 y al jugador 2, como es lógico. En un caso diferente, de que el número de jugadores fuese cualquier otro, automáticamente la aplicación se encarga de mostrar la cantidad de jugadores participantes para poderlos marcar como humanos o computadoras. 90

91 Si se vuelve a marcar un número de jugadores inferior al número de jugadores actualmente marcados, los valores marcados como jugadores no humanos siguen quedando marcados, pero solo para los jugadores que participen en la nueva selección. Y si ahora volvemos de nuevo a la posición anterior, los valores que ya estaban marcados de los jugadores que en este momento no participan, ahora han quedado deseleccionados. 91

92 Zona de elección de nivel de profundidad. El algoritmo que hemos usado para el desarrollo de la inteligencia de la computadora para este juego es el conocido Minimax. Esta implementación tiene alguna diferencia respecto a este conocido método para juegos, cosa que se explicó en el apartado correspondiente. Pero lo que caracteriza a este algoritmo es el uso de diferentes niveles de profundidad de búsqueda, y la heurística a utilizar. Dando posibilidad al máximo control posible para conocer el funcionamiento y los resultados obtenidos, y ya que se trata de un proyecto de estudio de la inteligencia artificial que puede desarrollar la máquina, se deja la posibilidad de poder seleccionar el número de jugadas que será capaz de procesar la computadora antes de elegir el movimiento más correcto. En versiones de juegos para productos finales, y no como motivo de estudio, esta opción es poco común, ya que, un usuario que busca entretenerse no necesita hacer pruebas ni conocer como calcula o piensa el adversario virtual. Se ha decidido poder seleccionar entre 8 posibles niveles para mayor libertad, aunque los niveles podrán ser utilizados como motivo de estudio de manera que sea compensada con el tiempo 92

93 empleado no deberán superar al nivel 5. Aun así, se deja libre la opción de elegir el nivel que se desee, aunque ello pueda producir tiempos extremadamente extensos. Al igual que en anteriores casos, la opción que se deja por defecto si no se marca ninguna otra es la de valor mínimo, es decir, que calcule su mejor movimiento únicamente anteponiéndose una jugada. Para modificarla, bastará con una simple pulsación del botón izquierdo del ratón en el nivel deseado. Zona de selección del tipo de heurística. Como se ha comentado en el apartado anterior, este proyecto se basa en el uso de la función de búsqueda Minimax. Esta función requiere de un valor que pueda ser calculado en cualquier punto de la partida que nos diferencie cuando un movimiento es mejor que otro. Es la base del Minimax. El algoritmo Minimax necesita una solo heurística, que sea capaz de ponernos en números la inteligencia que supone un movimiento. Como se ha dicho anteriormente, al ser motivo de estudio este proyecto, se ha decidido no solo optar por una opción posible de heurística, sino dejar a libre elección la heurística que se pueda tomar a la hora de calcular sus movimientos los adversarios manejados por la computadora. Cada una de estas heurísticas, calculan de una forma la bondad de los movimientos posibles. Todos ellos tienen sus ventajas e 93

94 inconvenientes. Por ello, he decidido no eliminar ninguno de ellos. Como se puede ver, se trata de 6 posibles opciones de heurística. Se pueden clasificar según los jugadores que contemple en su cálculo de valores: Teniendo en cuenta todos los pesos. Se refiere a que calcula los pesos contando que un movimiento efectuado por el propio jugador, puede beneficiar a un oponente en un momento determinado. Teniendo en cuenta solo el peso del jugador actual. En este caso se selecciona la jugada que más convenga al jugador del turno, sin tener en cuenta si beneficia o perjudica a los demás jugadores que participan. Otra clasificación utilizada, es teniendo en cuenta el punto que determina la distancia a las posiciones finales de las fichas: Calculando todas las distancias de las fichas que quedan por colocar hasta las posiciones finales que quedan libres. Se realizan más cálculos pero la aproximación es mejor. Calculando únicamente la distancia a la casilla final más lejana. Es la versión contraria a la anterior. Se trata de una aproximación peor pero acelera los cálculos necesarios 94

95 Dentro de este último, se puede diferencian además entre dos posibilidades más: Usando todas las fichas. Calcula la distancia de todas las fichas a la casilla final más lejana sin tener en cuenta si ya están ubicadas en una posición final o no. Usando solo las fichas que queden por colocar. Calcula la distancia de todas las fichas a la casilla final más lejana teniendo en cuenta solo las que no están es posiciones finales. Se procede de la misma manera que en los casos anteriores. La selección se realiza con un simple clic de ratón en la heurística que se desee utilizar. Por defecto vendrá marcada la heurística que tiene en cuenta todos los pesos y calcula todas las distancias de las fichas que quedan por colocar hasta las posiciones finales que quedan libres. Botón de Paso a paso. Cuando este botón está activo, nos permite controlar el momento en que se produzcan cada uno de los movimientos realizados por las computadoras que formarán la partida. La diferencia que se encontrara en el tablero de juego es que, a la hora de que la maquina tenga que realizar un movimiento, previamente, el usuario deberá accionar un botón que permita dicho movimiento. Esto es útil para poder estudiar detenidamente el porqué de un movimiento realizado por la computadora, ya que la velocidad de cálculo de una computadora según las condiciones, puede ser demasiado rápido para que un humano se dé cuenta. 95

96 O incluso si la configuración reúne movimientos seguidos de computadores sin un jugador no artificial que los separe, podría producir el colapso por la unión de cálculos continuados de forma que no podamos observar ni cómo se ha realizado la partida entre maquinas. Este botón permite evitar esos problemas en los casos que lo requieran. Con un simple clic podrá ser modificada, y por defecto esta opción está activada. Cuando el botón este activo, aparecerá en la pantalla de juego un botón adicional que realizará la función que se explica. Si se selecciona juego paso a paso, pero no participa ninguna computadora en el mismo, no será necesario ir paso a paso ya que no existirá movimiento artificial, por lo que, aun estando activado la opción, este botón en la pantalla de juego no aparecerá. Botón de Iniciar. Una vez realizada toda la configuración previa necesaria para esta aplicación, necesitamos que estos datos se tengan en cuenta y comience la partida. Para ello, basta con hacer una simple pulsación de ratón sobre el botón Iniciar. Al pasar el ratón sobre el botón circular colocado en la esquina inferior derecha de la pantalla, éste se iluminará. 96

97 Al pulsar sobre él, la pantalla de menú dará paso a la pantalla de juego Pantalla de juego Esta pantalla es donde se desarrollará el juego. Todas las opciones elegidas en la pantalla de menú serán utilizadas en esta pantalla para la marcha de la partida. Se puede diferenciar esta pantalla es 3 zonas: Zona de jugadores. Zona del tablero de juego. Botones de la pantalla de juego Zona de jugadores En esta zona se guarda y actualizan la información relevante de los jugadores de la partida actual. Esta información es: Turno del jugador actual. En la esquina superior izquierda de la pantalla se va actualizando por orden el turno del jugador actual 97

98 que debe realizar el próximo movimiento. Como se puede observar, se señala el color y número de éste, para evitar la mínima confusión. Al realizar un movimiento válido el jugador indicado, pasa el turno al jugador siguiente, y lo indicará así este marcador: Zona del jugador. En esta zona se informa de los valores de cada uno de los jugadores. Dependiendo si se trata de un jugador humano o CPU, se diferenciará de la siguiente forma: Jugador humano: Jugador CPU: Tanto para jugador humano o jugador artificial, se titula cada apartado con el color perteneciente al jugador, y dependiendo de si es CPU o humano se indicará, proseguido del número del jugador que le corresponde. Ese número a su vez, indica el orden de juego que se seguirá. 98

99 Dentro de cada apartado, para ambos tipos de jugadores, los 4 primeros puntos coinciden: Número de movimientos del jugador. Por cada movimiento que realiza un jugador, su contador personal de movimiento se incrementará en 1. Salto máximo realizado. Cuando se encadenan posiciones de fichas favorables para el jugador, se puede avanzar por la pantalla de una manera muy rápida. Esto implica un número de saltos simultáneos en una misma jugada. Aquí se cuenta el mayor número de saltos realizado en una misma jugada por el jugador. Número de fichas colocadas en posiciones finales. Cada vez que una ficha es colocada en una de las diez posiciones finales que deben colocarse las fichas para poder optar a la victoria este contador se incrementa. Se cuenta el número de fichas que se han colocado para el objetivo del juego. Si la ficha sale de una posición final para colocarse en otra que no lo es, el contador se decrementará como es lógico. Si este contador llega a 10, significará que el jugador ha conseguido finalizar la partida. Distancia restante estimada. Nos da información sobre la distancia en casillas que falta para colocar todas las propias fichas. Es un valor que nos permite conocer en medio de una partida una estimación de qué jugadores 99

100 están más cercanos de la victoria y cuáles no. Aún así, que se obtenga un valor alto en distancia, no quiere decir que dicho jugador no pueda ser el vencedor, ya que depende de otros factores. Finalización de partida de un jugador. Cuando un jugador finaliza la partida colocando todas sus fichas en las posiciones finales, pero ésta aún no ha acabado porque queda más de un jugador en la mesa que no ha logrado alcanzar el objetivo, se señala con el icono de una medalla en la zona del jugador, numerada con la posición que ha conseguido el objetivo, para poder indicar la victoria del mismo. Cuando participa un jugador de tipo máquina, se considera interesante añadir una información adicional: Número de segundos por movimientos. Para el caso de jugadores artificiales, resulta una opción de mucha utilidad para el estudio, conocer el tiempo que tarda en realizar un movimiento en un momento determinado. Con ello podremos estudiar qué casos resultan más lentos o más rápidos para la velocidad de cálculo de la computadora y como depende de las heurísticas y niveles de profundidad que utilicemos. Además, se ha añadido una funcionalidad que en el momento que un jugador no humano finaliza la partida 100

101 con la victoria, e incluso, si la partida finaliza por otros motivos, calcula el tiempo total empleado durante toda la partida en cálculos por cada jugador CPU y lo señala correspondientemente en cada uno de ellos Zona del tablero de juego En primer lugar la posición inicial de los jugadores según el número de ellos será: 2 jugadores. El jugador 1 será de color verde agua, y el jugador 2 color fucsia. 101

102 3 jugadores. El jugador 1 será color verde agua, el jugador 2 color rojo y el jugador 3 será color verde. 4 jugadores. El jugador 1 tendrá color verde agua. El jugador 2 color azul. El jugador 3 poseerá el color fucsia y el jugador 4 color verde. 102

103 5 jugadores. El jugador 1 tendrá color verde agua, el jugador 2 azul. El jugador 3 usará el color rojo. Jugador 4 con color fucsia y jugador 5 color verde. 6 jugadores. Aquí participan todos los jugadores. Por orden en sentido contrario de las agujas del reloj los colores de los jugadores serán: Verde agua para jugador 1, azul para jugador 2, 103

104 rojo para jugador 3. El jugador 4 jugará con color fucsia, el jugador 5 con color verde, y finalmente el jugador 6 con color amarillo. Una vez conocida la posición inicial de cada jugador, el juego se desarrollará de la siguiente manera: El jugador o CPU número uno será el que abra el juego. Para ello, se utilizará el ratón. Debe arrastrarse el ratón hacia cualquiera de las fichas del jugador actual. Una vez ahí, se selecciona la ficha pinchando sobre ella. Manteniendo el ratón pulsado en ella, podrá observarse que al desplazar el ratón, la ficha seleccionada se desplazará siguiendo los movimientos que realice el usuario con el ratón. Para colocar una ficha en el lugar deseado, simplemente se debe mantener el ratón pulsado y soltarlo en una posición suficientemente cercana a la casilla deseada. 104

105 Si la posición deseada para la ficha seleccionada es válida según las reglas del juego establecidas, la ficha cambiará de lugar y se colocará en la casilla que ha elegido. Si no lo es, la ficha volverá a su lugar original y el turno continuará siendo del jugador actual. Una vez hecho un cambio de posición válido de una ficha, el turno corresponderá al siguiente jugador y solo podrá realizar movimientos de fichas dicho jugador. El marcador de turno también cambiará para señalar color y número de jugador que posee el turno. Cuando el último jugador participante realice su movimiento, el turno volverá al primer jugador. Este proceso se irá repitiendo sucesivamente hasta que alguno de los participantes consiga el objetivo final: llevar todas sus fichas a la esquina contraria de su posición inicial. Cuando un jugador consigue esto, será señalado como se explicó anteriormente, con una medallita simbolizando su victoria en su zona de jugador. Este jugador ya no podrá realizar 105

106 ningún movimiento puesto que ha ganado. La partida continuará para el resto de jugadores existentes. Continuará el juego de la misma manera hasta que solo quede un participante que no haya conseguido el objetivo. En este momento, la partida finalizará y será señalado por unas grandes letras que saldrán por pantalla. Una vez finalizada la partida, ningún jugador podrá realizar ningún movimiento posible. Cuando se juega contra jugadores CPU, el movimiento de la máquina será automático. Es decir, cuando llegue el turno de la computadora, no será necesario pinchar en sus fichas ni nada por el estilo. Ella se encargará de realizar su propio movimiento siguiendo las reglas y como es debido. Este movimiento vendrá determinado de la heurística y nivel de profundidad elegido en la pantalla de menú. El juego se verá ralentizado 106

107 pero a la vez se obtendrán mejores movimientos, a mayor nivel de profundidad se haya seleccionado. En el caso de que se haya seleccionado un juego paso a paso, el movimiento de la computadora vendrá determinado por la pulsación del botón de siguiente paso. Cada vez que sea el turno de la computadora, ésta esperará que este botón sea pulsado para poder realizar su movimiento. Mientras este botón no sea pulsado, la computadora no podrá realizar su movimiento y por tanto el juego no proseguirá. Esto es útil para analizar movimientos realizados por la computadora y poder tener el juego en cualquier momento para estudiarlo sin necesidad que participen jugadores humanos. Para hacer más cómoda aun la visibilidad de los movimientos realizados por los jugadores y realizar estudios más cómodamente, se ha añadido una especie de seguimiento gráfico en el tablero de juego. Consiste en poder tener en cuenta el último movimiento realizado por un jugador en un turno determinado. Siendo esto aún más útil cuando el movimiento ha sido realizado artificialmente. A veces, un salto realizado por la computadora, es difícil de ver claramente ya que disponemos únicamente de la posición final de la ficha. Aunque se sepa que los movimientos realizados por la computadora son del todo correctos, se requiere a veces asegurarse y estudiar porque ha realizado ese movimiento. Por ello, se ha añadido al juego una especie de estela que se queda grabado para el último movimiento de cada jugador. La posición anterior de la última casilla del jugador de la ficha que movió, queda marcada con una especie de sombra que se eliminará nada mas el mismo jugador realice otro movimiento. 107

108 Además, la ficha que ocupó ese lugar y fue movida hacia otro, quedará levemente iluminada para así saber desde donde partió y hasta donde llegó el movimiento del jugador en cuestión. La opción paso a paso, junto con esta funcionalidad hace más fácil el seguimiento del juego detalladamente Botones de la pantalla de juego Los botones que forman parte del la pantalla de juego son cuatro. Al pasar el ratón por encima de cualquiera de estos botones, éstos se iluminarán. Si pinchamos en ellos, se activará la función que se explica a continuación: Botón de Paso siguiente. Este botón solo aparecerá cuando la opción correspondiente en el menú haya sido seleccionada y además participe alguna máquina en la partida. Cada vez que sea el turno de una de las computadoras, para que ésta realice su movimiento deberá pulsarse este botón. Para el caso de jugadores humanos no es necesaria la pulsación de ningún botón. 108

109 Botón de Reiniciar. Si el usuario tiene la necesidad de comenzar de nuevo una partida, ya sea porque la partida ha finalizado o porque no desea continuar la actual, pero con las mismas condiciones iniciales que ya marcó en el menú, pulsando este botón la partida comenzará de cero con dichas condiciones. Hay que tener cuidado de no pulsar este botón si se desea continuar la partida ya que todos los movimientos realizados se perderán y la información del marcador del jugador se reiniciará a su valor inicial. Botón de Menú. Si por el contrario, el juego ha finalizado, o no se desea continuar la partida actual, y la próxima partida que se jugará se requiere que tenga una configuración diferente a la actual, presionando este botón, accederemos de nuevo al menú principal. 109

110 Botón de Salir. Pulsando en este botón, finalizaremos la partida, y además la aplicación. La partida actual se perderá, por lo tanto se debe tener cuidado con la utilización, tanto de éste, como de los anteriores botones. Por último, además del botón de Salir, es posible abandonar la aplicación pulsando la tecla ESC en cualquiera de las tres pantallas que posee la aplicación. Para volver a ejecutar el programa, se procede, tal y como se explica al comienzo de este apartado. 110

111 11.-Pruebas En este apartado se pondrán a prueba todas las clases y métodos desarrollados para esta aplicación. Gracias a las grandes posibilidades que ofrece el menú de esta aplicación, se comparará la eficacia y capacidad de cálculo teniendo en cuenta: Número de jugadores que participan. Elección de heurística. Elección de nivel de profundidad. Las pruebas realizadas para jugadores humanos han sido todas satisfactorias. En ese sentido, no hace falta un gran número de comprobaciones. Basta con que se cumplan las normas de juego y se respeten los turnos y posiciones. Después de muchas pruebas realizadas por mí, y por compañeros y amigos que han testeado la aplicación, no se ha encontrado ningún problema de ejecución y se cumplen todas las normas satisfactoriamente. Lo que se intenta comparar en este apartado, son las diferencias de todas las posibilidades que se ofrece en esta aplicación respecto a la inteligencia de la computadora. Debido a versatilidad de elección que existe, no está muy claro cuál de todas las posibilidades es mejor en general respecto a otra. Es más, cada una de las posibilidades que se ofrecen, dan un tipo de ventaja respecto a las demás, y también presenta sus inconvenientes. Aquí se detallará esas ventajas e inconvenientes de cada uno de las posibles configuraciones. En este estudio se usará siempre el modo paso a paso que ofrece el programa, ya que en casos de que solo participen computadoras en los cálculos, al ser algo continuo que no requiera intervención humana, los cálculos se pisan unos a otros y en ocasiones pueden obtenerse tiempos 111

112 erróneos. Esto se debe a que el programa está diseñado para ser utilizado por jugadores humanos, ya que el juego en el que no participen humanos no tiene mucho sentido para comprobar su inteligencia. Para las primeras comprobaciones, se fijará el nivel de profundidad a 1. Este es un caso muy simple y los tiempos de computación serán mínimos, pero según la heurística que se use, causará unas situaciones u otras. Seguidamente, se irá aumentando el nivel de profundidad hasta que lleguemos a niveles computacionalmente inviables. Probablemente, dependiendo del número de jugadores y de la heurística utilizada nos permitirá utilizar un nivel de profundidad diferente que no produzca un cálculo algorítmico extremadamente pesado Pruebas a nivel de profundidad 1 Se empezará comparando todas las heurísticas contemplando los pesos de todos los jugadores para calcular su heurística: Para la heurística que contempla las distancias totales obtenemos el siguiente resultado: 112

113 Como se observa, los tiempos computacionales son muy pequeños ya que cada jugador tarda en realizar todos los movimientos sobre los 0,04 segundos. Es lógico para nivel de profundidad 1, ya que solo se tiene que calcular la jugada inmediata del jugador. Para un número mayor de jugadores, como es lógico el tiempo es mayor, pero en este caso a penas se nota: 113

114 Para el máximo número de jugadores, el tiempo empleado está cercano a los 0,15 segundos por cada jugador. Como se puede observar, para nivel 1, no nos plantea un problema la velocidad de cálculo ya que es casi instantáneo. Se puede decir que esta es la heurística más completa de todas las que se pueden seleccionar en esta aplicación. Para todas las combinaciones de jugadores manejados por CPU con esta heurística, se obtiene una solución final por parte de todos los jugadores de una manera razonablemente inteligente. A continuación se comprueba la heurística que tiene en cuenta solo la distancia a casillas más lejanas contando con todas las fichas: 114

115 En este caso se puede comprobar que se realizan más movimientos para completar la partida, lo que puede ser síntoma de peor heurística para el cálculo del movimiento óptimo. Pero a su vez, los tiempos computacionales obtenidos son menores que para el caso anterior. Para más jugadores parece que ocurre lo mismo: 115

116 Pero si comprobamos las diferentes posibilidades ocurren problemas como el siguiente: Esta partida nunca finalizará. Esto pasa debido al nivel de profundidad y heurística utilizada. 116

117 Aunque esta heurística reduzca los tiempos considerablemente, para nivel 1 no se obtienen buenos resultados. Esto ocurre porque esta heurística no tiene en cuenta las casillas que quedan libres, sino solo la más lejana, esté ocupada o no. Por tanto, si la casilla final por ocupar no está colocada de forma que la ficha por posicionar pueda avanzar en dirección a la casilla más lejana, ocurrirá este problema. Para la heurística que tiene en cuenta solo la distancia a casillas más lejanas contando con solo las fichas no colocadas es posiciones finales: Aquí los problemas comentados anteriormente surgen en muchas más ocasiones. Como no se tienen en cuenta las fichas colocadas en casillas finales, al entrar éstas en dicha zona, no avanzan hasta posiciones finales. Es el problema que se puede observar en la imagen. La partida nunca finalizará. La ventaja es que lo tiempos son aún menores. Y para más número de jugadores: 117

118 Se puede observar el mismo problema. También, como se observa en la imagen, los tiempos computacionales son prácticamente cero. A continuación se hará el mismo estudio utilizando para calcular la heurística los pesos que obtiene el jugador que le toca mover. Al estar estudiando a nivel de profundidad 1, nunca se calcula los pesos de ningún jugador excepto del que posee el turno. Por tanto en este caso, se obtendrán los mismos movimientos que teniendo en cuenta todos los pesos. Aquí se ve reflejado: Usando las distancias totales: 118

119 Usando solo la distancia a casillas más lejanas contando con todas las fichas: Usando solo la distancia a casillas más lejanas contando con solo las fichas no colocadas es posiciones finales: 119

120 Los resultados obtenidos son exactamente los mismos como ya se predecía antes. La gran diferencia son los tiempos obtenidos. La mejor opción es la que tiene en cuenta solo los pesos del jugador actual, ya que no hay diferencia respecto a la que tiene en cuenta todos los pesos y se obtienen mejores tiempos. Además, debido a que los tiempos computacionales son mínimos, para este nivel sería recomendable utilizar el cálculo de distancias totales Pruebas a nivel de profundidad 2 Analizando lo ocurrido para nivel uno, podemos sacar conclusiones para profundidad 2. Lo más lógico es que los tiempos se incrementen no demasiado, pero la inteligencia ofrecida por la computadora se vea mejorada. Para el primer caso, teniendo en cuenta todos los pesos y distancias totales obtenemos el siguiente resultado: 120

121 Como se puede apreciar, se observa un cambio importante. Resalta la gran diferencia de números de movimientos emitidos para obtener el objetivo. De 55 movimientos necesarios en nivel 1, en este nivel, se necesitan 72. En un primer momento esto puede pensarse que es motivo de menor habilidad por parte de la máquina para obtener la meta. Si se observará la partida detenidamente, los movimientos realizados por la máquina en ocasiones, no son los más beneficiosos para el propio jugador, pero de esa forma también evita beneficiar también al oponente. Aplicándolo a la teoría del algoritmo, al tener una profundidad 2, esto implica que también se calcule la jugada del oponente, y por tanto, se tengan en cuenta los movimientos que pueda realizar el contrario una vez se mueva una ficha propia. Por tanto lo que está ocurriendo es que en este caso, el adversario no se está beneficiando del movimiento del oponente como podía hacerlo para nivel

122 Pero si aumentamos el número de jugadores: No hay gran diferencia de movimientos respecto a nivel 1. Por qué ocurre esto? La explicación es sencilla: Al tener profundidad 2, calcula la jugada propia y la siguiente. Pero al participar un número de jugadores mayor que el nivel de profundidad, el resto de oponentes no serán contemplados para evitar que se beneficien del movimiento. Por tanto en este caso, el jugador 1 tiene en cuenta al jugador 2, pero al resto de jugadores no los cuentan para obtener el movimiento buscado. Lo mismo ocurre para el resto de jugadores, por tanto el peso obtenido intentando evitar beneficiar a los oponentes no es del todo correcto. Para los casos que contemplan todos los pesos pero solo se tiene en cuenta la distancia a la casilla final contando con todas las fichas: 122

123 Se obtiene el mismo resultado que para nivel 1. La partida nunca llega a finalizar. Al usar profundidad nivel 2, nunca se llegará a suponer 2 turnos de un mismo jugador, por este motivo, el algoritmo no es capaz de encontrar una solución, ya que en un solo movimiento no se puede mejorar la heurística en algunos casos. Ocurre el mismo problema que para nivel 1. Sucede igual para el caso de distancia a la casilla más lejana teniendo en cuenta las fichas descolocadas: 123

124 Ahora si analizamos las heurísticas que solo tienen en cuenta los pesos del jugador del turno: Para el caso de todas las distancias: El resultado obtenido es exactamente el mismo que para nivel uno. Esto es debido a que para este caso, al no tener en cuenta los pesos del jugador contrario, y no poderse llegar a calcular ninguna 124

125 segunda jugada del propio jugador con esta profundidad, el algoritmo se limita a repetir el peso que ya obtuvo en el primer paso del algoritmo. Para los casos que tiene en cuenta todas las fichas y la que solo tiene en cuenta las fichas no posicionadas correctamente en el caso de cálculo de distancias según la casilla más alejada respectivamente se obtiene, para el primero: Y para el otro caso: 125

126 No hay mejora alguna debido a lo comentado anteriormente. Por tanto, a este nivel de profundidad, no resulta ninguna mejora respecto al anterior utilizar la heurística que tiene solo en cuenta los pesos del jugador actual. Debido a que los tiempos siguen sin ser extremadamente extensos, se podría utilizar la heurística que tiene en cuenta todos los pesos y las distancias totales. Para dos jugadores, esta opción es la mejor posible, ya que evita beneficiar al contrincante. Para más jugadores dependerá de cada partida, ya que en un movimiento intentando no beneficiar al jugador inmediato, se beneficie aun más al resto de participantes. Utilizar la heurística que solo tiene en cuenta los pesos del jugador actual no es la mejor opción para ninguna combinación de jugadores, ya que solo se obtienen mayores tiempos y ninguna mejora. 126

127 11.3.-Pruebas a nivel de profundidad 3 En este nivel se verá gran diferencia de inteligencia entre partidas de 2 jugadores y partidas de más jugadores. Además, al ser un cálculo exponencial, los tiempos se irán incrementando cada vez más. Empecemos analizando el caso que tiene en cuenta todos los pesos y distancias totales: Los movimientos vuelven a reducirse y el tiempo empleado es muchísimo mayor, sobre los 22 segundos por jugador. Si analizamos esto, se puede pensar que la máquina ahora es menos inteligente basándonos en lo expuesto para profundidad 2. Pero si se analiza la partida detenidamente, se observa que para cada uno de los movimientos, en ocasiones los jugadores se preparan las fichas realizando un movimiento previo peor al que podría hacerse para acercar de una manera inmediata a las posiciones finales. 127

128 Esto ocurre porque para dos jugadores, la computadora es capaz de adelantarse dos movimientos propios. Por tanto hace el movimiento que más le conviene para su próximo turno. Se realizan menos movimientos debido a esto, y a la vez se realizan más movimientos por tener en cuenta la jugada del contrincante. Pero la mejora obtenida es muy considerable si se practica jugando una partida contra la computadora. Para más jugadores, los resultados serán parecidos a los ya obtenidos en el anterior nivel de profundidad: Ocurre lo mismo comentado anteriormente, tiene en cuenta las jugadas de los 2 próximos contrincantes pero del resto no, esto puede ser una ventaja o un inconveniente según la partida. También se puede ver en la imagen que ya los tiempos obtenidos llegan a ser de minutos. La parte interesante se obtiene ahora comprobando los casos que antes fallaban para el caso que tiene en cuenta todos los pesos 128

129 con las distancias de todas las fichas hacia la casilla más lejana: La mejora en tiempo de ejecución empieza a ser razonable. Pero si probamos con más jugadores: El problema no se ha solucionado del todo. 129

130 Sin embargo para el caso que tiene en cuenta solo las fichas no colocadas: Juega la partida perfectamente para 2 jugadores, cosa que no ocurría en anteriores niveles. Pero el problema sigue persistiendo si hay más jugadores: 130

131 Si comprobamos ahora las heurísticas que no tienen en cuenta los pesos de los contrincantes: Para todas las distancias: Se mejora los movimientos de los jugadores individualmente, además los tiempos son más bajos que para cualquiera de las heurísticas que utilizando todos los pesos. Para más jugadores no compensa de la misma manera: 131

132 Los tiempos obtenidos son muy parecidos a los obtenidos para todos los pesos, por lo que no compensa mucho para un número alto de jugadores. Si comprobamos los 2 casos restantes, para la distancia a la casilla más lejana se obtiene: 132

133 La anterior imagen se trata del caso que tiene en cuenta todas las fichas. Ocurre lo que ya se comentó anteriormente, pero obteniendo tiempos más bajos. Ahora se comprueba la que solo tiene en cuenta las fichas no colocadas: No hay diferencia, pero si observamos una partida que si finaliza: Se observa una mejora en los tiempos obtenidos. 133

134 Para nivel 3 se pueden tomar varias determinaciones a la hora de la elección de heurística. Cuando se está jugando con 2 jugadores, la inteligencia de la computadora aumente notablemente, y por tanto es bastante más complicado ganarle ya que puede calcular 2 jugadas propias. Además, a mayor número de jugadores la diferencia de tiempos entre las heurísticas que contemplan todos los pesos y las que no, no son tan fáciles de diferenciar. Es lógico que se sigan obteniendo mejores resultados en tiempo con la segunda opción pero no compensa tanto como para menor número de jugadores. Si se juega con 2 jugadores, la heurística de todos los pesos obtiene 21 segundos para cada jugador, mientras que la otra heurística solo tarda 8. Aún así, sigue siendo más aconsejable la utilización de la primera heurística. Para más jugadores en este caso la diferencia no es muy grande entre un tipo de heurística y otra. Pero si se nota entre las diferentes formas de calcular la distancia. Para todas las distancia se obtiene tiempos rondando los 2 o 3 minutos, pero para las heurística de la distancia a la casilla más lejana se obtienen tiempos rondando los segundos. Por tanto, en ese caso, si se busca velocidad de cálculo se podría utilizar la heurística que tiene en cuenta todos los pesos, y la distancia a las casillas más lejanas, evitando los casos en los que la computadora no obtiene victoria. Aún así, los tiempos para la heurística que obtiene todas las distancias siguen siendo muy buenos, así que no es desestimable utilizar esa opción como la mejor. 134

135 11.4.-Pruebas a nivel de profundidad 4 A este nivel se empezarán a encontrar dificultades debido a la gran cantidad de cálculos que supone. Para el caso que tiene en cuenta todos los pesos se puede observar lo siguiente: Utilizando las distancias totales: Los movimientos que realiza son realmente buenos, se antepone 2 movimientos propios y 2 del contrario, lo que hace que calcule con detalle la mejor opción. El problema es, que por cada jugador ha tardado en realizar la partida más de 5 minutos, lo que empieza a notarse cada vez más el problema de costes de cálculo. Probando para 3 jugadores: 135

136 Los tiempos cada vez son más inviables. En este caso, se ha obtenido que cada jugador ocupa entre 10 y 15 minutos para realizar sus cálculos. Lo que implica una media de 15 segundos por cada una de las jugadas. Para esta heurística no se realizarán más ejemplos ya que los tiempos empiezan a ser muy elevados. Para este nivel, esta heurística tan exhaustiva no es tan recomendable como en otros casos. Probemos con el caso de las distancias a la casilla final con todas las piezas: 136

137 Los tiempos obtenidos son mucho mejores. A medida que se vaya subiendo en nivel de profundidad, será mayor la diferencia de tiempos entre unas heurísticas y otras. Para el caso de distancias a casilla final que solo tiene en cuenta fichas no finales, probando con 3 jugadores se obtiene: 137

138 Se siguen teniendo problemas de finalización de partida. Aunque los tiempos también son menores. Si analizamos ahora la opción que no tiene en cuenta los pesos de los contrincantes: Para todas las distancias, se observará una gran mejora: Esto es debido a que a mayor nivel, se nota más que solo se calcule el jugador actual a la hora de obtener sus pesos. Para los casos que quedan de distancias a la casilla más lejana, con todas las fichas y solo las que quedan por colocar respectivamente: 138

139 Y el otro caso: En ambos se obtienen tiempos también notablemente mejores. Lo que se aconseja para este nivel de profundidad es utilizar alguna de las heurísticas que solo tienen en cuenta los pesos del jugador actual, ya que los cálculos empiezan a ser cada vez más pesados. A medida que se 139

140 vaya aumentando de jugador, pasar de la heurística que tiene en cuenta todas las distancias a alguna de las que solo cuenta la distancia a la casilla final, preferiblemente si es posible y el tiempo computacional lo permite, la que tiene en cuenta todas las fichas Pruebas a nivel de profundidad 5 A partir de este nivel, solo se realizarán pruebas para 2 jugadores y se extenderán según los resultados anteriores para más jugadores, debido al gran cálculo que aumenta exponencialmente en cada nivel. Como se observó anteriormente, los tiempos que se obtienen para todos los pesos empiezan a ser ya muy difícil de calcular si se tiene en cuenta todas las distancias. Pero quizás aún, si solo se tienen en cuenta la distancia a la casilla más lejana se podría obtener algún resultado. Para el caso que tiene en cuenta la distancia a la casilla más lejana: 140

141 Es difícil completar la partida, pero se puede observar que con solo 7 u 8 movimientos en la partida, ya se ha conseguido sacar casi completamente todas las fichas y posicionarlas cercanas al centro. Esto demuestra la inteligencia que puede llegar a adquirir la computadora a medida que aumentamos el nivel, pero a su vez, la posibilidad de realizar partidas reales subiendo el nivel se va viendo cada vez menos posible. Este es el caso que tiene en cuenta todas las fichas. Para el otro caso la inteligencia para posiciones iniciales es muy parecida. Dado que para nivel 4 se aconsejaba utilizar la heurística que tiene en cuenta solo los pesos del jugador del turno, se comprobará si en este nivel es posible utilizarla para una partida de una duración medianamente normal. Para la heurística que tiene en cuenta todas las distancias se obtiene: 141

142 El resultado es un poco mejor en tiempo, pero tampoco es muy aconsejable realizar una partida en esta heurística. Por último se comprobará un caso que tiene en cuenta solo las distancias a la casilla final, por ejemplo utilizando todas las fichas: Tampoco es posible terminar la partida en tiempos deseados, pero los tiempos que se obtienen se reducen a la mitad comparado con el caso anterior. Para este nivel, completar la partida es un proceso lento. Si se dispone de tiempo suficiente, la mejor opción es la heurística utilizada en este último caso. Es sin duda la menos pesada Pruebas a nivel de profundidad 6 y superiores A partir de este nivel, es inviable utilizar el programa a modo de aplicación para desarrollar una partida en un tiempo más o menos aceptable. Podría utilizarse para realizar movimientos muy inteligentes o 142

143 realizar algún tipo de comprobación. A medida que aumentemos de nivel, este tiempo será incrementado muy considerablemente, tanto que podría llegar a durar semanas y meses en realizar un movimiento. En alguna versión futura, quizás se pueda utilizar estos niveles de manera que se pueda jugar una partida en tiempo real. Pero por el momento no es aconsejable el uso normal de estos niveles. 143

144 144

145 12.-Análisis temporal y costes de desarrollo En este apartado se hace una estimación de cómo ha sido de satisfactorio el tiempo y coste invertido en este proyecto y si ha ido acorde con el tiempo preestablecido por la universidad de Sevilla para este tipo de proyecto Costes de desarrollo Para que un proyecto sea satisfactorio, los costes de desarrollo deben estar dentro de unos límites establecidos según el tipo del mismo. En este caso, al tratarse de un desarrollo enteramente de programación, los únicos costes que se pueden tener en cuenta son: Utilización del Entorno de trabajo (PC Sobremesa/Portátil). Gasto de luz invertido. Coste de los programas utilizados para el desarrollo. El entorno de trabajo que se ha utilizado ha sido un PC de sobremesa para avanzar en todo lo referente a la ejecución proyecto (programación, diseño, memoria, etcétera) y portátil en el caso de las reuniones con el tutor. El portátil ya se disponía de él, por tanto no supone coste alguno. Simplemente el mínimo desgaste que se le pueda producir. En el caso del PC de sobremesa, inicialmente se disponía de uno que no permitía aceleración 3D, lo cual nos imposibilitaba el poder iniciar la aplicación para comprobar los posibles errores producidos en la ejecución. Por lo tanto fue necesaria la renovación a un nuevo PC. Pero como el antiguo PC ya se estaba planteando que fuese renovado, simplemente se adelantó dicho acontecimiento. Por tanto tampoco se 145

146 podría contar como coste alguno, ya el uso de este nuevo PC de sobremesa, no será ni mucho menos usado únicamente para la producción del proyecto. Otro de los costes posibles a incluir que se han comentado es el gasto de luz consumida. Quizás este punto puede ser el que más gasto haya podido producir, pero el gasto de luz utilizado para programar es mínimo, se podría llevar a cabo una estimación y obtener un coste aproximado, pero ese coste no tendría sentido ya que la luz gastada expresamente para el proyecto es bastante bajo. El software utilizado para desarrollar esta aplicación ha sido descargado mediante la web de Microsoft gratuitamente, o por el repositorio también gratuito que ofrece la universidad para los alumnos de informática. En él se encuentran programas como Visual Studio 2005, Microsoft Office, etc. Por tanto, se podrían hacer varias estimaciones de costes, sobre el gasto por la utilización de los PCs, o el gasto de luz consumido pero son gastos que son tan pobres que son despreciables, por lo que el coste producido es mínimo Análisis temporal Las horas estimadas para un proyecto de Ingeniería Informática son 540 horas, ya que se calcula unas 30 horas de trabajo realizado por cada crédito de dicho proyecto. Esta estimación, es un cálculo aproximado, ya que puede variar mucho las horas empleadas en un proyecto que en otro, aunque el trabajo realizado deba coincidir cercanamente con esa estimación. 146

147 Para este proyecto, se ha invertido un total de 592 horas, lo que implica 52 horas mas invertidas en dicho proyecto. Eso implica un 9,6% más, empleado para finalizar este desarrollo. Este porcentaje es muy razonable, ya que es muy común que se comentan errores en el cálculo estimado de tiempo necesitado. Y en este caso, se puede apreciar que no es demasiado elevado el error cometido y por tanto el tiempo de exceso empleado. Este tiempo utilizado, puede diferenciarse en varios grandes grupos para realizar una separación y poder estudiarlo. Estos grupos podrían ser: Estudio previo del entorno de desarrollo. Antes de comenzar a programar, es necesario conocer el entorno en el que se va a trabajar. Previamente se debe conocer que programas se van a utilizar, el lenguaje de programación, etc. En este caso, C#, al ser un lenguaje que no se ha impartido en la carrera, aunque sea muy parecido al Java, había un poco de desconocimiento hacia el mismo. Además el desarrollar en XNA, requiere un extra de estudio sobre su manejo. Se han empleado 70 horas para este estudio. Estudio previo del desarrollo del software. Este estudio se basa en conocer cómo poder implementar y que requisitos y problemas nos puede dar el desarrollo del proyecto para que, uniéndolo con el anterior estudio, podamos comenzar a desarrollar. Este estudio en este caso se basa en cómo conseguir que se cumplan las normas del juego, y como conseguir una eficiencia por la computadora. Se solapa mucho con el diseño y programación. Ya que mientras vas programando, van surgiendo problemas e ideas para solucionarlos. El tiempo empleado en este punto son 50 horas. 147

148 Diseño e implementación del software. Al ser un proyecto enteramente desarrollado por código para dar lugar a un programa ejecutable, ésta debe ser la parte que más tiempo nos consuma. Aquí se pondrá en práctica todos los conocimientos aprendidos en el estudio previo. Las horas invertidas en esta parte son 220 horas. Pruebas y corrección de errores. Este apartado no se trata simplemente de corregir los errores que han surgido después de la implementación del proyecto. Como se trata de un proyecto de investigación, mientras se va diseñando e implementando, surgen problemas de requisitos y nuevas ideas, lo que implica supuestos errores y correcciones para posibles mejoras. Por tanto este apartado se podría considerar también de implementación, pero de una manera un poco diferente. Además el tiempo empleado para las pruebas realizadas para el correcto funcionamiento final también han sido recogidas en este apartado. Tiempo empleado: 120 horas. Redacción de la memoria. A la hora de realizar un proyecto, es necesario la construcción de una memoria donde se notifican los pasos y las determinaciones que se han ido tomando, dando razones de las mismas. Sin una memoria el proyecto podría quedar indocumentado y por tanto incompleto. Se han empleado 80 horas. Entrevistas con el tutor. En las entrevistas se le plantea al tutor las dudas que han surgido y sirven para que pueda guiar y corregir los errores que se puedan estar cometiendo. Se emplean menos horas ya que las entrevistas suelen ser cortas, pero aun así, son de gran utilidad ya que sin ellas puede que el proyecto se 148

149 saliera del camino que debería de tomar. 12 horas utilizadas en entrevistas. Diseño y redacción de la presentación. Finalmente, será necesaria la creación de una presentación para exponer todas las ideas que se han ido desarrollando a lo largo del proyecto. Una especie de resumen que recoja lo más importante y que a la vez, quede bien detallado. 40 horas. En el siguiente gráfico se hace una diferenciación según las horas empleadas para cada uno de estos grupos. Se obtiene el porcentaje que emplea cada una de las tareas y se indica que partes del trabajo tiene más carga: Se puede observar que la parte de estudio previo, formada por estudio previo del entorno de desarrollo y estudio previo del desarrollo del software forma un 20% del proyecto. En los proyectos, aunque el estudio parezca una parte insignificante, es una parte fundamental del mismo. Si 149

App para realizar consultas al Sistema de Información Estadística de Castilla y León

App para realizar consultas al Sistema de Información Estadística de Castilla y León App para realizar consultas al Sistema de Información Estadística de Castilla y León Jesús M. Rodríguez Rodríguez rodrodje@jcyl.es Dirección General de Presupuestos y Estadística Consejería de Hacienda

Más detalles

Creado dentro de la línea de sistemas operativos producida por Microsoft Corporation.

Creado dentro de la línea de sistemas operativos producida por Microsoft Corporation. WINDOWS Windows, Es un Sistema Operativo. Creado dentro de la línea de sistemas operativos producida por Microsoft Corporation. Dentro de los tipos de Software es un tipo de software de Sistemas. Windows

Más detalles

POWER POINT. Iniciar PowerPoint

POWER POINT. Iniciar PowerPoint POWER POINT Power Point es la herramienta de Microsoft Office para crear presentaciones que permiten comunicar información e ideas de forma visual y atractiva. Iniciar PowerPoint Coloque el cursor y dé

Más detalles

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS. GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS. 1 Direcciones o Ubicaciones, Carpetas y Archivos Botones de navegación. El botón Atrás permite volver a carpetas que hemos examinado anteriormente. El botón Arriba

Más detalles

Guía de uso del Cloud Datacenter de acens

Guía de uso del Cloud Datacenter de acens guíasdeuso Guía de uso del Cloud Datacenter de Calle San Rafael, 14 28108 Alcobendas (Madrid) 902 90 10 20 www..com Introducción Un Data Center o centro de datos físico es un espacio utilizado para alojar

Más detalles

Plataforma e-ducativa Aragonesa. Manual de Administración. Bitácora

Plataforma e-ducativa Aragonesa. Manual de Administración. Bitácora Plataforma e-ducativa Aragonesa Manual de Administración Bitácora ÍNDICE Acceso a la administración de la Bitácora...3 Interfaz Gráfica...3 Publicaciones...4 Cómo Agregar una Publicación...4 Cómo Modificar

Más detalles

WINDOWS 2008 5: TERMINAL SERVER

WINDOWS 2008 5: TERMINAL SERVER WINDOWS 2008 5: TERMINAL SERVER 1.- INTRODUCCION: Terminal Server proporciona una interfaz de usuario gráfica de Windows a equipos remotos a través de conexiones en una red local o a través de Internet.

Más detalles

GENERACIÓN DE TRANSFERENCIAS

GENERACIÓN DE TRANSFERENCIAS GENERACIÓN DE TRANSFERENCIAS 1 INFORMACIÓN BÁSICA La aplicación de generación de ficheros de transferencias permite generar fácilmente órdenes para que la Caja efectúe transferencias, creando una base

Más detalles

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie.

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie. Adaptación al NPGC Introducción Nexus 620, ya recoge el Nuevo Plan General Contable, que entrará en vigor el 1 de Enero de 2008. Este documento mostrará que debemos hacer a partir de esa fecha, según nuestra

Más detalles

Guía de instalación de la carpeta Datos de IslaWin

Guía de instalación de la carpeta Datos de IslaWin Guía de instalación de la carpeta Datos de IslaWin Para IslaWin Gestión CS, Classic o Pyme a partir de la revisión 7.00 (Revisión: 10/11/2011) Contenido Introducción... 3 Acerca de este documento... 3

Más detalles

Uso de Visual C++ Pre-Practica No. 3

Uso de Visual C++ Pre-Practica No. 3 Pre-Practica No. 3 Uso de Visual C++ Microsoft Visual C++ 2010 es una versión de Visual Studio específica para el lenguaje de programación C++. Es un entorno de desarrollo muy completo y profesional. Por

Más detalles

GENERACIÓN DE ANTICIPOS DE CRÉDITO

GENERACIÓN DE ANTICIPOS DE CRÉDITO GENERACIÓN DE ANTICIPOS DE CRÉDITO 1 INFORMACIÓN BÁSICA La aplicación de generación de ficheros de anticipos de crédito permite generar fácilmente órdenes para que la Caja anticipe el cobro de créditos

Más detalles

Oficina Online. Manual del administrador

Oficina Online. Manual del administrador Oficina Online Manual del administrador 2/31 ÍNDICE El administrador 3 Consola de Administración 3 Administración 6 Usuarios 6 Ordenar listado de usuarios 6 Cambio de clave del Administrador Principal

Más detalles

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib Manual de uso de la plataforma para monitores CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib [Manual de uso de la plataforma para monitores] 1. Licencia Autor del documento: Centro de Apoyo Tecnológico

Más detalles

Seminario de Informática

Seminario de Informática Unidad II: Operaciones Básicas de Sistemas Operativos sobre base Windows 11. Herramientas del Sistema INTRODUCCION Este apunte está basado en Windows XP por ser el que estamos utilizando en el gabinete

Más detalles

Módulo I - Word. Iniciar Word... 2. Finalizar Word... 3. Definición de elementos de pantalla... 4. Escribir texto en un documento... 5. El cursor...

Módulo I - Word. Iniciar Word... 2. Finalizar Word... 3. Definición de elementos de pantalla... 4. Escribir texto en un documento... 5. El cursor... Módulo I - Word Índice Iniciar Word... 2 Finalizar Word... 3 Definición de elementos de pantalla... 4 Escribir texto en un documento... 5 El cursor... 5 Control de párrafos... 5 Nuevos párrafos... 5 Abrir

Más detalles

La pestaña Inicio contiene las operaciones más comunes sobre copiar, cortar y pegar, además de las operaciones de Fuente, Párrafo, Estilo y Edición.

La pestaña Inicio contiene las operaciones más comunes sobre copiar, cortar y pegar, además de las operaciones de Fuente, Párrafo, Estilo y Edición. Microsoft Word Microsoft Word es actualmente (2009) el procesador de textos líder en el mundo gracias a sus 500 millones de usuarios y sus 25 años de edad. Pero hoy en día, otras soluciones basadas en

Más detalles

COLEGIO COMPUESTUDIO

COLEGIO COMPUESTUDIO COLEGIO COMPUESTUDIO ÁREA: TECNOLOGIA E INFORMATICA DOCENTE: WILLY VIVAS LLOREDA ESTUDIANTE: CLEI: III GUIA N 5 N SESIONES: NUCLEO TEMÁTICO: UNIDAD: 2 Sistema operativo (Windows) OBJETIVO: Comprender el

Más detalles

Capítulo 9. Archivos de sintaxis

Capítulo 9. Archivos de sintaxis Capítulo 9 Archivos de sintaxis El SPSS permite generar y editar archivos de texto con sintaxis SPSS, es decir, archivos de texto con instrucciones de programación en un lenguaje propio del SPSS. Esta

Más detalles

Acronis License Server. Guía del usuario

Acronis License Server. Guía del usuario Acronis License Server Guía del usuario TABLA DE CONTENIDO 1. INTRODUCCIÓN... 3 1.1 Generalidades... 3 1.2 Política de licencias... 3 2. SISTEMAS OPERATIVOS COMPATIBLES... 4 3. INSTALACIÓN DE ACRONIS LICENSE

Más detalles

Servicio de Informática Vicerrectorado de Tecnologías de la Información y la Comunicación

Servicio de Informática Vicerrectorado de Tecnologías de la Información y la Comunicación Vicerrectorado de Tecnologías de la Información y la Comunicación Conexión mediante Escritorio Remoto de Windows Última Actualización 16 de septiembre de 2013 Histórico de cambios Fecha Descripción Autor

Más detalles

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7 Tutoriales de ayuda e información para todos los niveles AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7 Como agregar a una red existente un equipo con Windows 7 y compartir sus archivos

Más detalles

Utilización del sistema operativo GNU/ Linux en las netbooks

Utilización del sistema operativo GNU/ Linux en las netbooks Utilización del sistema operativo GNU/ Linux en las netbooks El sistema operativo es la pieza de software básica de un sistema, que permite manejar los recursos de la computadora, abrir programas, manejar

Más detalles

Para ingresar a la aplicación Microsoft PowerPoint 97, los pasos que se deben seguir pueden ser los siguientes:

Para ingresar a la aplicación Microsoft PowerPoint 97, los pasos que se deben seguir pueden ser los siguientes: Descripción del ambiente de trabajo Entrar y salir de la aplicación Para ingresar a la aplicación Microsoft PowerPoint 97, los pasos que se deben seguir pueden ser los siguientes: A través del botón :

Más detalles

Análisis de los datos

Análisis de los datos Universidad Complutense de Madrid CURSOS DE FORMACIÓN EN INFORMÁTICA Análisis de los datos Hojas de cálculo Tema 6 Análisis de los datos Una de las capacidades más interesantes de Excel es la actualización

Más detalles

Accesibilidad web GUÍA FUNCIONAL

Accesibilidad web GUÍA FUNCIONAL Accesibilidad web GUÍA FUNCIONAL 0 _ ÍNDICE 01_Introducción 02_Primeros pasos 03_Conceptos 04_Navegación por voz 05_Navegación por teclado 06_Navegación por sonido 07_Compatibilidad con lectores de pantalla

Más detalles

V i s i t a V i r t u a l e n e l H o s p i t a l

V i s i t a V i r t u a l e n e l H o s p i t a l V i s i t a V i r t u a l e n e l H o s p i t a l Manual de Restauración del PC Septiembre 2011 TABLA DE CONTENIDOS SOBRE EL SOFTWARE... 3 CONSIDERACIONES ANTES DE RESTAURAR... 4 PROCEDIMIENTO DE RECUPERACION...

Más detalles

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX En este manual se presenta el proceso de configuración de una Maquina Virtual en VirtualBox, que será utilizada para instalar un Servidor

Más detalles

Presentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos:

Presentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos: UNIDAD 8 Presentaciones Reunión. (ITE. Banco de imágenes) as presentaciones son documentos formados por una sucesión de páginas, llamadas diapositivas, que transmiten información estructurada de manera

Más detalles

Internet Information Server

Internet Information Server Internet Information Server Internet Information Server (IIS) es el servidor de páginas web avanzado de la plataforma Windows. Se distribuye gratuitamente junto con las versiones de Windows basadas en

Más detalles

CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP

CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP Características del Explorador de Windows El Explorador de Windows es una de las aplicaciones más importantes con las que cuenta Windows. Es una herramienta indispensable

Más detalles

Archivo de correo con Microsoft Outlook contra Exchange Server

Archivo de correo con Microsoft Outlook contra Exchange Server Archivo de correo con Microsoft Outlook contra Exchange Server Resumen Con este proceso de archivado, lo que pretendemos es guardar nuestro correo en un archivo de datos, para así poder realizar una copia

Más detalles

Manual de Instalación. Sistema FECU S.A.

Manual de Instalación. Sistema FECU S.A. Manual de Instalación Sistema FECU S.A. Índice Requerimientos de hardware... 3 Requerimientos de software... 3 Bajar programas desde Internet... 4 Manual de Usuario... 5 Archivos de instalación FECU S.A....

Más detalles

Edición de Ofertas Excel Manual de Usuario

Edición de Ofertas Excel Manual de Usuario Edición de Ofertas Excel Manual de Usuario Alfonso XI, 6 28014 Madrid F(+34) 91 524 03 96 www.omie.es Ref. MU_OfertasExcel.docx Versión 4.0 Fecha: 2012-11-26 ÍNDICE 1 INTRODUCCIÓN 3 2 CONSIDERACIONES DE

Más detalles

Ayuda para la instalación Componente Firma Digital INDICE. 1 Configuración previa...2. 1.1 Configuración Internet Explorer para ActiveX...

Ayuda para la instalación Componente Firma Digital INDICE. 1 Configuración previa...2. 1.1 Configuración Internet Explorer para ActiveX... INDICE 1 Configuración previa...2 1.1 Configuración Internet Explorer para ActiveX...2 1.2 Problemas comunes en sistema operativo Windows...8 1.2.1 Usuarios con sistema operativo Windows XP con el Service

Más detalles

Proceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento

Proceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento Qué es AT-Encrypt nos permitirá dotar de contraseña a cualquier documento o carpeta. Este documento o carpeta sólo será legible por aquel que conozca la contraseña El funcionamiento del cifrado (o encriptación)

Más detalles

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse. TABLA DE DECISION La tabla de decisión es una herramienta que sintetiza procesos en los cuales se dan un conjunto de condiciones y un conjunto de acciones a tomar según el valor que toman las condiciones.

Más detalles

SESIÓN 1: POWER POINT 2013

SESIÓN 1: POWER POINT 2013 SESIÓN 1: POWER POINT 2013 INTRODUCCIÓN PowerPoint es un miembro de la suite de programas de Microsoft Office 2013. Una suite es un grupo de programas diseñados por un fabricante para que podemos trabajar

Más detalles

1. Cambia el fondo del Escritorio

1. Cambia el fondo del Escritorio PERSONALIZANDO EL ESCRITORIO El Escritorio es la gran zona central de la pantalla. Permite principalmente dos cosas: puedes tener en él archivos o accesos directos para los programas o datos que más utilices,

Más detalles

Skype. Inguralde [Enero 2011]

Skype. Inguralde [Enero 2011] Inguralde [Enero 2011] 1. Introducción Skype es un software que permite al usuario que lo utiliza, formar parte de una gran red de telefonía por Internet. Eso quiere decir que con Skype instalado en un

Más detalles

Selección de los puntos de montaje

Selección de los puntos de montaje PARTICIONES PARA LINUX Selección de los puntos de montaje Tanto para aquellos que vayan a instalar ahora, como para quienes quieran cambiar el tamaño de una partición o formatear este apunte (resumen de

Más detalles

Los distintos navegadores para movernos por Internet

Los distintos navegadores para movernos por Internet www.solucionesenlaweb.com Los distintos navegadores para movernos por Internet Para que los usuarios puedan navegar por Internet y ver la información que más les interesa en cada momento, utilizamos los

Más detalles

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE ÍNDICE ACCESO A LA APLICACIÓN... 2 1.- HOMOLOGACIÓN DE CURSOS... 4 1.1.- INICIAR EXPEDIENTE... 4 1.2.- CONSULTA DE EXPEDIENTES... 13 1.3.- RENUNCIA A LA HOMOLOGACIÓN... 16 2.- MECÁNICA DE CURSOS... 19

Más detalles

Máquinas virtuales (VMWare, Virtual PC, Sandbox. Qué son y para qué sirven. (DV00402A)

Máquinas virtuales (VMWare, Virtual PC, Sandbox. Qué son y para qué sirven. (DV00402A) aprenderaprogramar.com Máquinas virtuales (VMWare, Virtual PC, Sandbox. Qué son y para qué sirven. (DV00402A) Sección: Divulgación Categoría: Herramientas informáticas Fecha revisión: 2029 Autor: Walter

Más detalles

Instalación de Fedora Core 18 junto a Windows 7.

Instalación de Fedora Core 18 junto a Windows 7. Instalación de Fedora Core 18 junto a Windows 7. Antes de nada deberíamos tener en cuenta si tenemos espacio disponible en nuestro disco para poder llevar a cabo la instalación. Habitualmente compramos

Más detalles

CASO PRÁCTICO. ANÁLISIS DE DATOS EN TABLAS DINÁMICAS

CASO PRÁCTICO. ANÁLISIS DE DATOS EN TABLAS DINÁMICAS CASO PRÁCTICO. ANÁLISIS DE DATOS EN TABLAS DINÁMICAS Nuestra empresa es una pequeña editorial que maneja habitualmente su lista de ventas en una hoja de cálculo y desea poder realizar un análisis de sus

Más detalles

Bases de datos en Excel

Bases de datos en Excel Universidad Complutense de Madrid CURSOS DE FORMACIÓN EN INFORMÁTICA Bases de datos en Excel Hojas de cálculo Tema 5 Bases de datos en Excel Hasta ahora hemos usado Excel básicamente para realizar cálculos

Más detalles

Base de datos en Excel

Base de datos en Excel Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de

Más detalles

Tutorial: Primeros Pasos con Subversion

Tutorial: Primeros Pasos con Subversion Tutorial: Primeros Pasos con Subversion Introducción Subversion es un sistema de control de versiones open source. Corre en distintos sistemas operativos y su principal interfaz con el usuario es a través

Más detalles

1. INTRODUCCIÓN Y OBJETIVOS

1. INTRODUCCIÓN Y OBJETIVOS 1. INTRODUCCIÓN Y OBJETIVOS Los teléfonos móviles son ya parte esencial en nuestra forma de vida y cada día son más los usuarios de estos terminales. Hasta ahora nos han acompañado a todas partes y nos

Más detalles

Programa diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L.

Programa diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L. Manual de Usuario Programa diseñado y creado por Contenido 1. Acceso al programa... 3 2. Opciones del programa... 3 3. Inicio... 4 4. Empresa... 4 4.2. Impuestos... 5 4.3. Series de facturación... 5 4.4.

Más detalles

Para descargar la versión más reciente de Skype accedemos al sitio web de Skype y luego hacemos clic en Descargar Skype para escritorio de Windows.

Para descargar la versión más reciente de Skype accedemos al sitio web de Skype y luego hacemos clic en Descargar Skype para escritorio de Windows. Skype Skype: este servicio nos permite comunicarnos en forma sincrónica con nuestros contactos mediante mensajes instantáneos (chat) y realizando video llamadas. Skype Microsoft cuenta con un sistema de

Más detalles

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos

Más detalles

Sistema de Gestión Portuaria Sistema de Gestión Portuaria Uso General del Sistema

Sistema de Gestión Portuaria Sistema de Gestión Portuaria Uso General del Sistema Sistema de Gestión Portuaria Uso General del Sistema Uso General del Sistema Página 1 de 21 Contenido Contenido... 2 1.Ingreso al Sistema... 3 2.Uso del Menú... 6 3.Visualizar Novedades del Sistema...

Más detalles

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10 CONCEPTOS BASICOS Febrero 2003 Página - 1/10 EL ESCRITORIO DE WINDOWS Se conoce como escritorio la zona habitual de trabajo con windows, cuando iniciamos windows entramos directamente dentro del escritorio,

Más detalles

Tema2 Windows XP Lección 1 MENÚ INICIO y BARRA DE TAREAS

Tema2 Windows XP Lección 1 MENÚ INICIO y BARRA DE TAREAS Tema2 Windows XP Lección 1 MENÚ INICIO y BARRA DE TAREAS 1) EL MENÚ INICIO En esta lección vamos a realizar un paso importante hacia el conocimiento de los elementos del Menú Inicio y la Barra de Tareas.

Más detalles

Manual de uso. Manual de uso - citanet 1

Manual de uso. Manual de uso - citanet 1 Manual de uso Manual de uso - citanet 1 1. Requisitos previos a la instalación... 3 2. Primer inicio de la aplicación.... 3 2.1. Pantalla de inicio de sesión.... 3 2.2. Datos de la empresa y configuración

Más detalles

Manual de utilización y uso del Winrar

Manual de utilización y uso del Winrar Manual de utilización y uso del Winrar Descripción del Winrar. El programa Winrar es el compresor (y descompresor) más utilizado. Si utilizamos programas de intercambio como emule o Kazaa se nos hará casi

Más detalles

Intérprete entre el Operador y el Ordenador.

Intérprete entre el Operador y el Ordenador. Introducción a Windows Generalidades Una computadora es un colaborador rápido y eficaz en la tarea administrativa de la información. La computadora en realidad es capaz de hacer muy pocas cosas, como ser:

Más detalles

El Escritorio. En el escritorio tenemos iconos que permiten abrir el programa correspondiente.

El Escritorio. En el escritorio tenemos iconos que permiten abrir el programa correspondiente. El Escritorio Primera pantalla que nos aparecerá una vez se haya cargado el Sistema Operativo con el cual vamos a trabajar, en nuestro caso será el escritorio de Windows XP. Este escritorio es muy similar

Más detalles

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual Introducción Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqué deberían preocuparse del diseño de las bases de datos que utilizan. Después de todo, la mayoría de los

Más detalles

Manual del Alumno de la plataforma de e-learning.

Manual del Alumno de la plataforma de e-learning. 2 Manual del Alumno de la Plataforma de E-learning 3 4 ÍNDICE 1. Página de Inicio...7 2. Opciones generales...8 2.1. Qué es el Campus...8 2.2. Nuestros Cursos...9 2.3. Cómo matricularme...9 2.4. Contactar...9

Más detalles

LiLa Portal Guía para profesores

LiLa Portal Guía para profesores Library of Labs Lecturer s Guide LiLa Portal Guía para profesores Se espera que los profesores se encarguen de gestionar el aprendizaje de los alumnos, por lo que su objetivo es seleccionar de la lista

Más detalles

Accede a su DISCO Virtual del mismo modo como lo Hace a su disco duro, a través de:

Accede a su DISCO Virtual del mismo modo como lo Hace a su disco duro, a través de: Gemelo Backup Online DESKTOP Manual DISCO VIRTUAL Es un Disco que se encuentra en su PC junto a las unidades de discos locales. La información aquí existente es la misma que usted ha respaldado con su

Más detalles

VideoSoftPHONE Active Contact

VideoSoftPHONE Active Contact VideoSoftPHONE Active Contact 1 ÍNDICE 1. CÓMO INSTALAR MI VIDEOSOFTPHONE SOFTWARE?... 1 1.1. REQUISITOS PREVIOS... 1 1.1.1. Requisitos del sistema... 1 1.1.2. Requisitos Software... 1 1.2. INSTALACIÓN...

Más detalles

Servicio de Alta, Baja, Modificación y Consulta de usuarios Medusa

Servicio de Alta, Baja, Modificación y Consulta de usuarios Medusa Documentos de Proyecto Medusa Documentos de: Serie: Manuales Servicio de Alta, Baja, Modificación y Consulta del documento: Fecha 22 de febrero de 2007 Preparado por: José Ramón González Luis Aprobado

Más detalles

MANUAL COPIAS DE SEGURIDAD

MANUAL COPIAS DE SEGURIDAD MANUAL COPIAS DE SEGURIDAD Índice de contenido Ventajas del nuevo sistema de copia de seguridad...2 Actualización de la configuración...2 Pantalla de configuración...3 Configuración de las rutas...4 Carpeta

Más detalles

Proyecto MONO. Juantomás García. 1. Introducción. GNOME Hispano juantomas@lared.es

Proyecto MONO. Juantomás García. 1. Introducción. GNOME Hispano juantomas@lared.es Juantomás García GNOME Hispano juantomas@lared.es Qué es el proyecto MONO?. Estado actual del proyecto. Por qué es interesante para el software libre disponer de la tecnología relacionado con el proyecto

Más detalles

Preguntas y respuestas sobre el cifrado de la información personal. La guía para aprender a cifrar tu información

Preguntas y respuestas sobre el cifrado de la información personal. La guía para aprender a cifrar tu información Guía de Cifrado Preguntas y respuestas sobre el cifrado de la información personal La guía para aprender a cifrar tu información 2 Qué es lo que estamos cuidando? A través del cifrado cuidamos de fotos,

Más detalles

INSTALACIÓN DE MEDPRO

INSTALACIÓN DE MEDPRO 1 Estimado Cliente: Uno de los objetivos que nos hemos marcado con nuestra nueva plataforma de gestión, es que un cliente pueda instalar MedPro y realizar su puesta en marcha de forma autónoma. Siga paso

Más detalles

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta Configuración de una red con Windows Aunque existen múltiples sistemas operativos, el más utilizado en todo el mundo sigue siendo Windows de Microsoft. Por este motivo, vamos a aprender los pasos para

Más detalles

Introducción En los años 60 s y 70 s cuando se comenzaron a utilizar recursos de tecnología de información, no existía la computación personal, sino que en grandes centros de cómputo se realizaban todas

Más detalles

Capítulo 5. Cliente-Servidor.

Capítulo 5. Cliente-Servidor. Capítulo 5. Cliente-Servidor. 5.1 Introducción En este capítulo hablaremos acerca de la arquitectura Cliente-Servidor, ya que para nuestra aplicación utilizamos ésta arquitectura al convertir en un servidor

Más detalles

HERRAMIENTAS DE ACCESS ACCESS 2010. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

HERRAMIENTAS DE ACCESS ACCESS 2010. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE HERRAMIENTAS DE ACCESS ACCESS 2010 Manual de Referencia para usuarios Salomón Ccance CCANCE WEBSITE HERRAMIENTAS DE ACCESS En esta unidad veremos algunas de las herramientas incorporadas de Access que

Más detalles

Anexo A Diagramas de Navegación

Anexo A Diagramas de Navegación Anexo A Diagramas de Navegación Figura D.1: Diagrama de navegación de la pantalla principal. 43 Figura D.2: Diagrama de navegación del apartado Crear Encuesta. 44 Figura D.3: Diagrama de navegación del

Más detalles

1 Itinerario. 2 Descripción y funcionalidades principales. Google Docs. 1.1 Qué vamos a hacer? 1.2 Qué pasos vamos a seguir?

1 Itinerario. 2 Descripción y funcionalidades principales. Google Docs. 1.1 Qué vamos a hacer? 1.2 Qué pasos vamos a seguir? Google Docs 1 Itinerario 1.1 Qué vamos a hacer? En este tutorial aprendemos a manejar la herramienta Google Docs, de esta forma nos introduciremos en el llamado cloud computing, que podemos traducir como,

Más detalles

Mantenimiento Limpieza

Mantenimiento Limpieza Mantenimiento Limpieza El programa nos permite decidir qué tipo de limpieza queremos hacer. Si queremos una limpieza diaria, tipo Hotel, en el que se realizan todos los servicios en la habitación cada

Más detalles

AGREGAR COMPONENTES ADICIONALES DE WINDOWS

AGREGAR COMPONENTES ADICIONALES DE WINDOWS INSTALACIÓN DE IIS EN WINDOWS XP El sistema está desarrollado para ejecutarse bajo la plataforma IIS de Windows XP. Por esta razón, incluimos la instalación de IIS (Servidor de Web) para la correcta ejecución

Más detalles

Como instalar y usar Windows XP y Windows 7 en el mismo equipo

Como instalar y usar Windows XP y Windows 7 en el mismo equipo Como instalar y usar Windows XP y Windows 7 en el mismo equipo Tabla de contenido. Requisitos para instalar Windows XP en una PC con Windows 7. Lo que debemos conocer antes de instalar. Crear una nueva

Más detalles

Cómo instalar un sistema operativo en VirtualBox http://www.noticiasubuntu.com/

Cómo instalar un sistema operativo en VirtualBox http://www.noticiasubuntu.com/ 1 de 16 Cómo instalar un sistema operativo en VirtualBox http://www.noticiasubuntu.com/ Este tutorial va dedicado a todos aquellos que estáis dando vuestros primeros pasos en VirtualBox. Vamos a aprender

Más detalles

... Formas alternativas de escribir un texto. Columnas. anfora CAPÍTULO 4

... Formas alternativas de escribir un texto. Columnas. anfora CAPÍTULO 4 CAPÍTULO 4. Formas alternativas de escribir un texto........ Columnas Para fijar columnas se posiciona el Punto de Inserción donde se desee que comiencen las columnas, o bien se selecciona el texto que

Más detalles

Capítulo VI. Estudio de Caso de Aplicación del Integrador de Información Desarrollado

Capítulo VI. Estudio de Caso de Aplicación del Integrador de Información Desarrollado Capítulo VI Estudio de Caso de Aplicación del Integrador de Información Desarrollado 6.1 Organización elegida La Organización elegida para el caso de aplicación, es la empresa CTM Tours del grupo Costamar,

Más detalles

Administración de la producción. Sesión 2: Sistema Operativo (Microsoft Windows XP)

Administración de la producción. Sesión 2: Sistema Operativo (Microsoft Windows XP) Administración de la producción Sesión 2: Sistema Operativo (Microsoft Windows XP) Contextualización El sistema operativo es el programa principal de la computadora que controla los procesos informáticos

Más detalles

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Documento de trabajo elaborado para la Red Temática DocenWeb: Red Temática de Docencia en Control mediante Web (DPI2002-11505-E)

Más detalles

UAM MANUAL DE EMPRESA. Universidad Autónoma de Madrid

UAM MANUAL DE EMPRESA. Universidad Autónoma de Madrid MANUAL DE EMPRESA Modo de entrar en ÍCARO Para comenzar a subir una oferta de empleo, el acceso es a través del siguiente enlace: http://icaro.uam.es A continuación, aparecerá la página de inicio de la

Más detalles

Crear la base de datos antes de la instalación de Wordpress.

Crear la base de datos antes de la instalación de Wordpress. Introducción En este tutorial básico sobre instalar Wordpress en tu propio hosting mediante un panel de control cpanel y aprenderás como personalizar las bases de datos MySQL que utiliza Wordpress. Para

Más detalles

15 CORREO WEB CORREO WEB

15 CORREO WEB CORREO WEB CORREO WEB Anteriormente Hemos visto cómo funciona el correo electrónico, y cómo necesitábamos tener un programa cliente (Outlook Express) para gestionar los mensajes de correo electrónico. Sin embargo,

Más detalles

UNIVERSIDAD TECNICA DEL NORTE

UNIVERSIDAD TECNICA DEL NORTE UNIVERSIDAD TECNICA DEL NORTE FACULTAD DE INGENIERIA EN CIENCIAS APLICADAS ESCUELA DE INGENIERIA EN SISTEMAS COMPUTACIONALES MANUEL DE USUARIO TEMA: SISTEMA INFORMÁTICO PARA LA PROMOCIÓN Y PUBLICIDAD DE

Más detalles

COMPROBACIONES BÁSICAS PARA EL USO DE FIRMA EN EL RTC

COMPROBACIONES BÁSICAS PARA EL USO DE FIRMA EN EL RTC TITULO: COMPROBACIONES BÁSICAS PARA EL USO DE FIRMA EN EL RTC RESUMEN: La idea de este documento es mostrar una serie de acciones y ayudas básicas para intentar determinar y solucionar problemas en la

Más detalles

Índice Objetivo... 2 Definición y utilidad de Movie Maker... 3 Cómo iniciar Movie Maker?... 3 Elementos de la ventana de Movie Maker...

Índice Objetivo... 2 Definición y utilidad de Movie Maker... 3 Cómo iniciar Movie Maker?... 3 Elementos de la ventana de Movie Maker... Índice Objetivo... 2 Definición y utilidad de Movie Maker... 3 Cómo iniciar Movie Maker?... 3 Elementos de la ventana de Movie Maker... 4 Barra de título... 4 Barra o pestañas de opciones... 4 Cinta de

Más detalles

MANUAL DE AYUDA MODULO TALLAS Y COLORES

MANUAL DE AYUDA MODULO TALLAS Y COLORES MANUAL DE AYUDA MODULO TALLAS Y COLORES Fecha última revisión: Enero 2010 Índice TALLAS Y COLORES... 3 1. Introducción... 3 CONFIGURACIÓN PARÁMETROS TC (Tallas y Colores)... 3 2. Módulos Visibles... 3

Más detalles

Con esta nueva versión, si un artículo que está incluido dentro de un Paquete de Ventas tiene precio 0,00, significará gratis.

Con esta nueva versión, si un artículo que está incluido dentro de un Paquete de Ventas tiene precio 0,00, significará gratis. NOVEDADES Y MEJORAS Continuando con nuestra política de mejora, innovación y desarrollo, le presentamos la nueva versión 9.50 de datahotel que se enriquece con nuevas funcionalidades que aportan soluciones

Más detalles

Conferencia con MSN Messenger

Conferencia con MSN Messenger Conferencia con MSN Messenger La utilización de herramientas telemáticas que permitan la comunicación en directo, a diferencia de las usadas habitualmente en la tutoría Mentor, puede resultar un complemento

Más detalles

Trabajo TICO Unidad 2: Sistemas Operativos. Guillermo Jarne Bueno.

Trabajo TICO Unidad 2: Sistemas Operativos. Guillermo Jarne Bueno. Un Sistema Operativo es el software encargado de ejercer el control y coordinar el uso del hardware entre diferentes programas de aplicación y los diferentes usuarios. Es un administrador de los recursos

Más detalles

1.- DESCRIPCIÓN Y UTILIDAD DEL SOFTWARE DAEMON TOOLS.

1.- DESCRIPCIÓN Y UTILIDAD DEL SOFTWARE DAEMON TOOLS. CREANDO UNIDADES VIRTUALES DE CD Y DVD CON DAEMON TOOLS 1.- DESCRIPCIÓN Y UTILIDAD DEL SOFTWARE DAEMON TOOLS. Daemon Tools es una herramienta que permite a los usuarios simular una unidad o varias unidades

Más detalles

Person IP CRM Manual MOBILE

Person IP CRM Manual MOBILE Manual MOBILE División Informática BuscPerson Telecomunicaciones : Manual MOBILE 0.- Introducción 3 0.1 Configuración de los terminales 3 0.2 Acceso de Usuarios 3 1.- Funcionalidades CRM 5 1.1 Agenda del

Más detalles

G R U P O S INDICE Cómo crear una cuenta en ARQA? Cómo tener un grupo en ARQA? Secciones y funcionalidades de los grupos Configuración del grupo

G R U P O S INDICE Cómo crear una cuenta en ARQA? Cómo tener un grupo en ARQA? Secciones y funcionalidades de los grupos Configuración del grupo INDICE Cómo crear una cuenta en ARQA? 4 Cómo tener un grupo en ARQA? 5 Secciones y funcionalidades de los grupos 6 Muro del Grupo 6 Compartir Textos 8 Compartir Imágenes 9 Compartir videos 10 Compartir

Más detalles

Toda base de datos relacional se basa en dos objetos

Toda base de datos relacional se basa en dos objetos 1. INTRODUCCIÓN Toda base de datos relacional se basa en dos objetos fundamentales: las tablas y las relaciones. Sin embargo, en SQL Server, una base de datos puede contener otros objetos también importantes.

Más detalles

Una computadora es un dispositivo electrónico, operando bajo el control de las instrucciones almacenadas en su propia unidad de memoria.

Una computadora es un dispositivo electrónico, operando bajo el control de las instrucciones almacenadas en su propia unidad de memoria. Informáticas I 1. Sistemas Operativos Para comprender el concepto de sistemas operativos y entender los diferentes tipos de ventanas disponibles lo primero que tenemos que cubrir algunas definiciones básicas.

Más detalles

MANUAL BASICO DE WEBEX

MANUAL BASICO DE WEBEX MANUAL BASICO DE WEBEX Webex es un servicio de web conferencias y soluciones de colaboración, lo que significa que nos permite crear una conferencia por internet en la cual además de vernos los unos a

Más detalles