08.05.2013 Views

TRIPLETRIAL Por: Bernabé Kantar, Joaquín. Tripletrial aparece en ...

TRIPLETRIAL Por: Bernabé Kantar, Joaquín. Tripletrial aparece en ...

TRIPLETRIAL Por: Bernabé Kantar, Joaquín. Tripletrial aparece en ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>TRIPLETRIAL</strong><br />

<strong>Por</strong>: <strong>Bernabé</strong> <strong>Kantar</strong>, <strong>Joaquín</strong>.<br />

<strong>Tripletrial</strong> <strong>aparece</strong> <strong>en</strong> el clásico Final Fantasy VIII como un minijuego de cartas, <strong>en</strong> el cual el<br />

objetivo es ganar las cartas del rival.<br />

Para ello cada jugador escoge 5 cartas proced<strong>en</strong>tes de su colección<br />

(previam<strong>en</strong>te conseguidas <strong>en</strong> el juego a través de misiones o <strong>en</strong>contradas <strong>en</strong><br />

los esc<strong>en</strong>arios), cada carta dispone de 4 atributos o fuerzas<br />

situadas cada una <strong>en</strong> uno de sus laterales.<br />

El sistema de juego es simple,<br />

por turnos los jugadores juegan una única carta de su<br />

mano sobre un tablero con capacidad para 9 cartas <strong>en</strong><br />

un sistema de 3x3 (imag<strong>en</strong> de la izquierda).<br />

Cuando se juega una carta, se ha de comprobar si<br />

alguno de sus laterales está <strong>en</strong> contacto con alguna<br />

carta rival, <strong>en</strong> caso de estarlo se comparan las fuerzas<br />

situadas <strong>en</strong> los laterales <strong>en</strong> contacto y si la carta jugada<br />

ti<strong>en</strong>e un mayor valor de fuerza que la que ya estaba,<br />

esta última pasa a ser del bando del contrario.<br />

Este procedimi<strong>en</strong>to se ha de realizar para todas las cartas rivales que estén <strong>en</strong> contacto con la recién<br />

llegada.<br />

Los jugadores alternan turnos <strong>en</strong> los cuales es obligatorio jugar una y sólo una carta, hasta que las<br />

9 posiciones del tablero estén ocupadas. En este mom<strong>en</strong>to se dará por v<strong>en</strong>cedor al jugador con más<br />

cartas <strong>en</strong> su bando, si<strong>en</strong>do posible un empate.


¿CÓMO SE JUEGA?<br />

Una vez iniciada la partida, los dos jugadores (<strong>en</strong> adelante Azul y Rojo) alternarán turnos tras jugar<br />

sus cartas.<br />

La secu<strong>en</strong>cia del turno es la sigui<strong>en</strong>te:<br />

-Escoger una carta <strong>en</strong> mano.<br />

-Elegir una posición libre del tablero.<br />

-Jugar la carta.<br />

-Comprobar las interacciones con las cartas rivales.<br />

-Resolver las posibles interacciones.<br />

-Fin del turno.<br />

<strong>Por</strong> lo tanto durante el turno del jugador, este debe escoger una y sólo una de sus cartas<br />

desplazándose con las flechas de dirección sobre las cartas de su mano y cuando esté sobre la que<br />

desee pulsando “<strong>en</strong>ter”. Ahora podrá desplazarse por el tablero y colocarla <strong>en</strong> una posición del<br />

tablero que no estuviese previam<strong>en</strong>te ocupada, <strong>en</strong> caso de arrep<strong>en</strong>tirse de la carta que escogió<br />

simplem<strong>en</strong>te debe pulsar espacio para volver a su mano.<br />

Una vez seleccionada la posición, la carta será llevada de la mano a la posición del tablero,<br />

mom<strong>en</strong>to <strong>en</strong> el cual se comprobará si hay o no cartas rivales <strong>en</strong> contacto con la misma. De ser así<br />

comparando sus valores de fuerzas <strong>en</strong> contacto podremos saber si las derrotaremos o no. Para<br />

derrotar una carta rival y que ésta se una a nuestro bando, nuestra fuerza a comparar debe t<strong>en</strong>er un<br />

valor superior. En caso de derrotarla pasará a nuestro bando.<br />

Ahora es el turno del rival.<br />

Repiti<strong>en</strong>do este proceso hasta que las 9 posiciones estén ocupadas, <strong>en</strong>tonces se cu<strong>en</strong>ta las cartas de<br />

