Chiudi il Menu
iSpazioiSpazio
  • Notizie
  • Offerte iSpazio
  • Sfondi
  • Downloads
  • Recensioni
  • iOS 26
  • Sconti Amazon
Menu Espanso
  • Home
  • Forum
  • Notizie
  • Offerte iSpazio
  • iOS 26
  • iPhone 16
  • Downloads
  • Guide
  • Sconti Amazon
  • Contatti
  • Pubblicità
Facebook X (Twitter) Instagram YouTube TikTok
iSpazioiSpazio
  •  Forum
  • Offerte iSpazio
  • Wallpapers Central
  • Teslers
Scarica l'App
  • Offerte
  • Sfondi
  • Guide
    • Personalizzazione
    • Video Guide TikTok
  • Recensioni
  • Downloads
    • Sfondi
    • Suonerie
    • Comandi Rapidi
    • Sfondi Personalizzati
    • Widget e Altro
    • iOS
    • iTunes
  • Dispositivi Apple
    1. iPhone
    2. iPad
    3. Mac
    4. Apple Watch
    5. iOS 26
    6. Vedi tutto

    Un leak svela i nuovi colori dell’iPhone 18 Pro, ecco le prime immagini

    17 Apr 2026

    Quanti modelli di iPhone presenterà Apple questo autunno?

    15 Apr 2026

    iPhone 18 Pro in rosso scuro? I rivali Android già testando la nuova colorazione

    13 Apr 2026

    Per la prima volta in un Q1, Apple è il produttore di smartphone più grande al mondo

    13 Apr 2026

    L’iPad Air OLED potrebbe arrivare all’inizio del 2027

    15 Apr 2026

    Apple rilascia nuovi aggiornamenti di sicurezza per le vecchie versioni di iOS e macOS

    25 Mar 2026

    Il nuovo iPad con chip A18 è ancora previsto per la prima metà del 2026

    23 Mar 2026

    iPad Air M4 è ufficialmente disponibile all’acquisto, anche su Amazon ed in 5 comode rate

    11 Mar 2026

    Il MacBook Neo è un successo senza precedenti con scorte esaurite fino a maggio

    17 Apr 2026

    Perplexity Personal Computer trasforma il Mac in un agente AI capace di gestire ogni app

    17 Apr 2026

    Microsoft tenta di frenare il successo del MacBook Neo con un’offerta per gli studenti

    16 Apr 2026

    Google lancia l’app ufficiale di Gemini per Mac: ecco tutte le funzioni

    16 Apr 2026

    Gli Apple Store potranno ripristinare il software dell’Apple Watch direttamente in negozio

    16 Apr 2026

    Molti Apple Watch hanno smesso di funzionare correttamente dopo l’ultimo aggiornamento

    15 Apr 2026

    Apple Watch, in arrivo due nuove sfide attività per il mese di aprile

    15 Apr 2026

    Apple Watch, niente rivoluzione nel design per i modelli in arrivo quest’anno

    30 Mar 2026

    Offerte del giorno: Ecco i migliori sconti selezionati da iSpazio

    18 Apr 2026

    iOS 27 punterà tutto su personalizzazione e miglioramenti del Liquid Glass

    17 Apr 2026

    Anthropic ha appena lanciato l’AI che scrive codice meglio degli umani

    17 Apr 2026

    Un leak svela i nuovi colori dell’iPhone 18 Pro, ecco le prime immagini

    17 Apr 2026

    Offerte del giorno: Ecco i migliori sconti selezionati da iSpazio

    18 Apr 2026

    iOS 27 punterà tutto su personalizzazione e miglioramenti del Liquid Glass

    17 Apr 2026

    Anthropic ha appena lanciato l’AI che scrive codice meglio degli umani

    17 Apr 2026

    Un leak svela i nuovi colori dell’iPhone 18 Pro, ecco le prime immagini

    17 Apr 2026
  • iPhone 17
  • iOS 26
  • Sconti Amazon
Contatti
Pubblicità
iSpazioiSpazio
  • Notizie
  • Offerte iSpazio
  • Sfondi
  • Downloads
  • Recensioni
  • iOS 26
  • Sconti Amazon

iSpazio Developers Program #13 – Pong, parte 2: completiamo il nostro gioco!

