|
FAI DA TE IL TUO SIMULATORE DI GIOCO ELETTRONICO Molti spesso mi chiedono come programmo i miei simulatori. REQUISITI Per realizzare il vostro simulatore la prima cosa di cui avete bisogno è il videogioco che vorrete
replicare. Io lavoro con un PC con Pentium 166MMX, 32MB RAM, uno scanner da tavolo, una scheda audio SB16
compatibile e un microfono da poche lire. CAPITOLO UNO: acquisire le immagini Partiamo acquisendo con lo scanner le immagini del gioco elettronico. Ora dobbiamo scegliere il settaggio dei DPI (dots per inch) delle
scansioni. La maggior parte degli utenti di questi simulatori ha il desktop impostato ad 800x600, quindi la vostra immagine non deve essere più grande di
questa misura. Comunque, molto dipende dalle dimensioni del gioco elettronico. OK, detto questo possiamo passare alla fase di scansione. Gli schermi LCD normalmente hanno un filtro polarizzante, che dà una certa "direzione" agli sprites perche vengano visualizzati meglio. Posizionate il gioco in modo che la luce dello scanner provenga dal lato superiore del giochino (questo farà sì che i cristalli liquidi degli sprites vengano illuminati dalla giusta direzione!) Ora cercate di avere TUTTI gli sprites visualizzati. Ora controllate le immagini così acquisite. Sono abbastanza dettagliate? Se lo sono, andate al Capitolo 2, altrimenti leggete qui di seguito. Gli sprites possono sembrare troppo confusi e mescolati con lo sfondo; se vi sembra che sia
questo caso, aprite il gioco elettronico e cercate di piazzare un foglietto
di carta bianca rettangolare tra il fondo del gioco e lo schermo LCD.
Così facendo lo sfondo bianco crea un contrasto maggiore, che dovrebbe consentirvi di catturare MOLTI più dettagli! Se il gioco si serve di LED (o VFD) e non di LCD, questa procedura non servirà a nulla: la
luce dei LED disturberà lo scanner e otterrete delle immagini inutilizzabili. Usate una macchina fotografica digitale. CAPITOLO DUE: ritoccare le immagini acquisite Aprite tutte le immagini con un qualsiasi programma di disegno e controllatele bene. Ora prendete il colore di uno degli sprites (la funzione "dropper" di Paint Shop Pro) ed annotate le sue caratteristiche su un foglio di carta: questo sarà il vostro colore di riferimento per tutti gli sprites. Lo useremo dopo. Selezionate un colore vivo (rosso, blu... dipende dal livello di contrasto che gli sprites hanno sul fondale), poi prendete la funzione "pen" e ritracciate con quel colore tutti i contorni di ogni sprite. Questo può essere il lavoro più lungo e noioso, ma il risultato è garantito! Dopo aver tracciato ogni contorno, usate "fill" (riempimento) sullo sprite con il colore di riferimento, ma potreste anzi preferire di usare un colore leggermente più scuro per l'interno ed un colore leggermente più chiaro per il contorno (o viceversa): a voi l'ardua sentenza. Quando tutti gli sprites sono stati ritoccati, svuotate l'immagine così ottenuta, riempiendo di bianco ciò che no vi interessa. Selezionate un rettangolo che contenga tutti gli sprites ritoccati, poi copiatene ("copy") il contenuto negli appunti di Windows. Infine incollate ("paste") come "transparent selection" sull'immagine contenente il solo sfondo, sistemando il rettangolo nella giusta posizione! Ora potete salvare questa immagine come una sorta di sorgente per tutti i vostri sprites. A questo punto, avrete DUE immagini di sfondo quasi uguali: la prima senza alcuno sprite (chiamiamola BASE.BMP) e la seconda con tutto il set di LCD (chiamiamola SPRITES.BMP). Il prossimo passo è creare dei singoli files per ogni sprite: un'immagine
per ogni sprite. Ripetete questa procedura per ogni sprite e salvate tutti i files BMP in una singola cartella. Adesso potete mettervi al lavoro sulla musica... CAPITOLO TRE: acquisire e ripulire i suoni E' giunto il momento di usare il vostro microfono. Ora ascoltate i campioni registrati e controllateli tutti. Se il volume del file WAV è troppo
basso, potete alzarlo finché non raggiunge un livello adeguato, ma controllate
sempre che il suono non venga troppo distorto. Procediamo quindi con la pulizia del suono, usando un programma come GoldWave o CoolEdit. Spezzettate il file audio contenente più suoni, salvateli e otterrete alcuni WAV. Ogni WAV deve contenere un solo beep o una sola musichetta; notare che non ci deve essere silenzio tra l'inizio del file WAV ed il reale inizio del suono, altrimenti questo non sarà sincronizzato col gioco quando verrà suonato! Prendete nota della durata di ogni suono: è utile per misurare la velocità del gioco! Esempio: registrate alcuni beep-beep all'inizio della partita; quindi registrate altri beep-beep dopo cinque minuti. Se la velocità del gioco è aumentata, provate a misurare la lunghezza dei due WAV e avrete qualche informazione in più sulle routine che fanno diventare il gioco progressivamente più veloce. Potete anche utilizzare questo tipo di procedura per capire le differenza tra "game A" e "game B", che sono spesso diversi nella velocità di gioco. Semplice, no? Ora siete pronti per procedere con Delphi. CAPITOLO QUATTRO: preparare il form principale Prima di incominciare, settate la proprietà scaled del vostro form su "false", così non sarà ridimensionato da Windows nei computers di chi usa il desktop con "fonts grandi"; usate come risoluzione 96DPI. Non settate il formstyle su "resizable", ma usate "single" o "none" a vostra scelta, e poi fate sparire le icone maximize e minimize dalla barra superiore! Così facendo sarete sicuri che il form sarà sempre visto nella risoluzione corretta! Posizionate nel form l'immagine BASE.BMP, e lasciate che questa lo ricopra completamente. Adesso potete piazzare tutti gli sprites sul di essa. Aprite SPRITES.BMP con un programma di disegno (Paint Shop Pro va bene), e prendete nota sulle coordinate di ogni immagine; poi create tutte le immagini degli sprite LCD sull'immagine di base sul form Delphi, e assegnate loro le stesse coordinate che avevano in SPRITES.BMP. Spero che questo punto sia abbastanza chiaro. Potreste simulare la pressione dei bottoni usando un effetto grafico (bottone
che cambia colore alla pressione del tasto corrispondente). Dovrete allora prendere una parte di
BASE.BMP che contenga quel solo bottone, e salvarla come JPG separata
(con fattore di compressione dell'1%, chiamiamola BUTTON1.JPG). Questa
la userete per la procedura Image.OnMouseDown di quel pulsante. Potreste decidere che il simulatore possa venir trascinato sul desktop
cliccandoci sopra: fate una procedura Form.OnMouseDown ed una
Form.OnMouseMove. Queste procedure DEVONO essere associate ad
OGNI sprite sullo schermo LCD ed alla grafica
di background, ma NON ai bottoni o agli switch! CAPITOLO CINQUE: iniziare il gioco Avrete bisogno di molte variabili globali: modalità orologio/demo/gioco, punteggio, records, vite residue, livello corrente; ma dovrete anche definire alcune variabili per abilitare/disabilitare i controlli (che sono sempre legati agli eventi della partita) e per far capire al simulatore quando state giocando oquando il gioco è nella modalità "demo" o "orologio". Dovrete mettere TUTTE le inizializzazioni
richieste nella procedura Form.OnCreate: Create alcune procedure per simulare tutte le pressioni dei bottoni, poi
cominciate a lavorare sui "timers". CAPITOLO SEI: il componente TTimer Il componente TTimer è delle risorse più importanti per questo tipo
di programmazione. procedure Timer_ATimer (Sender: TObject); il risultato è che ogni 0.4 secondi l'immagine "Img_LeftSprite" passerà da visibile a invisibile e viceversa, ripetutamente. Ricordate: i timers possono essere attivi o inattivi,
dipende da che cosa volete fare con essi (proprietà enabled impostata
come vera=attiva o falsa=inattiva).
Ricordate anche che la proprietà interval può essere ridefinita
ogni volta che volete, permettendo ad un singolo
oggetto timer di avere durata variabile senza dovere usare un altro timer solo per avere
durata differente! CAPITOLO SETTE: il componente TMediaPlayer Se volete includere campioni dell'audio del gioco originale, il componente
TMediaPlayer è necessario. Dovrete nascondere il componente MediaPlayer, impostando la sua proprietà visible come falsa: vedere una barra di un MediaPlayer sul gioco non è per niente utile e ne rovinerebbe la grafica! Fate caricare e aprire ai MediaPlayes tutti i loro files WAV nella procedura Form.OnCreate in una volta sola: MPlay_MusicStart.FileName:='.\SOUND\START.WAV'; e così di seguito... Poi dovrete semplicemente piazzare istruzioni come MPlay_<????>.Play; dove <????> è il nome del file WAV da suonare durante quel certo momento del gioco. Questo tipo di istruzioni andranno messe all'interno delle diverse procedure di gioco, ogni volta che quel file WAV deve essere suonato. Facile no? CAPITOLO OTTO: muovere gli sprite del personaggio Per prima cosa , impostate la proprietà keypreview del form come vera, altrimenti le procedure Form.OnKeyPress, Form.OnKeyDown e Form.OnKeyUp non potranno essere utilizzate. Avete bisogno di queste procedure per controllare il movimento dello sprite del vostro personaggio. Potete usare Form.OnKeyDown e Form.OnKeyUp in combinazione o la Form.OnKeyPress
da sola, questo dipende dalle caratteristiche del gioco. La procedura Form.OnKeyDown deve contenere TUTTE le routines dei movimenti; se il vostro sprite può solamente muoversi da destra a sinistra e viceversa, la vostra procedura includerà qualcosa di simile a questo: if (GameStarted=true) and (Controls=true) then if key=VK_LEFT then if key=VK_RIGHT then la procedura Form.OnKeyUp serve solo a riportare la variabile Controls su vero (ma solo se si sta giocando ed il giocatore non si trova nel bel mezzo di una routine di errore o altro): if (GameStarted=true) and (Controls=false) then CAPITOLO NOVE: lavorare coi numeri LCD La conversione da numeri (Integer, interi) in una sequenza di numeri LCD (TImage, immagini) è abbastanza difficile, e richiede una buona conoscenza di alcune funzioni aritmetiche come mod e div. La prima cosa che dovete fare è piazzare le immagini dei numeri sul form,
e poi nasconderli (es: Number5.visible:=false;. NumberPosition2.picture:=Number5.picture; // (*) Il modo migliore di richiamare le immagini è associarle ad un array of TImage e dunque indicizzarle con dei numeri. procedure TForm1.FormCreate(Sender: TObject); così la precedente istruzione (*) diventa Number_Position2.picture:=Number_Array[5].picture; Il prossimo passo è quello di dividere il punteggio nelle sue unità, decine, centinaia e così di seguito: imparate ad usare le funzioni mod, div, ed eventualmente IntToStr e StrToInt: è tutto qua. CAPITOLO DIECI: conclusioni Spero vi sia piaciuto questo piccolo tutorial. La sua versione originale
era stata scritta in inglese, e dunque la sua forma può risultare un po' forzata in questa
traduzione. Spero tuttavia che le spiegazioni siano sufficientemente chiare. Se avete qualche domanda potete pure scrivermi, meglio se in italiano! ;) In bocca al lupo, amici programmatori! MADrigal |