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

    Il chip C2 dell’iPhone 18 Pro porterà tre vantaggi chiave rispetto all’iPhone 17

    13 Feb 2026

    Quasi uno smartphone attivo su quattro nel mondo è un iPhone

    11 Feb 2026

    Buone notizie: l’iPhone 18 Pro potrebbe non aumentare di prezzo

    11 Feb 2026

    Nuovo iPhone 17e atteso a breve: cosa cambia e cosa no

    9 Feb 2026

    Apple si prepara a lanciare i nuovi iPad entry-level e iPad Air, ma cambierà davvero qualcosa?

    9 Feb 2026

    Le spedizioni di iPad crescono nel quarto trimestre 2025, ma il 2026 preoccupa

    6 Feb 2026

    Apple rilascia nuovi aggiornamenti per vecchie versioni di iOS, macOS e watchOS

    3 Feb 2026

    Pixelmator Pro arriva su iPad con Apple Creator Studio: tutte le novità della nuova app

    29 Gen 2026

    Un bug del Finder su macOS Tahoe mette in luce un calo nella cura dell’interfaccia da parte di Apple

    13 Feb 2026

    Apple rilascia macOS Tahoe 26.3, watchOS 26.3 e tvOS 26.3

    11 Feb 2026

    I MacBook Pro con chip M5 Pro e M5 Max potrebbero arrivare nella prima settimana di marzo

    9 Feb 2026

    Nuovi chip M5 individuati nel codice beta di iOS 26.3

    5 Feb 2026

    Apple rilascia macOS Tahoe 26.3, watchOS 26.3 e tvOS 26.3

    11 Feb 2026

    Apple lancia la sfida del Mese del Cuore 2026 su Apple Watch

    11 Feb 2026

    Apple rilascia watchOS 11.6.2 con una correzione importante

    6 Feb 2026

    Apple rilascia nuovi aggiornamenti per vecchie versioni di iOS, macOS e watchOS

    3 Feb 2026

    Recensione OPPO Reno 15 Pro: compattezza, autonomia record e video finalmente “da iPhone”

    13 Feb 2026

    Un nuovo leak anticipa design e caratteristiche dell’iPhone 17e

    13 Feb 2026

    Un bug del Finder su macOS Tahoe mette in luce un calo nella cura dell’interfaccia da parte di Apple

    13 Feb 2026

    Google Foto rinnova l’interfaccia su iOS con una toolbar flottante

    13 Feb 2026

    Recensione OPPO Reno 15 Pro: compattezza, autonomia record e video finalmente “da iPhone”

    13 Feb 2026

    Un nuovo leak anticipa design e caratteristiche dell’iPhone 17e

    13 Feb 2026

    Un bug del Finder su macOS Tahoe mette in luce un calo nella cura dell’interfaccia da parte di Apple

    13 Feb 2026

    Google Foto rinnova l’interfaccia su iOS con una toolbar flottante

    13 Feb 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
  • Minimo Storico
  • Bellezza
  • Casa e cucina
  • Elettronica
  • Fai da te
  • Informatica
  • Moda
19%
Yaheetech Scrivania per PC da Ufficio Tavolo Porta Computer con Stampante Ruote Tavolo Salvaspazio Mobile con Ripiani Tastiera Scorrevole Scrittoio da Studio Nera 80 x 50 x 132 cm
08:37
Yaheetech Scrivania per PC da Ufficio Tavolo Porta Computer con Stampante Ruote Tavolo Salvaspazio Mobile con Ripiani Tastiera Scorrevole Scrittoio da Studio Nera 80 x 50 x 132 cm79,99€64,99€
60%
Cecotec Spazzola Ad Aria Calda Ceramiccare Airglam Black. 1400 W, Multifunzione 8 In 1, Ricciolo, Pettine, Asciuga ed Elimina L’Effetto Crespo, 3 Velocità, 3 Temperature, Rivestimento Ceramico.
08:31
Cecotec Spazzola Ad Aria Calda Ceramiccare Airglam Black. 1400 W, Multifunzione 8 In 1, Ricciolo, Pettine, Asciuga ed Elimina L’Effetto Crespo, 3 Velocità, 3 Temperature, Rivestimento Ceramico.225,90€89,90€
35%
ATUVOS Air Tag Pro Smart Tag Tracker per Android & iOS, Dual System Localizzatore Bluetooth Funziona con Google Funzioni Trova o Apple Dov’è APP, per Bagagli, Borse.Batteria Sostituibile. 4 pezzi Nero
08:27
ATUVOS Air Tag Pro Smart Tag Tracker per Android & iOS, Dual System Localizzatore Bluetooth Funziona con Google Funzioni Trova o Apple Dov’è APP, per Bagagli, Borse.Batteria Sostituibile. 4 pezzi Nero49,99€32,39€
13%  
Mini PC Gaming AMD Ryzen 7 H 255 (upgrade 8745HS, fino a 4,9 GHz), Mini PC barebone (NO DDR, NO SSD) supporta DDR5, PCIe 4.0 x4, USB4.0, LAN 2.5G, Quad Display 4K, OCuLink – Gaming, Ufficio e Business
08:20
Mini PC Gaming AMD Ryzen 7 H 255 (upgrade 8745HS, fino a 4,9 GHz), Mini PC barebone (NO DDR, NO SSD) supporta DDR5, PCIe 4.0 x4, USB4.0, LAN 2.5G, Quad Display 4K, OCuLink – Gaming, Ufficio e Business389,96€339,96€
44%  
adidas Homme SPORTSWEAR BASIC 3 STRIPES FLEECE TRACKSUIT, Black, XXL Tall
08:16
adidas Homme SPORTSWEAR BASIC 3 STRIPES FLEECE TRACKSUIT, Black, XXL Tall85,00€47,95€
40%
frient Interfaccia per contatore di elettricità 2, LED | Letture contatore wireless | Monitoraggio del consumo energetico | Interfaccia con impulsi LED | Zigbee | Homey, Home Assistant e SmartThings
08:11
frient Interfaccia per contatore di elettricità 2, LED | Letture contatore wireless | Monitoraggio del consumo energetico | Interfaccia con impulsi LED | Zigbee | Homey, Home Assistant e SmartThings49,95€29,87€
55%  
Cecotec Modella Capelli 8 Teste CeramicCare 8in1 AirGlam Gyro Champagne. 1500W, 110000RPM, Liscia, Modella e Arriccia i Capelli, Motore Brushless, Funzione Rotativa, Rivestimento Ceramico e Cheratina
08:06
Cecotec Modella Capelli 8 Teste CeramicCare 8in1 AirGlam Gyro Champagne. 1500W, 110000RPM, Liscia, Modella e Arriccia i Capelli, Motore Brushless, Funzione Rotativa, Rivestimento Ceramico e Cheratina149,00€66,90€
53%  
SEVERIN WK 4322 – Bollitore elettrico
08:01
SEVERIN WK 4322 – Bollitore elettrico29,99€13,99€

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!

Ancora problemi per Siri, alcune funzioni arriveranno solo con iOS 26.5 e iOS 27

12 Feb 2026

Apple rilascia iOS 26.3 e iPadOS 26.3: Ecco tutte le novità!

11 Feb 2026

iOS 27 sarà un aggiornamento prudente, più bug fix che grandi novità

9 Feb 2026

Apple si prepara a lanciare i nuovi iPad entry-level e iPad Air, ma cambierà davvero qualcosa?

9 Feb 2026

Gli articoli più letti

Recensione OPPO Reno 15 Pro: compattezza, autonomia record e video finalmente “da iPhone”

Un nuovo leak anticipa design e caratteristiche dell’iPhone 17e

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.