Andrea BusiDi Andrea Busi24 Mar 2009Commenta7 min di lettura
Condividi Facebook Twitter Telegram WhatsApp Copia Link Threads Email
Share
Facebook Twitter WhatsApp Telegram Threads Email Copia Link
In qualità di Affiliato Amazon, iSpazio riceve una commissione dagli acquisti idonei senza alcun costo per voi. (info).
Icona Cerchi Prodotti Apple ed accessori Tech in sconto?

Cerchi Prodotti Apple ed accessori Tech in sconto?

Segui il nostro canale @scontiamolo su Telegram!

Advertising

Siamo pronti per la seconda parte del tutorial relativo al nostro gioco Pong! Nella scorsa puntata abbiamo visto come dichiarare ed implementare i vari componenti che ci occorrono, ed abbiamo anche dato una fisica alla pallina. Oggi implementeremo invece tutte le parti restanti, ovvero il movimento delle due racchette, un’intelligenza per il computer e la gestione dei punteggi.

Ovviamente le implementazioni non saranno perfette, ma abbastanza semplici, in modo da poter essere comprensibili a tutti. Chi volesse proporre soluzioni migliori può farlo tranquillamente nei commenti! Quindi, sotto con la programmazione!

TUTORIAL:

1. Piccola modifica
2. Interazione dell’utente
3. Gestiamo la collisione tra gli oggetti
4. AI: l’intelligenza del computer!
5. Implementiamo il meccanismo del punteggio

1. Piccola modifica

Prima di iniziare questo tutorial dobbiamo fare una piccola modifica. Nel tutorial precedente vi avevo fatto settare queste costanti:

immagine-427

Modificate il valore della costante “kVelocitàPallaY” in 20. Questo perchè potrebbe capitare cho poi il gioco non funzioni, per un caso davvero particolare, che non voglio stare a discutere ora. Quindi prendete per buono questo valore, mentre se qualcuno è così smaliziato da voler tenere il 15 e cercare di risolvere l’errore ce si presenta è ben libero di farlo, e proporre nei commenti la soluzione trovata!

2. Interazione dell’utente

La prima cosa che dobbiamo gestire è l’interazione dell’utente, che deve poter giocare con il nostro Pong! Dobbiamo iniziare, quindi, implementando la possibilità di muovere la proprio barra! Per far questo modifichiamo il “touchesBegan” in “PongTutorialViewController.m” nella seguente maniera:

immagine-195

Questo servirà solo per rilevare l’inizio di un’azione da parte dell’utente. Il movimento vero e proprio, invece, è gestito da un altro metodo, “touchesMoved”, che infatti viene richiamato nel caso in cui la partita sia in corso. Ovvero, se la partita è già stata avviata e l’utente esegue un movimento (ovvero tocca lo schermo), significa che vuole muovere la sua barra, quindi noi richiamiamo il metodo “touchesMoved”, che si occupa proprio di gestire il movimento. Ecco il codice di tale metodo:

immagine-257

Cosa fa questo metodo? Potete già inturilo dai commenti presenti nel codice. Quando l’utente compie un movimento sullo schermo, noi intercettiamo l’azione (chiamata “touch”), da cui ricaviamo le coordinate, e muoviamo di conseguenza la barra dell’utente (la barraDue, ovvero quella posta in basso; avremmo potuto anche scegliere la barraUno, non c’era nessuna differenza!).

3. Gestiamo la collisione tra gli oggetti

Ora dobbiamo gestire la collisione tra i vari componenti. In altre parole, dobbiamo far si che la pallina rimbalzi quando arriva su una delle due barre, e non passi attraverso come succede ora. Potrebbe sembrare complicato gestire le collisioni, invece si rivelerà tutto molto semplice grazie ad un componente offerto da Cocoa: “CGRectIntersectsRect”. Questo oggetto eseguirà i calcoli necessari, e ci dirà se due rettangoli (perchè sia la pallina che le barre sono contenuti in rettangoli di tipo UIImageView) sono in contatto tra di loro.
Andiamo nel metodo “gameLoop” ed inseriamo il seguente codice:

immagine-335