cada bando, ¡el jugador que posea más cartas será el v<strong>en</strong>cedor!<br />

OBJETIVOS<br />

El juego una vez desarrollado debe permitirnos jugar una partida para dos jugadores a partir de unas<br />

manos g<strong>en</strong>eradas aleatoriam<strong>en</strong>te como <strong>en</strong> otros juegos de cartas coleccionables.<br />

En este caso quizás el formato Abierto sea el más interesante, <strong>en</strong> el cual ambos jugadores se v<strong>en</strong> las<br />

manos, unido a que las cartas nos son desconocidas hasta el inicio de la misma la complejidad del<br />

juego es mayor pues requerirá p<strong>en</strong>sar por los dos, usar estrategias para <strong>en</strong>gañar al opon<strong>en</strong>te y<br />

sacrificar alguna de nuestras cartas para hacer una jugada mejor.<br />

A su vez <strong>en</strong> el trascurso de la partida, el programa debe impedir jugadas ilegales tales como no<br />

jugar carta o jugar una carta <strong>en</strong> una posición ocupada.<br />

En cuanto a gráficos, mediante ncurses usaremos las funciones de imprimir <strong>en</strong> pantalla con colores<br />

para mostrar los bandos de las cartas, usando una paleta reducida (blanco, negro, amarillo, rojo y<br />

azul) con la que el usuario fácilm<strong>en</strong>te difer<strong>en</strong>ciará y sabrá con exactitud lo que ocurre, tanto fase del<br />

juego como las interacciones <strong>en</strong>tre cartas.


IMPLEMENTACIÓN<br />

Para convertir la teoría <strong>en</strong> una realidad se han implem<strong>en</strong>tado tres clases:<br />

-CMano, <strong>en</strong> la cual creamos y gestionamos la mano del jugador, t<strong>en</strong>dremos dos .<br />

-CTablero, la cual recibirá las cartas jugadas y <strong>en</strong> la que podremos ver el resultado del juego así<br />

como la interacción <strong>en</strong>tre las cartas jugadas.<br />

-CCursor, el cursor es el intermediario <strong>en</strong>tre los deseos del usuario y la realización de su jugada, nos<br />

asiste señalizando la carta que deseemos jugar desde la mano del usuario y una vez seleccionada<br />

nos permitirá colocarla <strong>en</strong> la posición escogida del tablero.<br />

Cuando iniciamos el juego se nos pres<strong>en</strong>ta <strong>en</strong> pantalla el tablero y las manos de ambos jugadores<br />

con sus cartas iniciales y sus colores respectivos. El cursor (amarillo) nos mostrará sobre qué carta<br />

estamos posicionados y nos permitirá seleccionar únicam<strong>en</strong>te las cartas de nuestra mano y<br />

colocarlas <strong>en</strong> las posiciones vacías del tablero.<br />

Durante la sucesión de los turnos veremos como al derrotar las cartas rivales, éstas pasan a nuestro<br />

color y viceversa.<br />

ESTRUCTURA<br />

Como ya se ha m<strong>en</strong>cionada previam<strong>en</strong>te, todas las gestiones relativas a la selección de carta o<br />

posición para la misma se realiza a través de la clase CCursor que recibirá <strong>en</strong> su construcción una<br />

refer<strong>en</strong>cia al tablero para poder posteriorm<strong>en</strong>te <strong>en</strong>viar la carta seleccionada hasta el tablero.<br />

Igualm<strong>en</strong>te cada turno recibe la refer<strong>en</strong>cia del jugador que es poseedor del mismo. Lo cual le<br />

permite interactuar con el usuario que con las flechas de dirección podrá posicionar el cursor sobre<br />

la carta de su mano que desee jugar. Una vez el usuario selecciona la carta, ésta es guardada <strong>en</strong> una<br />

variable temporal hasta que el jugador (mediante el cursor) seleccione la posición del tablero <strong>en</strong> la<br />

que quiere ponerla.<br />

Si esta posición es válida, la carta seleccionada es pasada como parámetro al tablero junto con las<br />

coord<strong>en</strong>adas de la posición <strong>en</strong> la que debe ser colocada. La carta original es borrada de la mano.<br />

Una vez <strong>en</strong> el tablero, es el propio tablero el que comprueba las posibles interacciones con las cartas<br />

que ya estaban él.<br />

