Programmering

Java-spillprogrammeringsbøker: En komparativ gjennomgang

Spillprogrammering fikk meg til datamaskiner for 15 år siden. Hvis du i det hele tatt er som meg, tiltrekker den magiske, fargerike animasjonen som stråler ut av dataspill deg som en møll til lyset. Men å bli fascinert av dataspill (og deres interne) og å kunne programmere dem er to forskjellige ting helt. Jeg måtte lære handelen på den harde måten - ved å stirre på spill i timevis til du kunne se hvordan de jobbet. I disse dager kan du jukse og ta en snarvei: Plukk opp en bok og bare "sinn meld" med den erfarne programmereren som forkaster all sin erfaring, tips og triks.

Med tanke på at noen Java-bøker (se Laura Lemay-boken som er oppført nedenfor i seksjonen Ressurser) i disse dager vil lede deg opp forskjellige veier helt, kan du gjøre verre ting enn å stole på en tidligere (kommersiell) spillprogrammerer for å gjennomgå tilgjengelige Java-programmeringsbøker.

Fire titler landet på dørstokken min for denne anmeldelsen:

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

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

  • Utvikling av Java Entertainment Applets, av John Withers (Wiley)

  • Lær deg selv Internett-programmering med Java, av Michael Morrison (Sams.net)

Før jeg gjennomgår bøkene i detalj, la oss starte med en tabell som gir deg et fugleperspektiv av deres viktigste egenskaper:

Tabell 1: Oversikt over Java Game Programming Books.

Tittel (Publisher)Pris (US $)SiderKapittel (vedlegg)CD ROM?ForfattereObjektorienteringNettverksbasert flerbrukerfokusGame Framework Focus
Black Art of Java Game Programming (Waite)49.9993320 (5)Ja3++

Veldig

God

GodGod
Banebrytende Java-spillprogrammering (Coriolis)39.9952321 (2)Ja3

Veldig

God

Veldig

God

Veldig

God

Utvikling av Java Entertainment Applets (Wiley)29.9539210 (0)Nei1FattigeFattigeGjennomsnitt
Lær deg selv Internett-programmering med Java (Sams.net)39.9941621 (3)Ja1GjennomsnittGodIngen

For å beskrive tabelloverskriftene fremhever kolonnen Objektorientering i hvilken grad forfatteren (e) til den respektive boken brukte Java slik den er ment å bli brukt: på en objektorientert måte. Gode ​​Java-bøker, uansett fokus, håndhever god objektorientert praksis. Underordnede bøker bruker Java som om det var C eller Pascal - det vil si på en prosessuell måte. Spill er veldig gode kandidatapplikasjoner som har nytte av å bli designet og implementert ved hjelp av objektorientering, så en god Java-spillbok er bedre på OOA / OOD / OOP (OO-analyse, design, programmering).

Kolonnen Networked Multi-User Focus fremhever hvor mye boken fokuserer på Java sitt sterkeste potensial for spillprogrammering: nettverksspill, multi-user-spill.

Game Framework Focus-kolonnen fremhever i hvilken grad boken er avhengig av et spillrammeverk for å forklare og utvikle spillprogrammering. Spillrammer er toppmoderne spill-API-er som eliminerer mange av de standardoppgavene som alle spill må utføre (sprite management, maling på skjermen, poengsum og så videre).

Nå, se på bøkene i detalj.

Black Art of Java Game Programming

Black Art of Java Game Programming er en av disse bibeltypene - alle 933 sider av den. Boken er logisk strukturert i tre deler:

  1. "Fundamentals of Java Game Development"
  2. "Avanserte spill- og grafikkteknikker"
  3. "Spillgalleri"

Del 1, som er skrevet helt av bokens hovedforfatter (Joel Fan), fletter fagmessig de tre fagtrådene til Java, objektorientering og spillprogrammeringsgrunnlag i en klar, forfriskende og sammenhengende helhet.

Del 2 fokuserer på nettverk og 3D-teknikker. Ett kapittel utvikler et server-side high score management system, mens et annet utvikler et helt chatteromssystem. Begge disse systemene innebærer programmer på klientsiden og serversiden (applets og servere, med andre ord). De eneste to kapitlene om 3D leses som en bok i en bok: På over 110 sider knuser Calin Tenitchi gjennom alle de klassiske 3D-grunnleggende og analyserer i sitt andre kapittel bruken av et stort, men veldig godt designet 3D-spillrammeverk App3DCore. Med den offisielle Java 3D API i horisonten, vil denne delen av boka snart være foreldet, selv om mye av rammeverket tar for seg aspekter på høyere nivå enn Java 3D, så dette er ikke noe problem for boken. I hvert fall er det veldig opplysende å få forklart innsiden av et slikt 3D-rammeverk.