Semplice vero? Non facciamo altro che usare il componente “CGRectIntersectsRect”, che ci dirà se i due oggetti sono a contatto. In tal caso invertiamo la velocità della pallina, proprio come avevamo già fatto in precedenza per invertire la direzione quando si arriva al bordo dello schermo.

4. AI: l’intelligenza del computer!

Eccoci a una parte molto importante e difficile del gioco, ovvero l’Intelligenza Artificiale (AI) del giocatore comandato dal computer. Purtroppo elaborare un algoritmo efficacie e realistico sarebbe troppo complicato per questo tutorial, e certo non è il nostro scopo. Ci limiteremo, quindi, a una semplice implementazione, che vi permetterà di avere un computer “poco intelligente”. Per questo tutorial, comunque, sarà più che sufficiente.

La prima cosa da fare è definire una costante, che sarà la velocità di reazione del computer. Nel file “PongTutorialViewController.m” inseriamo quindi la seguente dichiarazione:

immagine-426

Ovviamente potrete variare questo valore per avere un computer con una diversa intelligenza. Più alto sarà il valore, più il computer sarà veloce e quindi “forte”; analogamente, abbassando il valore il computer sarà lento e “debole”.

Inseriamo ora il codice dell’AI. In “gameLoop” inseriamo le seguenti istruzioni:

immagine-516

Analizziamo quello che abbiamo scritto. Il primo “if” aggiunge un po’ di difficoltà al computer, in quanto gli permette di muoversi solo quando la pallina è nella sua metà campo; quindi, se la pallina sarà nella metà alta dello schermo, la barra del computer potrà muoversi, altrimenti dovrà rimanere ferma. I due “if” successivi, invece, muovo la racchetta del computer. Se la pallina (e per la precisione il suo centro) è a sinistra della racchetta (primo if), spostiamo il centro della barra verso sinistra, sottraendo dalle coordinate il valore della velocità del computer. Stessa cosa effettuiamo se la pallina è a destra della barra, ovviamente spostando verso destra la barra stessa.

Come potete vedere non è nulla di particolare, è un algoritmo molto semplice. Ci permetterà, comunque, di poter giocare al nostro personalissimo Pong! Potete anche notare, infine, come sia proprio la costante “kVelocitaMovComputer” a decidere la reattività del computer, in quanto determina la velocità con cui la barra si deve muovere verso la pallina. Più la barra è veloce, più sarà difficile per noi segnare!

5. Implementiamo il meccanismo del punteggio

L’ultima cosa che manca al nostro gioco è il conteggio del punteggio! Dobbiamo implementare proprio questo meccanismo. Il funzionamento, come potete facilmente intuire, sarà semplice: quando la pallina supera la barraUno, sarà punto per il giocatore due (ovvero l’utente), mentre quand la pallina supera la barraDue, sarà il computer ad aver fatto punto.

Iniziamo dichiarando, nel file “PongTutorialViewController.h” due variabili e un oggetto che ci serviranno:

immagine-612

Abbiamo definito le due variabili che conterranno i due punteggi, e un metodo, che dovrà riavviare la partita quando sarà terminata. Ci sorge quindi subito un quesito: quando una partita termina? Facciamo noi una scelta e imponiamo che la partita finisca quando un giocatore totalizzi 5 punti.
Andiamo, quindi, in “PongTutorialViewController.m” e impostiamo una costante relativa a questo punteggio massimo, così:

immagine-714

Il limite che abbiamo fissato sarà quindi a 5 punti. Ovviamente potremo variare a nostro piacere questo valore.

Dobbiamo adesso implementare il codice che conta i punti. Nel metodo “gameLoop”, dopo l’AI del computer, inseriamo questo codice:

immagine-89

Come possiamo vedere il codice è molto semplice. Analizziamo solo il primo “if”, visto che il secondo è uguale ma cambia solo per il giocatore conrollato.Viene controllato se la coordinata y della pallina è minore di 0 (ovvero se è oltre il bordo superiore dello schermo): in caso il controllo dia esito positivo, viene incrementato il punteggio del giocatore due, e viene richiamato il metodo reset, che andremo ad implementare fra poco. Potete vedere che il metodo reset ha come parametro un confronto, tra il punteggio del giocatore e quello massimo. Questo serve in quanto il metodo reset dovrà sapere se la partita è terminata (perchè uno dei due giocatori ha raggiunto 5 punti), oppure se la partita non è ancora finita.

