• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#056 – GuessTheColor: Impariamo creando un giochino per iPhone

By IgnazioC | on 23 Giugno 2010 | 9 Comments
Senza categoria

Ed eccoci ad un nuovo appuntamento con la programmazione per iphone. Oggi vedremo di imparare qualcosa sulla programmazione dei nostri amati melafonini sviluppando un semplice giochino che chiameremo GuessTheColor.

Come funziona GuessTheColor?

Il gioco è molto semplice, viene mostrata al giocatore una view colorata per un paio di secondi, dopo di ciò l’utente dovrà ricreare il colore che ha visto agendo su 3 slider che regolano la quantità di rosso, di verde e di blu. Semplice, no?

Il progetto

Questa volta partiamo subito in quarta e apriamo Xcode, scegliamo di creare un progetto di tipo “view-based application” e lo chiamiamo guessTheColor.

Ci vogliamo semplificare la vita, quindi utilizzeremo una sola classe, nello specifico utilizzeremo la classe guessTheColorViewController.h

Che cosa ci servirà in questa classe? Sicuramente i tre UISlider per selezionare il colore, poi ci servirà una UIView dove visualizzare il colore da indovinare (quella che verrà nascosta dopo 1 o 2 secondi), ed infine ci serviranno tre valori di tipo float (float sono valori con la virgola) per memorizzare le componenti RGB del colore che dobbiamo indovinare.

COS’è RGB?

Questa piccola digressione è d’obbligo, sentitevi liberi di andare avanti se sapete già di cosa stiamo parlando.

RGB sono le iniziali di Red (rosso), Green (verde) e Blue (blu) e, che ci crediate o no, tutti colori che state in questo momento guardando sul vostro schermo sono realizzati dosando opportunamente le percentuali di questi tre colori.

A differenza di quello che avviene quando si mescolano i colori a tempera, con i quali se mescolassimo rosso verde (in realtà il giallo :P) e blu in egual misura otterremmo una sorta di marrone scuro, quello che avviene con gli schermi è che otteniamo invece il bianco. Questa è quella che viene chiamata sintesi additiva.

Esempio di sintesi additiva con RGB

Per specificare un colore, quindi, possiamo semplicemente elencarne le percentuali di rosso, verde e blu.

Storicamente queste percentuali vengono specificate con un intero che va da 0 (0%) a 255 (100%) ma l’sdk di apple prevede che questi valori vengano forniti come un float che va da 0 (0%) a 1 (100%). Ovviamente non cambia nulla, è solo un problema di proporzioni e di scalatura.

Considerando che in molti sono abituati a pensare ai colori in termini di valori 0-255 alcuni programmatori usano fornire questi valori usando questa notazione: 127/255. Questo ovviamente da come risultato un float compreso tra 0 e 1 ed ha il vantaggio di essere più chiaro per chi è abituato alla notazione in 255-esimi.

Una piccola nota, puo’ sembrare strano affermare che il bianco è fatto da 100% rosso, 100% verde e 100% blu, ma quello che questa notazione vuol dire è che nel bianco abbiamo la massima quantità di questi tre colori, così come il colore (100%,100%,50%) ha metà blu rispetto alla sua quantità massima.

TORNIAMO ALLA CREAZIONE DEL NOSTRO GIOCO PER IPHONE

Stavamo modificando guessTheColorViewController.h, aggiungiamo quindi gli Outlet e le property in questo modo:

#import 

@interface guessTheColorViewController : UIViewController {
	UIView *secretColorView;
	UISlider *sliderred;
	UISlider *slidergreen;
	UISlider *sliderblue;
	UILabel *tentativi;
	float red;
	float green;
	float blue;
}
@property (nonatomic, retain) IBOutlet UISlider *sliderred;
@property (nonatomic, retain) IBOutlet UISlider *slidergreen;
@property (nonatomic, retain) IBOutlet UISlider *sliderblue;
@property (nonatomic, retain) IBOutlet UIView	*secretColorView;
@end

Non dimentichiamoci di aggiungere al file “guessTheColorViewController.m” la relativa voce “@synthesize”

@synthesize sliderred,slidergreen,sliderblue,secretColorView;

A questo punto possiamo creare l’interfaccia con Interface Builder, trasciniamo i 3 UISlider e colleghiamoli alla nostra classe cliccando con il tasto destro sull’icona “file’s owner” della documentwindows e trascinando sopra gli slider.

