Y llegamos a la quinta edición del tutorial de programación en Cocoa. Creados los outlets y las acciones, vamos a ir escribiendo el código.
Antes de nada, os refresco la memoria: en la parte IV dije que íbamos a definir ciertos datos con código, y en la parte III dije que para ejecutar ciertas órdenes antes de que la aplicación se iniciara, se hacía así:
- (void)awakeFromNib
{
accionAEjecutar;
}
En ese caso, manos a la obra! En primer lugar, borremos ese feo texto del NSTextField:
[hasganado setStringValue:@" "];
Ahora, colocamos los valores mínimos y máximos de los NSStepper entre 0 y 5, dejando así que el usuario elija entre 6 opciones por canal de color:
[frojo setMinValue:0]; // Valor mínimo
[frojo setMaxValue:5]; // Valor máximo
[fverde setMinValue:0]; // Valor mínimo
[fverde setMaxValue:5]; // Valor máximo
[fazul setMinValue:0]; // Valor mínimo
[fazul setMaxValue:5]; // Valor máximo
Probablemente os habréis fijado en esas dos barras y el texto que viene después de ellas. Son comentarios, su existencia no afecta al programa en ningún sentido. Son sólo anotaciones.
Ahora, pasemos a algo más divertido: generar los tres números aleatorios que definirán el valor de los canales rojo, verde y azul del color que el usuario debe conseguir: el “color objetivo” en nuestro juego.
Para ello, usaremos la función random() y srandom(). La primera genera números aleatorios en base a una “semilla”. La segunda genera una “semilla” (un número en base al cual generar números aleatorios) a partir de un número.
Y, ¿cuál será el número que introduciremos? Pues nada más y nada menos que la fecha y hora en formato de Internet o formato Unix, un número que cambia a cada segundo.
srandom([[NSDate date] timeIntervalSince1970]);
// Genera la hora en formato UNIX y se la pasa
//a srandom(). La semilla sólo se genera una vez
//para todo el programa.
double rrojo = random() % 6;
// Genera un número aleatorio, lo divide entre 6
//y devuelve el resto de la operación. Esto genera
//un número entre 0 y 5, lo cual encaja con los
//valores mínimos y máximos del NSStepper. Este
//número se guarda en una variable de tipo double.
double rverde = random() % 6;
// Ídem
double razul = random() % 6;
// Ídem
Ahora vamos a comprobar que el tono creado no es un tono de gris. Los tonos de gris son aburridos y restarían emoción al juego. Como lo comprobamos? Usando la sentencia while.
La sentencia while recibe una condición. Si esa condición se cumple (por ejemplo: 2+2 == 4) entonces realiza una serie de acciones y vuelve a comprobar la condición. En el momento que esa condición no se cumpla, las acciones se omitirán y el código seguirá.
while (rrojo == rverde && rverde == razul) {
// Si rojo, verde y azul son iguales, entonces es
//un tono de gris, así que vuelve a generar tres
//colores aleatorios.
rrojo = rand() % 6;
rverde = rand() % 6;
razul = rand() % 6;
}
Pasado mañana escribiremos el resto del código de nuestra aplicación, sin pararnos en nada que se haya visto antes.
Etiquetas: cocoa, Interface Builder, objective-c, programación, xcode


Para hacer un trackback a este artículo, usa
Para seguir los comentarios de este artículo por RSS, usa 