Del 3, spillgalleriet, inneholder åtte kapitler, som hver utvikler et helt spill. Spillene varierer i raffinement, noe som ga meg inntrykk av at denne delen av boka var ganske raskt satt sammen. Den individuelle utformingen og implementeringen av spillene er (samlet) av samme høye kvalitet som resten av boka. Det er en vektorbasert asteroider-klon, Othello, et nettbasert Mahjong, et horisontalt rullende, ordskytende edutainment-spill, to forskjellige magiske firkantede spill og en inkarnasjon av det klassiske ormen (eller Snake, hvis du foretrekker det) .

Selv om boken ikke er uten sin andel av feil, feil og så videre (for eksempel inneholder en side en kodeliste som er uoversiktlig), likte jeg den mye. Boken har mange styrker og få svakheter. Det er sterkt på god programanalyse og design. (Ah! Du trodde du kunne hoppe over disse trinnene bare fordi de er spill? Feil.) Boken bruker forskjellige typer diagrammer veldig effektivt (objektdiagrammer, klassediagrammer, flytskjemaer, tilstandsdiagrammer, skjermprototypediagrammer og så videre) , og de fleste av kodelistene er veldig lesbare. (Dette aspektet, som skrivestilen, svinger fra forfatter til forfatter. Dette er den uunngåelige baksiden av bøker skrevet av flere forfattere.)

Banebrytende Java-spillprogrammering

Jeg er vanligvis veldig skeptisk til titler som begynner med "Advanced", "Cutting-Edge" og lignende, rett og slett fordi de vanligvis ikke er det! I tilfelle av Banebrytende Java-spillprogrammering, Coriolis markedsavdeling sprang ikke noe: Boken er definitivt ikke for nybegynnere eller Java-programmerere på mellomnivå. Faktisk er alle bortsett fra det første og siste kapitlet i boken viet til en grundig, ikke-tull-analyse av utformingen og implementeringen av to spillrammer. Det første rammeverket henvender seg til spill for enkeltbrukere (frittstående) mens det andre er rettet mot Internett-baserte spill for flere brukere.

Kapittel 2 pakker den komplette implementeringen av en hel Asteroids-klon som er spillbar, flimmerfri og bruker jevn animasjon og lyd. Og det på bare 250 rare linjer med kode - eller bare 18 boksider! Dette kapittelet burde derfor overbevise alle om at bruk av spillrammer, og rammer generelt, er en av de beste måtene å oppnå høye nivåer av programmeringsproduktivitet ved å fremheve gjenbruk av design, i stedet for gjenbruk av kode (men i prosessen også å gjenbruke fjell av kode).

Hvis kapittel 2 er et tydelig og lovende tegn på denne bokens høye kvalitet, så forsterker kapittel 3 inntrykket ved å introdusere oss for kjernetemaet til boken: den grundige utforskningen av et (veldig) godt designet spillrammeverk. I forbifarten forklarer forfatteren hva CRC (klasse / ansvar / samarbeidspartnere) -kort er, essensen av Booch klassediagrammer og interaksjonsdiagrammer for objektmeldinger. Forresten, dette er ikke like sidefylling fordi resten av boka bruker disse kraftige programvaretekniske verktøyene for å forbedre teksten!

Enbrukerens spillrammeverk, kalt GameWorks, er basert på den prøvde og testede spillprogrammeringsmetaforen til en scene befolket av skuespillere. Ved å bruke denne intuitive abstraksjonen kan du implementere alle typer spill - fra klassiske brettspill til raske, actionfylte arkadespill. Jeg var litt skuffet over at forfatterne valgte kortspill som et eksempel på spillstil (jeg foretrekker noe som får adrenalinet til å flyte), selv om de likevel klarer å flette inn alle standardproblemer og teknikker, og fagmessig så (blant annet: bildebehandling, inngangshåndtering, sprites, optimalisert skjermoppdatering, lyd, tilfeldighet, kunstig intelligens).

Selv om boka ikke er strukturert rundt deler, burde den ha vært det. Det er en klar fokusbytte fra kapittel 15 og utover. Kapittel 15, "Network Game Programming," representerer et klart skifte til et høyere gir, med en ny forfatter som skriver. Etter å ha introdusert de viktigste problemene rundt nettverksbaserte spill (tilkoblingstopologier, ventetid, spilltilstandssynkronisering), utvikler boken en klone av Risk, det klassiske strategibordspillet (kalt Domination in the book). Dominans er bare en unnskyldning for å utvikle et nytt spillrammeverk som adresserer den generiske klassen av nettverksaktiverte spill for flere brukere. Disse siste fem kapitlene er tøffe, og jeg mistenker sterkt at lesere uten noe datakommunikasjonsbakgrunn ikke vil føle seg komfortable med de mer tekniske argumentene. Men det er ingen måte du kan hoppe over disse kapitlene: De inneholder en veldig grundig behandling av de kritiske problemene med spilltilstands-de-synkronisering og latensproblemer, samt en rekke stadig mer sofistikerte løsninger.

Boken vinder av med et kapittel om kodeoptimalisering og et interessant kapittel om utformingen av FRED, en "Doom" -klon skrevet på Java! FRED bruker ray casting (ja, på Java) for å oppnå den klassiske "Doom" -følelsen, og denne kjerneteknikken blir forklart i detalj.

Å oppsummere, Banebrytende Java-spillprogrammering er utmerket. Skriften er klar og til-det-punktet. Programvaren som forfatterne utvikler er av meget høy kvalitet. Oppføringene er klare og lesbare, og jeg vet ikke om deg, men etter å ha lest andres programmer i 15 år, ser jeg ikke på kildekodelesbarhet som en luksus).

Utvikling av Java Entertainment Applets

Utvikling av Java Entertainment Applets er en veldig skuffende bok. Hvis en forlegger ga deg 400 sider der du kan stappe alt du vet om programmering av spill i Java (ok, ok, "Java En-ter-tain-ment App-lets"), så begynner du ikke med et kapittel som gjentar, annonse kvalme, historien til Java. Eller fortsett med "Java Fundamentals" (kapittel 4), en helt overflødig oppvask av grunnleggende språk (variabler, Unicode, uttrykk, kommentarer, kontrollflyt, objekter, klasser, pakker - du heter det!). Forfatteren mistenker fortsatt ikke at han kan fokusere helt på feil emne, så i kapittel 5, "Mer avanserte teknikker", droner han videre med arrays, vektorer, strenger, unntak, multitråding, applets. Kapittel 6, "Grafikk, lyd og hendelser", blir stadig litt varmere. Men du vil bli hardt presset for å finne noen referanser til spillprogrammering her, heller. I stedet er dyrebare eiendommer viet til å gi deg ikke mindre enn 13 halvsides skjermbilder av de trivielle resultatene av draw3DRect (), drawOval (), drawArc () o.l!

Halvveis i boka (kapittel 7, side 219) har vi første utseende av noe Java spill kode, i dette tilfellet et forsøk på kortspillet Solitaire (bestemt, kortspill må være i sesong). Spillets utforming, implementeringen av spillet og lesbarheten til oppføringene er alle så dårligere enn de samme sidene i de andre bøkene i denne anmeldelsen at det er klart Utvikling av Java Entertainment Applets har problemer.

Noen bemerkelsesverdige uttalelser fra forfatteren, og en generell slurv eller misbruk av termer som har krystallklar betydning, hjelper bare til å senke denne boken før den har sjansen til å seile. AWTs mekanisme for layoutadministrasjon blir kritisert som følger: "Måten layouten håndteres på er ganske botched up. Ikke at det ikke gir mening og ikke med god grunn, men det er fortsatt botched up." Java's nettverks-API er heller ikke etter forfatterens smak: "Måten Java kobler seg til andre steder på nettet er ødelagt, og selv om den ikke er helt ubrukelig, er den sikkert ikke veldig funksjonell i sin nåværende tilstand." Merkelig, jeg ville ha sverget at andre og meg selv klarer å lage ganske spennende ting med den samme APIen (webcrawler, DAMPP - se Ressurser nedenfor for referanser til min forrige JavaWorld artikler om disse temaene). Det siste sitatet kommer ut av kapittel 8, "Multiplayer Gaming", hvor vi likevel blir vist "et dumt lite eksempel" (for å sitere boka) i form av en chat-applikasjon. (Andre eksempler på språk som jeg synes er vanskelig å svelge i denne boka er "å sementere det i hodet" (s. 283), "og spytte ting over en stikkontakt" (s. 284), for å sitere bare to.)

Er det ikke noe godt å si om denne boka? Egentlig er det: Kapittel 2, "The Principles of Game Design", er en interessant analyse av hva som gjør et godt spill bra. Her skinner forfatteren ved å identifisere flere aspekter som alle gode spill har, som et godt designet spillgrensesnitt, sannhet (nivå av realisme), tilpassbarhet, AI og så videre. Neste kapittel, "Game Design in Action", analyserer noen virkelige spill og fremhever bruken av gode spilldesignelementer. Deretter er det ett stort kapittel (kapittel 9) viet til en studie og bruk av Gamelet Toolkit (et rammeverk for offentlig domene, skrevet av Mark Tacchi, som mottok en JavaCup International-pris). Disse tre kapitlene er de eneste delene av boken som er verdt papiret de er trykt på, er jeg redd.

Lær deg selv Internett-programmering med Java

Sammenlignende anmeldelser er tøffe fordi sjelden er to (eller flere) bøker i nøyaktig samme kategori. Lær deg selv Internett-programmering med Java, ifølge baksiden, henvender seg til brukere i kategoriene "ny" til "uformell". Nybegynnere, med andre ord.

$config[zx-auto] not found$config[zx-overlay] not found