Questa è il mio progetto:


Progetto di GuessTheColor in IB

Scriviamo ora la funzione che imposti un colore random per la view “secretColorView”, questo è il codice:

- (IBACTION)showNextColor
{
	red = ((float)rand()/ RAND_MAX);
	green = ((float)rand()/ RAND_MAX);
	blue = ((float)rand()/ RAND_MAX);
	[secretColorView setBackgroundColor:[UIColor colorWithRed:red green:green blue:blue alpha:1]];
	[self performSelector:@selector(resetView) withObject:nil afterDelay:1.5];
}

Questa funzione si occupa di generare tre valori random utilizzando la funzione rand() ma poichè questi valori non sarebbero compresi nell’intervallo [0,1] bisogna dividere per la costante RAND_MAX.

Impostiamo poi il colore di fondo della view “secretColorView” tramite il metodo “colorWithRed: green: blue: alpha” della classe UIColor.

Questo metodo prende in input tre float che corrispondono alle percentuali dei colori RGB e un altro float per il parametro ALPHA che regola la trasparenza. Con Alpha=0 la view è completamente trasparente, con Alpha=1 è completamente opaca.

L’ultima riga di questa funzione utilizza il metodo “performSelector”, gia incontrato nell’applicazione multithread, in questo caso quello che succede è che viene invocato il metodo “resetView” dopo un ritardo di 1.5 secondi.

Questo è un buon sistema quando si vogliono eseguire delle operazioni “ritardate” senza voler mettere in ballo NSTimer e altre classi più complesse.

Ma cosa fa la funzione resetView? semplicemente toglie il colore visualizzato nella view e lo sostituisce con un anonimo grigio medio.

il codice è questo:

- (IBAction)resetView
{
	[secretColorView setBackgroundColor:[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1]];
}

non ci resta che richiamare la funzione “showNextColor” all’avvio dell’applicazione, magari dentro il metodo viewdidload.

- (void)viewDidLoad {
    [super viewDidLoad];
	[self showNextColor];
}

Se proviamo ad eseguire l’applicazione notiamo una cosa fastidiosa, ad ogni avvio viene visualizzato sempre lo stesso colore.
Questo è dovuto alla funzione rand() un generatore di numeri pseudo-random che per funzionare bene necessia che ad ogni avvio venga generato un nuovo seme.

Questa generazione si fa aggiungendo al file main.m, (all’interno del metodo main) questa riga di codice prima di ogni altra istruzione:

srand(time(NULL))

Proviamo ad indovinare:

Questa che abbiamo appena realizzato è la prima parte dell’applicazione, ora dobbiamo realizzare la seconda.vogliamo che scorrendo con gli slide vari in colore della view, quando pensiamo di aver indovinato il colore che abbiamo visto per un secondo clicchiamo sul pulsante GUESS e verremo informati di quanto siamo stati bravi nel ricordare il colore.

Abbiamo bisogno quindi di un metodo:

- (IBAction)slideChanged:(id)sender
{
	[secretColorView setBackgroundColor:[UIColor colorWithRed:[sliderred value] green:[slidergreen value] blue:[sliderblue value] alpha=1]];
}

Questo metodo non fa altro che impostare il colore della view “secretColorView” con il valore presente nei tre slider.

Da interface builder adesso potremo associare all’evento “value changed” degli slider proprio questo metodo.
Proviamo ad eseguirlo e vediamo come il cambia il colore della view.

Non ci resta che implementare il metodo per la verifica, vogliamo vedere se l’utente è riuscito a ricordare il colore segreto, per fare questo scriviamo questo metodo e lo associamo all’evento click sul pulsante “guess”:

- (IBAction)guessColor:(id)sender
{
	float errorerosso = fabs(sliderred.value - red);
	float erroregreen = fabs(slidergreen.value - green);
	float erroreblue = fabs(sliderblue.value - blue);
	NSString *msg =[NSString stringWithFormat: @"ERRORE\nRED: %d%%\nGREEN: %d%%\nBLUE: %d%%",(int)(errorerosso * 100),
					(int)(erroregreen * 100),
					(int)(erroreblue * 100)];
	UIAlertView *alert  = [[UIAlertView alloc] initWithTitle:@"GUESS" message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
	
;
; }

Calcoliamo per prima cosa quanto i valori che abbiamo selezionato si discostano dai valori che erano stati scelti random, poi creiamo una alertView che ci informi di quanto abbiamo sbagliato.

Con questo la nostra applicazione è terminata, spero che la lettura sia stata utile e piacevole. Attendo i vostri commenti.

Applicazione guessthecolor per devapp

PS:Ho effettuato alcune modifiche dell’ultima ora, ho aggiunto un pulsante per richiedere un nuovo colore, il cui metodo da richiamare è semplicemente “showNextColor”. e poi ho creato un pulsate “mi arrendo” che visualizza qual’era la corretta posizione degli slide il codice è questo:

- (IBAction)imaloser:(id)sender
{
	[sliderred setValue:red animated:YES];
	[slidergreen setValue:green animated:YES];
	[sliderblue setValue:blue animated:YES];
	[secretColorView setBackgroundColor:[UIColor colorWithRed:red green:green blue:blue alpha:1]];
}

Ed ora un breve video del programma in azione.



Se avete problemi con il tutorial, questo è il nostro file di progetto.

Share this story:
  • tweet

Tags: game developmentrandomrgbTutorial PraticiUISlider

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • StencylWorks: creare videogame per iPhone e iPad senza scrivere codice con Mac, Windows o Linux

    1 Febbraio 2012 - 9 Comments
  • T#078 – Creiamo una subView personalizzata da codice (Xcode e Objective-C)

    29 Ottobre 2010 - 5 Comments
  • T#062 – Mostrare un Oggetto in una Vista in una posizione a Random

    7 Luglio 2010 - 9 Comments

Author Description

9 Responses to “T#056 – GuessTheColor: Impariamo creando un giochino per iPhone”

  1. 23 Giugno 2010

    Francesco Burelli

    Molto bello! Semplice ma carino!

  2. 25 Giugno 2010

    Mirco

    concordo. ma al posto di rand() non è meglio arc4random() ? io lo rpeferisco

  3. 25 Giugno 2010

    Frahack94

    carino, utile per una app tipo brushes;
    sarebbe possibile avere dei tutorial sull’uso di iad?
    Grazie

  4. 31 Marzo 2011

    antonio

    io ho seguito il tutorial passo passo, ma compilandolo e lanciando l’applicazione non mi compare nulla.
    Cioè l’interfaccia non viene visualizzata.
    Forse il tutorial da’ per scontati alcuni passaggi che io non ho effettuato ?
    Potreste essere per cortesia più completi ?

  5. 31 Marzo 2011

    ignazioc

    non saprei..credo di essere stato piuttosto dettagliato. magari posso vedere se trovo il progetto e te lo mando.

  6. 31 Marzo 2011

    stefano

    non e che per caso potreste pubblicare o inviarmi via email il codice completo ? perche non riesco a farlo andare…..
    bmw0202 at gmail.com

  7. 2 Aprile 2011

    Ignazioc

    eccolo:
    http://dl.dropbox.com/u/792862/guessTheColor.zip

    Visti i precedenti ci tengo a precisare che il codice fornito è solo d’esempio, vi pregherei di non attribuirvene la paternità, di non pubblicarlo su appstore e/o altri siti. Contattatemi prima di riutilizzare il codice in un qualsiasi modo.

    grazie!

  8. 20 Giugno 2011

    MaveDev

    Grazie anche per questa nuovo fantastico tutorial.

    Giusto qualche passaggio che non e’ chiaramente menzionato ma potrebbe essere utile per chi e’ alle prime armi :
    1) il metodo showNextColor deve essere dichiarato nel file .h:
    – (IBAction)showNextColor;
    e poi utilizzato nel file .m con la restituzione di void:
    – (void)showNextColor
    2) all’interno dell’Interface Builder deve essere fatto il link tra la UIView dichiarata e quella messa nel progetto, altrimenti l’esecuzione non funziona.

  9. 20 Giugno 2011

    MaveDev

    C’e’ un piccolo errore anche nel metodo slideChanged:
    – (IBAction)slideChanged:(id)sender
    {
    [secretColorView setBackgroundColor:[UIColor colorWithRed:[sliderred value] green:[slidergreen value] blue:[sliderblue value] alpha=1]];
    }

    In realta’ per settare alpha deve essere usato “:” altrimenti il compilatore da’ un errore:
    – (IBAction)slideChanged:(id)sender
    {
    [secretColorView setBackgroundColor:[UIColor colorWithRed:[sliderred value] green:[slidergreen value] blue:[sliderblue value] alpha:1]];
    }

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO