Libri di programmazione di giochi Java: una recensione comparativa

La programmazione dei giochi è ciò che mi ha portato nei computer circa 15 anni fa. Se sei come me, allora l'animazione magica e dai colori vivaci che si irradia dai giochi per computer ti attrae come una falena alla luce. Ma essere affascinati dai giochi per computer (e dai loro componenti interni) ed essere in grado di programmarli sono due cose completamente diverse. Ho dovuto imparare il mestiere nel modo più duro, fissando i giochi per ore finché non si vedeva come funzionavano. In questi giorni puoi imbrogliare e prendere una scorciatoia: prendere un libro e semplicemente "fondere la mente" con il programmatore esperto che scarta tutta la sua esperienza, i suoi suggerimenti e trucchi.

Tenendo presente che alcuni libri Java (vedi il libro di Laura Lemay elencato di seguito nella sezione Risorse) in questi giorni vogliono condurti su strade completamente diverse, potresti fare cose peggiori che fidarti di un ex programmatore di giochi (commerciale) per rivedere l'attuale libri di programmazione di giochi Java disponibili.

Quattro titoli sono arrivati ​​alla mia porta per questa recensione:

  • Black Art of Java Game Programming , di Joel Fan, Eric Ries e Calin Tenitchi (Waite Group Press)

  • Programmazione di giochi Java all'avanguardia, di Neil Bartlett, Steve Simkin e Chris Stranc (Coriolis Group Books)

  • Sviluppo di applet di intrattenimento Java , di John Withers (Wiley)

  • Insegna a te stesso la programmazione di giochi su Internet con Java , di Michael Morrison (Sams.net)

Prima di rivedere i libri in dettaglio, iniziamo con una tabella che ti offre una visione a volo d'uccello delle loro principali caratteristiche:

Tabella 1: Panoramica dei libri di programmazione di giochi Java.

Titolo (editore) Prezzo (US $) Pages Capitoli (appendici) CD ROM? Autori Orientamento agli oggetti Focus multiutente in rete Focus Framework di gioco
Black Art of Java Game Programming (Waite) 49.99 933 20 (5) 3 ++

Molto

Buona

Buona Buona
Programmazione di giochi Java all'avanguardia (Coriolis) 39.99 523 21 (2) 3

Molto

Buona

Molto

Buona

Molto

Buona

Sviluppo di applet di intrattenimento Java (Wiley) 29.95 392 10 (0) No 1 Povero Povero Media
Insegna a te stesso la programmazione di giochi su Internet con Java (Sams.net) 39.99 416 21 (3) 1 Media Buona Nessuna

Per descrivere le intestazioni delle tabelle, la colonna Orientamento agli oggetti evidenzia fino a che punto gli autori del rispettivo libro hanno utilizzato Java nel modo in cui dovrebbe essere utilizzato: in modo orientato agli oggetti. I buoni libri Java, qualunque sia il loro obiettivo, impongono buone pratiche orientate agli oggetti. I libri inferiori usano Java come se fosse C o Pascal, cioè in modo procedurale. I giochi sono ottime applicazioni candidate che traggono vantaggio dall'essere progettate e implementate utilizzando l'orientamento agli oggetti, quindi un buon libro di giochi Java è meglio che sia forte su OOA / OOD / OOP (OO Analysis, Design, Programming).

La colonna Focus multiutente in rete evidenzia quanto il libro si concentri sul potenziale di programmazione di giochi più forte di Java: giochi multiutente in rete.

La colonna Game Framework Focus evidenzia fino a che punto il libro si basa su una struttura di gioco per spiegare e sviluppare la programmazione dei giochi. I framework di gioco sono API di gioco all'avanguardia che eliminano molte delle attività standard che tutti i giochi devono eseguire (gestione degli sprite, ridisegno dello schermo, tenuta del punteggio e così via).

Ora, uno sguardo ai libri in dettaglio.

Black Art of Java Game Programming

Black Art of Java Game Programming è uno di quei libri di tipo biblico - tutte le 933 pagine. Il libro è strutturato logicamente in tre parti:

  1. "Fondamenti dello sviluppo di giochi Java"
  2. "Tecniche grafiche e di gioco avanzate"
  3. "Galleria giochi"

La parte 1, scritta interamente dall'autore principale del libro (Joel Fan), intreccia sapientemente i tre fili tematici di Java, orientamento agli oggetti e fondamenti di programmazione di giochi in un insieme chiaro, rinfrescante e coerente.

La parte 2 si concentra sul networking e sulle tecniche 3D. Un capitolo sviluppa un sistema di gestione dei punteggi alti lato server, mentre un altro sviluppa un intero sistema di chat. Entrambi questi sistemi implicano programmi lato client e lato server (applet e server, in altre parole). Gli unici due capitoli che trattano del 3D si leggono come un libro all'interno di un libro: in oltre 110 pagine Calin Tenitchi analizza tutte le basi del 3D classico e, nel suo secondo capitolo, analizza l'uso di un framework di gioco 3D ampio ma molto ben progettato chiamato App3DCore. Con l'API Java 3D ufficiale all'orizzonte, questa parte del libro sarà presto parzialmente obsoleta, sebbene gran parte del framework si occupi di aspetti di livello superiore rispetto a Java 3D, quindi questo non è un problema per il libro. In ogni caso, avere spiegato gli interni di un simile framework 3D è molto illuminante.

La parte 3, la Galleria dei giochi, contiene otto capitoli, ognuno dei quali sviluppa un intero gioco. I giochi variano in sofisticazione, il che mi ha dato l'impressione che questa parte del libro sia stata messa insieme piuttosto frettolosamente. Tuttavia, il design individuale e l'implementazione dei giochi sono (nel complesso) della stessa alta qualità del resto del libro. C'è un clone di Asteroids basato su vettori, Otello, un Mahjong basato sul Web, un gioco di edutainment a scorrimento orizzontale e spara parole, due diversi giochi di quadrati magici e un'incarnazione del classico gioco Worm (o Snake, se preferisci) .

Sebbene il libro non sia privo di difetti, errori e così via (ad esempio, una pagina contiene un elenco di codici che è alterato oltre ogni immaginazione), mi è piaciuto molto. Il libro ha molti punti di forza e pochi punti deboli. È forte su una buona analisi e progettazione del programma. (Ah! Pensavi di poter saltare queste fasi solo perché sono giochi? Sbagliato.) Il libro utilizza vari tipi di diagrammi in modo molto efficace (diagrammi a oggetti, diagrammi di classe, diagrammi di flusso, diagrammi di macchine a stati, diagrammi di prototipi di schermo e così via) e la maggior parte degli elenchi di codici sono molto leggibili. (Questo aspetto, come lo stile di scrittura, varia da autore ad autore. Questo è l'inevitabile rovescio della medaglia di libri scritti da diversi autori.)

Programmazione di giochi Java all'avanguardia

Di solito sono molto scettico sui titoli che iniziano con "Advanced", "Cutting-Edge" e simili, semplicemente perché, di solito non lo sono! Nel caso della programmazione di giochi Java all'avanguardia , il reparto marketing di Coriolis non ha esaltato nulla: il libro sicuramente non è per principianti o programmatori Java di livello intermedio. In effetti, tutti i capitoli del libro, tranne il primo e l'ultimo, sono dedicati a un'analisi approfondita e concreta del design e dell'implementazione di due framework di gioco. Il primo framework si rivolge a giochi per utente singolo (stand-alone) mentre il secondo è orientato verso giochi multiutente basati su Internet.

Il Capitolo 2 racchiude l'implementazione completa di un intero clone di Asteroids che è riproducibile, senza sfarfallio e utilizza animazioni e suoni fluidi. E questo in sole 250 righe di codice dispari - o solo 18 pagine di un libro! Questo capitolo, quindi, dovrebbe convincere chiunque che usare framework di gioco, e framework in generale, è uno dei modi migliori per raggiungere alti livelli di produttività di programmazione accentuando il riutilizzo del design, piuttosto che il riutilizzo del codice (ma nel processo anche riutilizzando montagne di codice).

Se il Capitolo 2 è un segno chiaro e promettente dell'elevata qualità di questo libro, il Capitolo 3 rafforza questa impressione introducendoci al tema centrale del libro: l'esplorazione approfondita di una struttura di gioco (molto) ben progettata. Di passaggio, l'autore spiega cosa sono le carte CRC (Classe / Responsabilità / Collaboratori), l'essenza dei diagrammi delle classi di Booch e dei diagrammi di interazione dei messaggi oggetto. A proposito, non si tratta di riempire una pagina perché il resto del libro utilizza questi potenti strumenti di ingegneria del software per migliorare il testo!

Il framework di gioco per utente singolo, chiamato GameWorks, si basa sulla metafora della programmazione di gioco collaudata di un palcoscenico popolato da attori. Usando questa astrazione intuitiva, puoi implementare qualsiasi tipo di gioco, dai classici giochi da tavolo ai giochi arcade veloci e ricchi di azione. Sono rimasto un po 'deluso dal fatto che gli autori abbiano scelto i giochi di carte come stile di gioco di esempio (preferisco qualcosa che faccia scorrere l'adrenalina), sebbene riescano comunque a tessere tutti i problemi e le tecniche standard, e sapientemente (tra gli altri: elaborazione delle immagini, gestione input, sprite, aggiornamento schermo ottimizzato, audio, casualità, intelligenza artificiale).

Sebbene il libro non sia strutturato in parti, avrebbe dovuto esserlo. C'è un chiaro cambio di focus dal capitolo 15 in poi. Il capitolo 15, "Programmazione di giochi in rete", rappresenta un deciso passaggio a una marcia superiore, con un nuovo autore che si occupa della scrittura. Dopo aver introdotto le principali questioni relative ai giochi basati sulla rete (topologie di connessione, latenza, sincronizzazione dello stato del gioco), il libro sviluppa un clone di Risk, il classico gioco da tavolo di strategia (chiamato Domination nel libro). La dominazione è solo una scusa per sviluppare un nuovo framework di gioco che affronti la classe generica dei giochi multiutente abilitati alla rete. Questi ultimi cinque capitoli sono duri e sospetto fortemente che i lettori senza un background di comunicazione dati non si sentiranno a proprio agio con gli argomenti più tecnici. Ma non è possibile saltare questi capitoli:Contengono un trattamento molto approfondito delle questioni critiche della de-sincronizzazione dello stato del gioco e dei problemi di latenza, oltre a una serie di soluzioni sempre più sofisticate.

Il libro si conclude con un capitolo sull'ottimizzazione del codice e un interessante capitolo sulla progettazione di FRED, un clone di "Doom" scritto in Java! FRED usa il ray casting (sì, in Java) per ottenere quella sensazione classica di "Doom", e questa tecnica di base è spiegata in dettaglio.

Per riassumere, la programmazione di giochi Java all'avanguardia è eccellente. La scrittura è lucida e al punto. Il software sviluppato dagli autori è di altissima qualità. Gli elenchi sono chiari e leggibili e non so voi, ma dopo aver letto i programmi di altre persone per 15 anni, non considero la leggibilità del codice sorgente un lusso).

Sviluppo di applet di intrattenimento Java

Lo sviluppo di applet Java Entertainment è un libro molto deludente. Se un editore ti ha dato 400 pagine in cui stipare tutto ciò che sai sulla programmazione di giochi in Java (okay, okay, "Java En-ter-tain-ment App-let"), allora non inizi con un capitolo che ribadisce, Fino alla nausea, la storia di Java. Oppure continua con "Java Fundamentals" (Capitolo 4), un rimodellamento totalmente superfluo delle basi del linguaggio (variabili, Unicode, espressioni, commenti, flusso di controllo, oggetti, classi, pacchetti - lo chiami!). L'autore continua a non sospettare che potrebbe concentrarsi completamente sull'argomento sbagliato, quindi nel capitolo 5, "Tecniche più avanzate", continua con matrici, vettori, stringhe, eccezioni, multithreading, applet. Sempre più caldo è il capitolo 6, "Grafica, suoni ed eventi". Ma anche qui ti sarà difficile trovare riferimenti alla programmazione dei giochi. Invece, pag prezioso immobiliare è dedicata a fornire non meno di 13 half-page screenshot dei risultati banali della draw3DRect(), drawOval(), drawArc()e simili!

A metà del libro (Capitolo 7, pagina 219) abbiamo la prima apparizione di un codice di gioco Java , in questo caso, un tentativo del gioco di carte Solitaire (decisamente, i giochi di carte devono essere di stagione). Il design del gioco, l'implementazione del gioco e la leggibilità degli elenchi sono tutti così inferiori rispetto agli stessi aspetti degli altri libri in questa recensione che è chiaro che lo sviluppo di applet Java Entertainment ha problemi.

Alcune affermazioni notevoli fatte dall'autore, e una generale trascuratezza o uso improprio di termini che hanno un significato cristallino, aiutano solo ad affondare questo libro prima che abbia la possibilità di salpare. Il meccanismo di gestione del layout di AWT è criticato come segue: "Il modo in cui viene gestito il layout è piuttosto pasticciato. Non che non abbia senso e non sia per una buona ragione, ma è ancora pasticciato". Anche l'API di rete di Java non piace all'autore: "Il modo in cui Java si collega ad altre posizioni sulla rete è rotto e, sebbene non sia totalmente inutilizzabile, di sicuro non è molto funzionale nel suo stato attuale." Strano, avrei giurato che io e gli altri riusciamo a creare cose piuttosto eccitanti con la stessa API (Web crawler,DAMPP: vedere le risorse di seguito per i riferimenti al mio precedente JavaWorldarticoli su questi argomenti). Quest'ultima citazione viene dal Capitolo 8, "Multiplayer Gaming", dove ci viene comunque mostrato "un piccolo stupido esempio" (per citare il libro) sotto forma di un'applicazione di chat. (Altri esempi di linguaggio che trovo difficile da digerire in questo libro sono "cementarlo nella tua testa" (p. 283), "e sputare cose su una presa" (p. 284), per citarne solo due.)

Non c'è niente di buono da dire su questo libro? In realtà, c'è: il Capitolo 2, "I principi del game design", è un'analisi interessante di ciò che rende buono un buon gioco. Qui l'autore brilla identificando diversi aspetti che tutti i buoni giochi hanno, come un'interfaccia di gioco ben progettata, veridicità (livello di realismo), personalizzazione, intelligenza artificiale e così via. Il capitolo successivo, "Game Design in Action", analizza alcuni giochi reali e mette in evidenza il loro uso di buoni elementi di game design. Poi c'è un grande capitolo (Capitolo 9) dedicato allo studio e all'uso del Gamelet Toolkit (un framework di gioco di dominio pubblico, scritto da Mark Tacchi, che ha ricevuto un premio JavaCup International). Questi tre capitoli sono le uniche parti del libro che valgono la carta su cui sono stampati, temo.

Insegna a te stesso la programmazione di giochi su Internet con Java

Le recensioni comparative sono difficili perché raramente si trovano due (o più) libri esattamente nella stessa categoria. Insegna a te stesso La programmazione di giochi su Internet con Java , secondo la copertina posteriore, si rivolge agli utenti nelle categorie "nuove" e "casuali". Principianti, in altre parole.