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

    Altro flop per Apple: l’iPhone 16e vende poco, come l’iPhone Air

    13 Nov 2025

    Apple sta sviluppando 5 nuove funzioni satellitari per iPhone

    10 Nov 2025

    iPhone Air 2026 sarà dotato di due fotocamere posteriori? Secondo un leaker, sì

    6 Nov 2025

    Apple estende il programma di riparazione fai-da-te agli iPhone 17 e iPhone Air

    31 Ott 2025

    Teardown iPad Pro M5: iFixit scopre lo spazio per una seconda fotocamera frontale

    1 Nov 2025

    Il prossimo iPad mini potrebbe essere resistente all’acqua come l’iPhone

    29 Ott 2025

    Apple prepara quattro nuove app “pro” per iPad, tra cui Pixelmator Pro e Motion

    28 Ott 2025

    iPad Pro M6, in arrivo un nuovo sistema di raffreddamento a camera di vapore

    26 Ott 2025

    macOS 26.2 introduce “Edge Light”: il nuovo effetto che illumina il volto nelle videochiamate

    13 Nov 2025

    Gurman rivela quando usciranno i Mac mini e Mac Studio con chip M5

    10 Nov 2025

    MacBook Pro, OLED e nuovo design solo per le versioni M6 Pro e M6 Max

    10 Nov 2025

    Apple prepara il chip M5 Ultra per il Mac Studio, arriverà nel 2026

    5 Nov 2025

    L’app myVW di Volkswagen è ora disponibile su Apple Watch

    14 Nov 2025

    iOS 26.1 ti permette di chiudere gli anelli Attività anche se dimentichi di avviare un allenamento

    7 Nov 2025

    Apple rilascia macOS Tahoe 26.1, watchOS 26.1, tvOS 26.1, HomePod 26.1 e visionOS 26.1

    4 Nov 2025

    Come utilizzare le notifiche di ipertensione su Apple Watch in watchOS 26

    22 Ott 2025

    WhatsApp apre alle chat con app di terze parti: cosa cambia per gli utenti europei

    14 Nov 2025

    Google Search penalizza i siti e preoccupa gli editori, l’UE avvia un’indagine

    14 Nov 2025

    L’app myVW di Volkswagen è ora disponibile su Apple Watch

    14 Nov 2025

    Apple lancia il Mini Apps Partner Program: nuove regole e commissioni ridotte per le mini app

    14 Nov 2025

    WhatsApp apre alle chat con app di terze parti: cosa cambia per gli utenti europei

    14 Nov 2025

    Google Search penalizza i siti e preoccupa gli editori, l’UE avvia un’indagine

    14 Nov 2025

    L’app myVW di Volkswagen è ora disponibile su Apple Watch

    14 Nov 2025

    Apple lancia il Mini Apps Partner Program: nuove regole e commissioni ridotte per le mini app

    14 Nov 2025
  • 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
  • Casa e cucina
  • Elettronica
  • Informatica
43%
Yankee Candle Candela profumata in giara grande | Arancia piccante | Durata Fino a 150 Ore | Regali perfetti per le donne
09:35
Yankee Candle Candela profumata in giara grande | Arancia piccante | Durata Fino a 150 Ore | Regali perfetti per le donne34,90€19,99€
48%  
Beats Solo Buds — Auricolari Bluetooth Wireless | 18 ore di autonomia | Compatibilità Apple e Android | Microfono integrato – Grigio tempesta
09:35
Beats Solo Buds — Auricolari Bluetooth Wireless | 18 ore di autonomia | Compatibilità Apple e Android | Microfono integrato – Grigio tempesta89,95€47,00€
53%  
Beats Studio Pro – Cuffie Bluetooth wireless con cancellazione del rumore – Audio spaziale personalizzato, audio lossless USB-C, compatibilità con Apple e Android – Bianco opaco
09:35
Beats Studio Pro – Cuffie Bluetooth wireless con cancellazione del rumore – Audio spaziale personalizzato, audio lossless USB-C, compatibilità con Apple e Android – Bianco opaco399,95€189,00€
42%  
roborock QV 35A Set Robot Aspirapolvere, Antigroviglio, 8000Pa, Panno Sollevabile, Autolavaggio, Asciugatura ad Aria, Stazione Tutto in Uno, Evitare Ostacoli, Strategie di Pulizia dei Tappeti, Nero
09:35
roborock QV 35A Set Robot Aspirapolvere, Antigroviglio, 8000Pa, Panno Sollevabile, Autolavaggio, Asciugatura ad Aria, Stazione Tutto in Uno, Evitare Ostacoli, Strategie di Pulizia dei Tappeti, Nero599,99€349,99€
38%
Trust Ozaa Mouse Wireless Bluetooth + 2.4GHz, Mouse senza Fili Silenzioso Compatto, 60% Plastica Riciclata, Mouse Bluetooth Ricaricabile Laptop PC Computer Windows Android Mac – Blu
08:02
Trust Ozaa Mouse Wireless Bluetooth + 2.4GHz, Mouse senza Fili Silenzioso Compatto, 60% Plastica Riciclata, Mouse Bluetooth Ricaricabile Laptop PC Computer Windows Android Mac – Blu39,99€24,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!

iOS 26.2 rimuoverà la sincronizzazione del Wi-Fi tra iPhone e Apple Watch in Europa

6 Nov 2025

Apple rilascia iOS 26.1 per tutti: Ecco cosa cambia nel nuovo aggiornamento

3 Nov 2025

Whatsapp sbarca ufficialmente su Apple Watch

4 Nov 2025

iOS 26.2 beta 1: Tutte le novità raccolte in un solo articolo in continuo aggiornamento! [12]

5 Nov 2025
Advertising

Gli articoli più letti

iOS 27 introdurrà la più grande evoluzione di Apple Intelligence

Apple presenta iPhone Pocket, un nuovo modo per indossare l’iPhone ma.. occhio al prezzo!

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 2025 iSpazio SRL | Partita IVA: 10137091210
  • Chi siamo
  • Contattaci
  • Legal
  • Privacy Policy
  • Pubblicità su

Scrivi quello che vuoi cercare e premi Invio.