Facebook Twitter E-mail RSS
Home 2013 julio
formats

Curso iOS –> Assignment II, CH7 – View: Set game interface

Ahora que ya tenemos la jerarquía de los ViewControllers completada, ya podemos crear la vista del nuevo juego Set, conectando todos los IBOutlets y IBActions sin miedo a tener que cambiarlos posteriormente.

 

En este capítulo vamos a completar las required tasks 5 y 7 de este segundo assignment:

“Your Set game should have 24 cards.”

“Your Set game should have a Deal button, Score label and Flips label just like your playing card matching game from Assignment 1 does.”

 

La vista del juego Set va a ser muy parecida a la del otro juego, Match. Lo primero que vamos a hacer es añadir tanto los UILabels de los contadores de flips y puntuación como el botón de deal en la parte baja de la vista (de la misma forma que lo hicimos anteriormente).

Una vez hecho esto, añadimos justo encima el UISlider que nos permitirá navegar por el histórico de movimientos y justo encima de este slider, el UILabel donde aparece la descripción del movimiento elegido.

Leer más…

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
formats

Curso iOS –> Assignment II, CH6 – Controller: Object-Oriented, superclassing (Part 2)

Seguimos con la jerarquía de ViewControllers: vamos ahora con las IBActions. Al igual que con las propiedades, las podemos dejar todas en la superclase, y a diferencia de los getters y setters, no hace falta cambiarlas. Lo que si debemos cambiar es el método updateUI. Vamos a utilizar la misma estrategia que con el getter de game, dejando la parte común en updateUI y creando métodos que van a ser implementados por las subclases añadiendo el código particular de cada juego.

// CardMatchingGameViewController.h
@interface CardMatchingGameViewController : UIViewController
...

// Set all the UI parameters of the card button using the card
- (void)setCardButtonUI:(UIButton *)cardButton 
                forCard:(Card *)card;

// Set all the UI parameters of the description label using the movement
- (void)setFlipDescriptionLabelUI:(UILabel *)flipDescriptionLabel 
                      forMovement:(CardMatchingGameMovement *)movement;

@end

// CardMatchingGameViewController.m
@implementation CardMatchingGameViewController
...

- (void)setCardButtonUI:(UIButton *)cardButton forCard:(Card *)card
{}

- (void)setFlipDescriptionLabelUI:(UILabel *)flipDescriptionLabel 
                      forMovement:(CardMatchingGameMovement *)movement
{}
@end

Leer más…

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
1 Comentario  comments 
formats

Curso iOS –> Assignment II, CH5 – Controller: Object-Oriented, superclassing (Part 1)

Una vez tenemos el modelo acabado, debemos crear la vista para el nuevo juego de cartas que vamos a añadir a la aplicación. Aun así, antes de hacerlo vamos a crear primero la nueva jerarquía de ViewControllers para compartir el máximo código posible.

Hacemos primero esto para que la conexión entre los controladores y la vista se pueda hacer directamente, ya que si intentamos crear primero la vista conectándola con el controlador y luego cambiamos la jerarquía de controladores podemos tener problemas (como mínimo vamos a tener que modificar algunas cosas).

 

Lo que debemos hacer es renombrar la clase CardGameViewController a CardMatchingGameViewController y crear otra clase MatchGameViewController. Ahora debemos quedarnos en CardGameViewController con la parte comuna del código, la parte que todos los controladores de juegos de cartas van a compartir. De igual forma, debemos trasladar a MatchGameViewController la parte de código propia del mismo, que sea diferente para cada juego.

Leer más…

 
formats

Curso iOS –> Assignment II, CH4 – Model: redoing the movements descriptor

Vamos a acabar el modelo de una vez por todas. Tal y como dijimos en el anterior capítulo vamos a modificar la implementación de la parte del modelo que nos devuelve la descripción de los movimientos realizados durante la última partida.

En lugar de hacer que el modelo construya el string de descripción de un movimiento, vamos a crear una clase auxiliar CardMatchingGameMovement, que se encargará de guardar todos los datos necesarios para describir un movimiento (tipo de movimiento, cartas implicadas en él y puntuación obtenida), de forma que el modelo tendrá un array de CardMatchingGameMovement. De esta forma, será el ViewController que, a partir de estos datos, se encargará de construir la descripción definitiva.

 

Lo primero que vamos a hacer es crear esta nueva clase, que lo único que va a tener van a ser unas cuantas propiedades que van a guardar todo lo necesario para describir un movimiento completamente. Como siempre, vamos a intentar que sea lo más genérica posible, de forma que pueda servir para cualquier juego de cartas que creemos en el futuro.

Leer más…

 
formats

Curso iOS –> Assignment II, CH3 – Model: SetGame

Para acabar el modelo tan solo nos falta la clase SetGame. Para hacerlo, vamos a modificar primero CardMatchingGame para hacerla del todo genérica, creando luego tanto la nueva clase SetGame como otra clase MatchGame, que será el juego del assignment 1. De esta forma tendremos una superclase que nos servirá para “todos” los juegos que vayamos a añadir en el futuro, haciendo que todos los juegos “reales” hereden de esta superclase.

 

Para hacerlo, lo primero que vamos a hacer es eliminar los define y hacer las puntuaciones parametrizables. Es decir, vamos a convertir flipCost, matchBonus y mismatchPenalty en propiedades readonly, de manera que cada una de las subclases sobrescriban los getters, devolviendo el valor deseado dependiendo del juego. Como siempre, puede que esta no sea la mejor solución; por ejemplo, se podría hacer que estas propiedades se tuvieran que suministrar en el método inicializador, ahorrándonos el tener que crear una subclase para cada juego diferente.

De la misma forma, vamos a modificar la propiedad booleana twoCardMode para que pase a llamarse numberCardsToMatch, de manera que no limitamos la clase a hacer match de 2 o 3 cartas.

Leer más…

 
© Programación iOS
credit