L’ultima cosa che dobbiamo implementare è il metodo reset. Questo metodo dovrà riportare i componenti al loro stato originale, ad ogni punto segnato. Il codice del metodo è il seguente:

immagine-99

I commenti dovrebbero già darvi un’indicazione di cosa avviene all’interno di questo metodo. Si tratta, comunque, di mettere in pausa la partita, riposizionando la pallina al centro dello schermo. Dopodichè, viene eseguito un controllo sulla variabile “newGame”, che ci indica se uno dei due giocatori ha vinto: se il controllo da esito positivo, si controlla chi ha vinto, e si setta la label con un messaggio di avviso. Si azzerano, poi, i due contatori dei punteggi, per essere già pronti per una nuova partita. In caso contrario, si inserisce la scritta “Tocca per iniziare”, in modo che l’utente sappia cosa fare. Infine si settano le due label con i punteggi dei due utenti.

Abbiamo terminato!! Clicchiamo su “Build and Go!” e giochiamo con il nostro personalissimo Pong!

immagine-106

Se Avete Problemi, questo è il nostro file di progetto.

La guida è stata creata da Andrea Busi per “iSpazio.net” e “Bubi Devs”. La versione originale inglese del tutorial è disponibile a questo indirizzo: “iPhone Game Programming Tutorial, Part 2 – iCodBlog“. I meriti quindi relativamente alla versione inglese, sono del legittimo autore.

Sai che siamo anche su Telegram? Unisciti al nostro canale iSpazio per ricevere le notifiche oppure Apple Italia per chattare con altri utenti. Scopri i migliori prodotti Tech in sconto su Amazon con il nostro canale OFFERTE iSpazio.
Icona dell'applicazione Le Migliori Offerte Amazon disponibile su App Store

Le Migliori Offerte Amazon

Selezionate dalla redazione di iSpazio
GUARDALE LIVE  
  • Filtra:
  • Tutte
  • Apple
  • Minimo Storico
  • Alimentari e cura della casa
  • Elettronica
  • Grandi elettrodomestici
  • Illuminazione
  • Informatica
  • Salute e cura della persona
5%
NORSAN Olio di pesce Omega 3 Capsule 1×120 pz I 1.500 mg Fish Oil Omega 3 Ifos Senza ritorno di gusto I Omega tre capsule facili da deglutire I Integratore omega 3 naturale da pesca sostenibile
07:57
NORSAN Olio di pesce Omega 3 Capsule 1×120 pz I 1.500 mg Fish Oil Omega 3 Ifos Senza ritorno di gusto I Omega tre capsule facili da deglutire I Integratore omega 3 naturale da pesca sostenibile29,90€28,40€
45%
Candy Rapido’ Lavastoviglie da Incasso 60 cm, 15 Coperti, 8 Programmi, Wi-Fi + BLE, App hOn, Smart Door, Partenza Ritardata 24h, Motore Inverter, Classe C, 59,7 x 55,5 x 81,8 cm, Bianca – CI 5C6F1A
07:54
Candy Rapido’ Lavastoviglie da Incasso 60 cm, 15 Coperti, 8 Programmi, Wi-Fi + BLE, App hOn, Smart Door, Partenza Ritardata 24h, Motore Inverter, Classe C, 59,7 x 55,5 x 81,8 cm, Bianca – CI 5C6F1A629,99€349,00€
20%  
Bosch SMV4ECX31E Serie 4, Lavastoviglie da incasso a scomparsa totale, Home Connect, Extra Clean zone: lavaggio intenso per lo sporco più ostinato, Diagnostica da remoto, TimeLight, 60 cm
07:54
Bosch SMV4ECX31E Serie 4, Lavastoviglie da incasso a scomparsa totale, Home Connect, Extra Clean zone: lavaggio intenso per lo sporco più ostinato, Diagnostica da remoto, TimeLight, 60 cm689,00€549,00€
5%
Caricatore for iPhone 14, 14 Pro, 14 Pro Max, 14 Plus, 13, 12, 11, XS, XR, X, SE,USB C Rapido Caricabatterie with 2M Cavo Spina Adattatore per Apple iPhone 13 Pro Max, 12 Mini, 11 ProPad
07:51
Caricatore for iPhone 14, 14 Pro, 14 Pro Max, 14 Plus, 13, 12, 11, XS, XR, X, SE,USB C Rapido Caricabatterie with 2M Cavo Spina Adattatore per Apple iPhone 13 Pro Max, 12 Mini, 11 ProPad10,99€10,44€
29%
Multicentrum Uomo 50+ Integratore Alimentare Multivitaminico Completo, con Vitamina D3, Supporto Contro la Stanchezza per Uomini oltre 50 anni, 30 Compresse
07:49
Multicentrum Uomo 50+ Integratore Alimentare Multivitaminico Completo, con Vitamina D3, Supporto Contro la Stanchezza per Uomini oltre 50 anni, 30 Compresse23,89€16,89€
5%
Anker Caricatore USB C rapido 735 (Nano II 65W) Pod a 3 Porte PPS, Alimentatore Compatto USB C per MacBook PRO, Air, iPad PRO, Steam Deck, Galaxy S20, dell XPS 13, Note 20, iPhone 17 Pro Max, 16, Pixel
07:49
Anker Caricatore USB C rapido 735 (Nano II 65W) Pod a 3 Porte PPS, Alimentatore Compatto USB C per MacBook PRO, Air, iPad PRO, Steam Deck, Galaxy S20, dell XPS 13, Note 20, iPhone 17 Pro Max, 16, Pixel23,99€22,79€
12%  
Cistit Act Forte, Integratore Alimentare che Favorisce la Funzionalità delle Vie Urinarie, a base di D-Mannosio, Vitamina C e Mirtilli Rossi, Senza Glutine, Senza Lattosio, 1 Confezione da 30 Capsule
07:47
Cistit Act Forte, Integratore Alimentare che Favorisce la Funzionalità delle Vie Urinarie, a base di D-Mannosio, Vitamina C e Mirtilli Rossi, Senza Glutine, Senza Lattosio, 1 Confezione da 30 Capsule5,85€5,17€
66%  
Lampada da Terra LED con Tavolino – 36 W dimmerabile con Telecomando e Touch, Testa Girevole 360°, 2700K-6500K, Lampada Moderna Nera per Soggiorno e Ufficio, 175 cm
07:44
Lampada da Terra LED con Tavolino – 36 W dimmerabile con Telecomando e Touch, Testa Girevole 360°, 2700K-6500K, Lampada Moderna Nera per Soggiorno e Ufficio, 175 cm126,09€43,42€
29%
ZMHPJQ 2M iPhone Cavo Caricatore USB C (Certificato MFI) 2pack cavetto di ricarica veloce di tipo C to lightning fast charger Cavi per apple iPhone14 13 12 Pro Max Mini, 11, XS, X, 8 Plus, 2020 SEpad
07:42
ZMHPJQ 2M iPhone Cavo Caricatore USB C (Certificato MFI) 2pack cavetto di ricarica veloce di tipo C to lightning fast charger Cavi per apple iPhone14 13 12 Pro Max Mini, 11, XS, X, 8 Plus, 2020 SEpad11,99€8,54€
38%  
ARMANDO Il Pacchero, Pasta di Semola di Grano Duro di Filiera 100% Italiano – 6 confezioni da 500 gr
07:42
ARMANDO Il Pacchero, Pasta di Semola di Grano Duro di Filiera 100% Italiano – 6 confezioni da 500 gr12,54€7,80€
28%
Soundcore P30i di Anker, auricolari senza fili con cancellazione del rumore forte e intelligente, bassi potenti, 45 ore di riproduzione, custodia e supporto per smartphone 2 in 1, IP54, Bluetooth 5.4
07:41
Soundcore P30i di Anker, auricolari senza fili con cancellazione del rumore forte e intelligente, bassi potenti, 45 ore di riproduzione, custodia e supporto per smartphone 2 in 1, IP54, Bluetooth 5.439,99€28,99€
13%
Apple AirPods 4 Auricolari wireless, Auricolari Bluetooth, Audio spaziale personalizzato, Resistenza al sudore e all’acqua, Custodia di ricarica USB-C, Chip H2, Fino a 24 ore di autonomia
07:39
Apple AirPods 4 Auricolari wireless, Auricolari Bluetooth, Audio spaziale personalizzato, Resistenza al sudore e all’acqua, Custodia di ricarica USB-C, Chip H2, Fino a 24 ore di autonomia149,00€129,00€
7%
Duracell Batterie Plus AAA (pacco da 8) – Pile Alcaline 1.5V – MN2400
07:36
Duracell Batterie Plus AAA (pacco da 8) – Pile Alcaline 1.5V – MN24009,59€8,90€

Scarica la nostra app e leggi le notizie in mobilità. Porta iSpazio sempre con te, anche su Telegram.
| Applicazione iOS
Con l'applicazione ufficiale di iSpazio resterai sempre aggiornato sulle notizie Apple, video tutorial per iPhone e tanto altro. riceverai una notifica per ogni nuovo articolo. Puoi utilizzare anche i Widget per tenere le novità sott'occhio nella Home o nella Lockscreen.
Scaricala subito!
| Canale Telegram 10.700+ Utenti
Su Telegram invece, segnaliamo soltanto le notizie più importanti ed urgenti oppure i nostri nuovi video su YouTube. E' un canale molto interessante, assolutamente non invasivo perchè non inviamo troppe push, e vi consigliamo di seguirci anche lì.
Unisciti a noi!
ispazio notifiche
iSpazio Tutorials
Seguici su Google News
Condividi Facebook Twitter Telegram WhatsApp Threads Email Copia Link
Articolo precedenteI Risultati di Pwn2Own: L’iPhone è lo smartphone più sicuro, il Mac OS X lo è molto meno.
Articolo successivo I Prossimi Chip ARM permetteranno una grafica come quella della XBox!

Articoli correlati

GUIDA ISPAZIO: come eliminare le mappe da un qualsiasi navigatore senza bisogno del Jailbreak

11 Ago 2009Commenta

Guida iSpazio: Eliminare le mappe superflue dal nuovo navigatore iGo My Way

10 Ago 2009Commenta

iSpazio Developer Program #12 – Creiamo il nostro primo gioco: Pong!

11 Mar 2009Commenta

Guida Sblocco Firmware 2.2 per iPhone / iPhone 3G ed iPod Touch con QuickPwn 2.2 – MAC

23 Nov 2008Commenta

Leggi o Aggiungi Commenti

Advertising

Da non perdere!

Un leak svela i nuovi colori dell’iPhone 18 Pro, ecco le prime immagini

17 Apr 2026

Quanti modelli di iPhone presenterà Apple questo autunno?

15 Apr 2026

iOS 26.5 beta 2 conferma l’arrivo della pubblicità su Mappe di Apple

13 Apr 2026

Apple rilascia iOS 26.5 beta 2 e tutti gli altri aggiornamenti per Mac, iPad e Apple Watch

13 Apr 2026

Gli articoli più letti

Offerte del giorno: Ecco i migliori sconti selezionati da iSpazio – 20 Aprile 2026

iOS 27 punterà tutto su personalizzazione e miglioramenti del Liquid Glass

Info su iSpazio
Info su iSpazio

iSpazio è il punto di riferimento italiano per tutti gli appassionati Apple. Dal 2007, sul nostro sito trovi notizie, recensioni e guide per imparare ad utilizzare al meglio iOS, l'iPhone e tutti gli altri dispostivi dell'azienda.

Contattaci
Pubblicità

Il Network
Il Network

L'esperienza maturata su iSpazio ci ha portati, con il tempo, a realizzare altri progetti ed aprire nuovi siti con tematiche strettamente correlate al nostro Blog principale.

Oggi, siamo i fieri proprietari di un Network composto da: iSpazio, Scontiamolo, Wallpapers Central e Teslers.

Link Rapidi
  • Chi siamo
  • Contattaci
  • Legal
  • Privacy Policy
  • Pubblicità su
© Copyright 2026 iSpazio SRL | Partita IVA: 10137091210
  • Chi siamo
  • Contattaci
  • Legal
  • Privacy Policy
  • Pubblicità su

Scrivi quello che vuoi cercare e premi Invio.