Programmering

Java-spilprogrammeringsbøger: En komparativ gennemgang

Spilprogrammering fik mig til computere for omkring 15 år siden. Hvis du overhovedet er som mig, tiltrækker den magiske, farvestrålende animation, der udstråler ud af computerspil, dig som en møl til lyset. Men at være fascineret af computerspil (og deres interne) og at kunne programmere dem er to forskellige ting i det hele taget. Jeg var nødt til at lære handel på den hårde måde - ved at stirre på spil i timevis, indtil du kunne se hvordan de arbejdede. I disse dage kan du snyde og tage en genvej: Saml en bog og bare "mind meld" med den erfarne programmør, der forkæler al sin erfaring, tip og tricks.

Med tanke på, at nogle Java-bøger (se Laura Lemay-bogen, der er anført nedenfor i afsnittet Ressourcer) i disse dage i det hele taget vil føre dig op ad forskellige stier, kan du gøre værre ting end at stole på en tidligere (kommerciel) spilprogrammerer til at gennemgå den nuværende tilgængelige Java-spilprogrammeringsbøger.

Fire titler landede lige ved døren til denne anmeldelse:

  • Black Art of Java Game Programmingaf Joel Fan, Eric Ries og Calin Tenitchi (Waite Group Press)

  • Banebrydende Java-spilprogrammeringaf Neil Bartlett, Steve Simkin og Chris Stranc (Coriolis Group Books)

  • Udvikling af Java Entertainment Appletsaf John Withers (Wiley)

  • Lær dig selv programmering af internetspil med Javaaf Michael Morrison (Sams.net)

Før jeg gennemgår bøgerne detaljeret, lad os starte med en tabel, der giver dig et fugleperspektiv af deres vigtigste egenskaber:

Tabel 1: Oversigt over programmeringsbøger til Java-spil.

Titel (udgiver)Pris (US $)siderKapitel (bilag)CD ROM?ForfattereObjektorienteringNetværksfokus for flere brugereGame Framework Focus
Black Art of Java Game Programming (Waite)49.9993320 (5)Ja3++

Meget

godt

godtgodt
Banebrydende Java-spilprogrammering (Coriolis)39.9952321 (2)Ja3

Meget

godt

Meget

godt

Meget

godt

Udvikling af Java Entertainment Applets (Wiley)29.9539210 (0)Ingen1FattigeFattigeGennemsnit
Lær dig selv programmering af internetspil med Java (Sams.net)39.9941621 (3)Ja1GennemsnitgodtIngen

For at beskrive tabeloverskrifterne fremhæver kolonnen Objektorientering, i hvilket omfang forfatter (e) til den respektive bog brugte Java, som den er beregnet til at blive brugt: på en objektorienteret måde. Gode ​​Java-bøger, uanset deres fokus, håndhæver god objektorienteret praksis. Underordnede bøger bruger Java som om det var C eller Pascal - det vil sige på en proceduremæssig måde. Spil er meget gode kandidatapplikationer, der drager fordel af at blive designet og implementeret ved hjælp af objektorientering, så en god Java-spilbog er bedre på OOA / OOD / OOP (OO-analyse, design, programmering).

Kolonnen Networked Multi-User Focus fremhæver, hvor meget bogen fokuserer på Java's stærkeste spilprogrammeringspotentiale: netværk, multi-user-spil.

Kolonnen Game Framework Focus fremhæver, i hvilket omfang bogen er afhængig af en spilramme for at forklare og udvikle programmering af spil. Spilrammer er avancerede spil-API'er, der eliminerer mange af de standardopgaver, som alle spil skal udføre (sprite-styring, maling af skærm igen, holdning af score osv.).

Se nu nærmere på bøgerne.

Black Art of Java Game Programming

Black Art of Java Game Programming er en af ​​disse bibeltypebøger - alle 933 sider. Bogen er logisk struktureret i tre dele:

  1. "Grundlæggende om Java-spiludvikling"
  2. "Avancerede spil- og grafikteknikker"
  3. "Spilgalleri"

Del 1, som er skrevet udelukkende af bogens hovedforfatter (Joel Fan), fletter fagmæssigt de tre emnetråde i Java, objektorientering og spilprogrammeringsfundamental i en klar, forfriskende og sammenhængende helhed.

Del 2 fokuserer på netværk og 3D-teknikker. Et kapitel udvikler et serversystems high score management system, mens et andet udvikler et helt chatrumssystem. Begge disse systemer indebærer programmer på klientsiden og serversiden (applets og servere, med andre ord). De eneste to kapitler, der beskæftiger sig med 3D, læses som en bog i en bog: Calin Tenitchi kryber igennem alle de klassiske 3D-basics på over 110 sider og analyserer i sit andet kapitel brugen af ​​en stor, men meget veldesignet 3D-spilramme kaldet App3DCore. Med den officielle Java 3D API i horisonten vil denne del af bogen snart være forældet, selvom meget af rammen beskæftiger sig med aspekter på højere niveau end Java 3D, så dette er ikke et problem for bogen. Under alle omstændigheder er det meget oplysende at få forklaret indersiden af ​​en sådan 3D-ramme.

Del 3, Game Gallery, indeholder otte kapitler, som hver især udvikler et helt spil. Spillene varierer i sofistikering, hvilket gav mig det indtryk, at denne del af bogen var temmelig hurtigt sammensat. Det individuelle design og implementering af spillene er (samlet set) af samme høje kvalitet som resten af ​​bogen. Der er en vektorbaseret asteroide-klon, Othello, en webbaseret Mahjong, et vandret-rullende, ordskydende edutainment-spil, to forskellige magiske firkantede spil og en inkarnation af det klassiske orm (eller slange, hvis du foretrækker det) spil .

Selvom bogen ikke er uden sin andel af fejl, fejl og så videre (for eksempel indeholder en side en kodeliste, der er uklart), kunne jeg godt lide den. Bogen har mange styrker og få svagheder. Det er stærkt på god programanalyse og design. (Ah! Du troede du kunne springe disse faser over bare fordi de er spil? Forkert.) Bogen bruger forskellige typer diagrammer meget effektivt (objektdiagrammer, klassediagrammer, flowdiagrammer, tilstandsmaskindiagrammer, skærmprototypediagrammer og så videre) , og de fleste af kodelisterne er meget læsbare. (Dette aspekt svinger ligesom skrivestilen fra forfatter til forfatter. Dette er den uundgåelige bagside af bøger skrevet af flere forfattere.)

Banebrydende Java-spilprogrammering

Jeg er normalt meget skeptisk over for titler, der starter med "Advanced", "Cutting-Edge" og lignende, simpelthen fordi de normalt ikke er det! I tilfælde af Banebrydende Java-spilprogrammering, Coriolis's marketingafdeling hype ikke noget op: Bogen er bestemt ikke for begyndere eller mellemliggende Java-programmerere. Faktisk er alle bortset fra det første og sidste kapitel i bogen viet til en dybtgående, no-nonsense analyse af design og implementering af to spilrammer. Den første ramme henvender sig til single-user (stand-alone) spil, mens den anden er rettet mod internetbaserede multi-user-spil.

Kapitel 2 pakker den komplette implementering af en hel Asteroids-klon, der kan afspilles, flimmerfri og bruger glat animation og lyd. Og det på kun 250 ulige kodelinjer - eller kun 18 bogsider! Dette kapitel burde derfor overbevise nogen om, at brug af spilrammer og rammer generelt er en af ​​de bedste måder at opnå høje niveauer af programmeringsproduktivitet ved at fremhæve genbrug af design snarere end genbrug af kode (men i processen også at genbruge bjerge af kode).

Hvis kapitel 2 er et klart og lovende tegn på denne bogs høje kvalitet, forstærker kapitel 3 dette indtryk ved at introducere os til kernens tema i bogen: den grundige udforskning af en (meget) veldesignet spilramme. I forbifarten forklarer forfatteren, hvad CRC (klasse / ansvar / samarbejdspartnere) kort er, essensen af ​​Booch klassediagrammer og interaktionsdiagrammer for objektbeskeder. Forresten er dette ikke så sidefyldning, fordi resten af ​​bogen bruger disse kraftfulde softwaretekniske værktøjer til at forbedre teksten!

Single-user-spilrammen, kaldet GameWorks, er baseret på den afprøvede og testede spilprogrammeringsmetafor for en scene befolket af skuespillere. Ved hjælp af denne intuitive abstraktion kan du implementere enhver form for spil - fra klassiske brætspil til hurtige, actionfyldte arkadespil. Jeg var lidt skuffet over, at forfatterne valgte kortspil som et eksempel på en spilstil (jeg foretrækker noget, der får adrenalinet til at flyde), selvom de alligevel formår at væve ind i alle standardproblemer og teknikker, og ekspertistisk (blandt andet: billedbehandling, input management, sprites, optimeret skærmopdatering, lyd, tilfældighed, kunstig intelligens).

Selvom bogen ikke er struktureret omkring dele, skulle det have været. Der er en klar skift af fokus fra kapitel 15 og fremefter. Kapitel 15, "Network Game Programming", repræsenterer et bestemt skift til et højere gear, hvor en ny forfatter skriver. Efter at have introduceret de vigtigste problemer omkring netværksbaserede spil (forbindelsestopologier, ventetid, spiltilstandssynkronisering) udvikler bogen en klon af risiko, det klassiske strategibrænsspil (kaldet Domination i bogen). Dominans er kun en undskyldning for at udvikle en ny spilramme, der adresserer den generiske klasse af netværksaktiverede multi-user-spil. Disse sidste fem kapitler er hårde, og jeg har stærkt mistanke om, at læsere uden noget datakommunikationsbaggrund ikke vil føle sig godt tilpas med de mere tekniske argumenter. Men der er ingen måde, du kan springe disse kapitler over: De indeholder en meget grundig behandling af de kritiske problemer med de-synkronisering af spiltilstand og latensproblemer samt en række stadig mere sofistikerede løsninger.

Bogen vinder ned med et kapitel om kodeoptimering og et interessant kapitel om designet af FRED, en "Doom" -klon skrevet i Java! FRED bruger ray casting (ja, i Java) for at opnå den klassiske "Doom" -følelse, og denne kerneteknik forklares detaljeret.

At opsummere, Banebrydende Java-spilprogrammering er fremragende. Skriften er klar og nøjagtig. Den software, som forfatterne udvikler, er af meget høj kvalitet. Fortegnelserne er klare og læselige, og jeg ved ikke noget om dig, men efter at have læst andres programmer i 15 år, betragter jeg ikke kildekodelæsbarhed som en luksus).

Udvikling af Java Entertainment Applets

Udvikling af Java Entertainment Applets er en meget skuffende bog. Hvis en udgiver gav dig 400 sider, hvor du kunne proppe alt, hvad du ved om programmering af spil i Java (okay, okay, "Java En -ter-tain-ment App-lets"), så starter du ikke med et kapitel, der gentager, ad kvalme, Java's historie. Eller fortsæt med "Java Fundamentals" (kapitel 4), en fuldstændig overflødig genopvaskning af sprogets grundlæggende (variabler, Unicode, udtryk, kommentarer, kontrolflow, objekter, klasser, pakker - du hedder det!). Forfatteren har stadig ikke mistanke om, at han måske fokuserer helt på det forkerte emne, så i kapitel 5, "Mere avancerede teknikker", droner han videre med arrays, vektorer, strenge, undtagelser, multithreading, applets. Kapitel 6, "Grafik, lyd og begivenheder" bliver stadig så lidt varmere. Men du bliver hårdt presset på at finde nogen referencer til spilprogrammering her, enten. I stedet er værdifuld sideejendom dedikeret til at bringe dig ikke mindre end 13 skærmbilleder på halv side af de trivielle resultater af draw3DRect (), drawOval (), drawArc () og lignende!

Halvvejs gennem bogen (kapitel 7, side 219) har vi den første optræden af ​​noget Java spil kode, i dette tilfælde et forsøg på Solitaire kortspil (bestemt, kortspil skal være i sæson). Spillets design, implementeringen af ​​spillet og læsbarheden af ​​listerne er alle så ringere end de samme aspekter af de andre bøger i denne anmeldelse, at det er klart Udvikling af Java Entertainment Applets har problemer.

Nogle bemærkelsesværdige udsagn fra forfatteren og en generel sløvhed eller misbrug af udtryk, der har krystalklar betydning, hjælper kun med at synke denne bog, før den har en chance for at sejle. AWTs mekanisme til layoutadministration kritiseres som følger: "Måden, hvorpå layout håndteres, er temmelig skævt. Ikke at det ikke giver mening og ikke med god grund, men det er stadig skævt." Java's netværks-API er heller ikke efter forfatterens smag: "Den måde, hvorpå Java tilslutter sig andre steder på nettet, er brudt, og selvom den ikke er helt ubrugelig, er den bestemt ikke særlig funktionel i sin nuværende tilstand." Mærkeligt, jeg ville have svoret, at andre og mig selv formår at skabe ret spændende ting med den samme API (webcrawler, DAMPP - se Ressourcer nedenfor for referencer til min tidligere JavaWorld artikler om disse emner). Det sidste citat kommer ud af kapitel 8, "Multiplayer Gaming", hvor vi alligevel får vist "et dumt lille eksempel" (for at citere bogen) i form af en chatapplikation. (Andre eksempler på sprog, som jeg har svært ved at sluge i denne bog, er "at cementere det i dit hoved" (s. 283), "og spytte ting over en stikkontakt" (s. 284) for at nævne kun to.)

Er der ikke noget godt at sige om denne bog? Faktisk er der: Kapitel 2, "Principperne for spildesign", er en interessant analyse af, hvad der gør et godt spil godt. Her skinner forfatteren ved at identificere flere aspekter, som alle gode spil har, som en veldesignet spilgrænseflade, sandhed (niveau af realisme), tilpasningsevne, AI osv. Det næste kapitel, "Game Design in Action", analyserer nogle rigtige spil og fremhæver deres brug af gode spildesignelementer. Derefter er der et stort kapitel (kapitel 9), der er afsat til en undersøgelse og brug af Gamelet Toolkit (en ramme om det offentlige domæne, skrevet af Mark Tacchi, der modtog en JavaCup International-pris). Disse tre kapitler er de eneste dele af bogen, der er værd at det papir, de er trykt på, er jeg bange for.

Lær dig selv programmering af internetspil med Java

Sammenlignende anmeldelser er hårde, fordi der sjældent er to (eller flere) bøger i nøjagtig samme kategori. Lær dig selv programmering af internetspil med Javaifølge bagcoveret henvender det sig til brugere i kategorierne "ny" til "afslappet". Begyndere, med andre ord.