<strong>Por</strong> tanto vemos como claram<strong>en</strong>te es la class CCursor la que interactúa con los usuarios, la cual se<br />

asegura de que tanto las class CMano y CTablero le confirm<strong>en</strong> si una jugada o un desplazami<strong>en</strong>to es<br />

válido.<br />

Si<strong>en</strong>do CCursor el que da las órd<strong>en</strong>es a las demás y es la que recibe las órd<strong>en</strong>es directam<strong>en</strong>te del<br />

usuario.<br />

A continuación procederemos a dar una breve descripción de cada método público de las clases<br />

implem<strong>en</strong>tadas.


CMANO, sus métodos públicos:<br />

CMano(CTablero *tablero, TColor color); Constructor al cual le pasamos la refer<strong>en</strong>cia al tablero y<br />

el color que desde el principal le hemos asignado al jugador (Rojo/Azul).<br />

~CMano(); Destructor.<br />

TCarta DevuelveCarta(int p); Devolverá una copia de la carta <strong>en</strong> la posición p.<br />

void BorraCarta(int p); Elimina la carta <strong>en</strong> la posición p.<br />

int EnMano(); Devuelve el número de cartas que quedan <strong>en</strong> la mano.<br />

void Pintate(); Imprime <strong>en</strong> pantalla la mano del jugador.<br />

TColor ColorJugador(); Devuelve el color que asignamos al jugador <strong>en</strong> el constructor.<br />

CTABLERO, sus métodos públicos:<br />

CTablero(); Constructor, iniciamos todas las posiciones del tablero como vacías, iniciamos ncurses<br />

y habilitamos la opción de movernos mediante el uso de los cursores.<br />

~CTablero(); Destructor, cerramos ncurses y la v<strong>en</strong>tana.<br />

void RecibeManos(CMano *JugadorAzul, CMano *JugadorRojo); Una vez creados los<br />

jugadores, le pasamos al tablero las direcciones de los mismos.<br />

void JuegaCarta(TCarta carta, int x, int y); Recibe una carta y la posición del tablero donde debe<br />

ponerla, una vez colocada gestiona las posibles capturas y <strong>en</strong> caso de ser necesario actualiza el<br />

propietario de las cartas que están <strong>en</strong> el tablero.<br />

TCarta DevuelveCarta(int x, int y); Devuelve una copia de la carta <strong>en</strong> la posición escogida.<br />

void PintaEstado(); Imprime <strong>en</strong> pantalla las manos de los jugadores que le pasamos <strong>en</strong><br />

RecibeManos utilizando el método CMano::Pintate(), además de pintar el tablero con el estado<br />

actual.<br />

TColor Ganador(); Una vez finalizada la partida, calcula el resultado y devuelve el color v<strong>en</strong>cedor.<br />

CCURSOR, sus métodos públicos:<br />

CCursor(CTablero *mesa); Constructor al que le pasamos la dirección del tablero.<br />

~CCursor(); Destructor.<br />

void DesplazateEnMano(CMano *jugador); Cada turno le pasamos la dirección del jugador cuyo<br />

turno se va a desarrollar, nos desplazamos por la mano para seleccionar la carta que jugaremos y se<br />

la pasamos al la función privada bool DesplazateEnTablero(TCarta, int, int) la cual nos permite<br />

desplazarnos por el tablero y nos devolverá false si nos arrep<strong>en</strong>timos de la carta que cogimos y true<br />

cuando juguemos la carta <strong>en</strong> una de las posiciones válidas del tablero, llamando <strong>en</strong>tonces a<br />

Ctablero::JuegaCarta(TCarta, int, int) con la carta elegida y su nueva posición como<br />

parámetros.


principal.cpp<br />

Alternación de turnos <strong>en</strong>tre jugador<br />

Rojo y Azul.<br />

class CCursor<br />

Métodos públicos llamados:<br />

void DesplazateEnMano(CMano *jugador);<br />

class CTablero<br />

Métodos públicos llamados:<br />

class CMano<br />

Métodos públicos llamados:<br />

TCarta DevuelveCarta(int p);<br />

void BorraCarta(int p);<br />

void JuegaCarta(TCarta carta, int x, int y);<br />

void PintaEstado();<br />

Estado actual del tablero tras jugar la carta<br />

Ley<strong>en</strong>da:<br />

Llamadas<br />

Fin del proceso, vuelta al inicio

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!