Ohjelmointi

Java-pelien ohjelmointikirjat: vertaileva katsaus

Pelien ohjelmointi on se, mikä sai minut tietokoneisiin noin 15 vuotta sitten. Jos olet ollenkaan minun kaltaiseni, niin taika, kirkkaanvärinen animaatio, joka säteilee tietokonepeleistä, houkuttelee sinua kuin koi valoon. Mutta tietokonepelien (ja niiden sisäisten) kiehtoo ja mahdollisuus ohjelmoida ne ovat kaksi erilaista asiaa. Minun piti oppia kauppa kovalla tavalla - tuijottamalla pelejä tuntikausia, kunnes pystyt katso miten he työskentelivät. Nykyään voit huijata ja tehdä pikakuvakkeen: Nosta kirja ja vain "mieli sulautuu" kokeneen ohjelmoijan kanssa, joka pilkkaa kaikki kokemuksensa, vinkkinsä ja temppunsa.

Kun otetaan huomioon, että jotkut Java-kirjat (katso Laura Lemay -kirja, joka on lueteltu alla Resurssit-osiossa) haluavat nykyään johtaa sinut eri poluille, voit tehdä pahempia asioita kuin luottaa entiseen (kaupalliseen) peliohjelmoijaan tarkastelemaan nykyistä saatavilla olevat Java-peliohjelmointikirjat.

Neljä otsikkoa laskeutui kotiovelleni tälle arvostelulle:

  • Java-pelien ohjelmoinnin musta taide, kirjoittaneet Joel Fan, Eric Ries ja Calin Tenitchi (Waite Group Press)

  • Huipputason Java-pelien ohjelmointi, Neil Bartlett, Steve Simkin ja Chris Stranc (Coriolis Group Books)

  • Java-viihdesovellusten kehittäminen, kirjoittanut John Withers (Wiley)

  • Opeta itsellesi Internet-peliohjelmointi Java-ohjelmalla, kirjoittanut Michael Morrison (Sams.net)

Ennen kuin tarkastelen kirjoja yksityiskohtaisesti, aloitetaan taulukosta, joka antaa lintuperspektiivin niiden pääominaisuuksista:

Taulukko 1: Java-pelien ohjelmointikirjojen yleiskatsaus.

Otsikko (kustantaja)Hinta (US $)SivutLuvut (liitteet)CD-ROM?KirjailijatKohde-suuntaVerkotettu monikäyttäjätarkennusPelikehyksen painopiste
Java-pelien ohjelmoinnin musta taide (Waite)49.9993320 (5)Joo3++

Erittäin

Hyvä

HyväHyvä
Huipputason Java-pelien ohjelmointi (Coriolis)39.9952321 (2)Joo3

Erittäin

Hyvä

Erittäin

Hyvä

Erittäin

Hyvä

Java-viihdesovellusten kehittäminen (Wiley)29.9539210 (0)Ei1HuonoHuonoKeskiverto
Opeta itsellesi Internet-peliohjelmointi Java-ohjelmalla (Sams.net)39.9941621 (3)Joo1KeskivertoHyväEi mitään

Taulukon otsikoiden kuvaamiseksi Objektin suuntaus -sarakkeessa korostetaan, missä määrin kirjojen kirjoittajat käyttivät Javaa tapaan, jolla sitä on tarkoitus käyttää: olio-orientoituneella tavalla. Hyvät Java-kirjat, riippumatta niiden painopisteestä, pakottavat hyvät olio-suuntautuneet käytännöt. Ala-arvoisissa kirjoissa käytetään Javaa ikään kuin se olisi C tai Pascal - toisin sanoen menettelytavalla. Pelit ovat erittäin hyviä ehdokasohjelmia, jotka hyötyvät siitä, että ne suunnitellaan ja toteutetaan olio-orientaatiolla, joten hyvä Java-pelikirja on parempi olla vahva OOA / OOD / OOP: lla (OO-analyysi, suunnittelu, ohjelmointi).

Verkostoitunut monikäyttäjän painopiste -sarakkeessa korostetaan, kuinka paljon kirjassa keskitytään Javan vahvimpiin pelien ohjelmointipotentiaaliin: verkottuneet, monen käyttäjän pelit.

Game Framework Focus -sarakkeessa korostetaan, missä määrin kirja nojaa pelikehykseen pelien ohjelmoinnin selittämiseksi ja kehittämiseksi. Pelikehykset ovat huippuluokan pelisovellusliittymiä, jotka eliminoivat monia vakiotehtäviä, jotka kaikkien pelien on suoritettava (sprite-hallinta, näytön uudelleenmaalaus, pisteiden pitäminen ja niin edelleen).

Katsokaa nyt kirjoja yksityiskohtaisesti.

Java-pelien ohjelmoinnin musta taide

Java-pelien ohjelmoinnin musta taide on yksi Raamatun tyyppisistä kirjoista - kaikki sen 933 sivua. Kirja on loogisesti jäsennelty kolmeen osaan:

  1. "Java-pelikehityksen perusteet"
  2. "Edistyneet peli- ja grafiikkatekniikat"
  3. "Peligalleria"

Osa 1, jonka on kirjoittanut kokonaan kirjan pääkirjailija (Joel Fan), kutoo taitavasti Java-aiheen, olio-orientaation ja pelien ohjelmoinnin perustekijät yhdeksi selkeäksi, virkistäväksi ja yhtenäiseksi kokonaisuudeksi.

Osa 2 keskittyy verkottumiseen ja 3D-tekniikoihin. Yksi luku kehittää palvelinpuolen korkean pistemäärän hallintajärjestelmän, kun taas toinen kehittää koko chat-huonejärjestelmän. Molemmat järjestelmät sisältävät asiakas- ja palvelinpuolen ohjelmia (toisin sanoen sovelmia ja palvelimia). Ainoat kaksi 3D: tä käsittelevää lukua lukevat kirjan sisällä olevan kirjan: Calin Tenitchi käy läpi yli 110 sivua kaikki klassiset 3D-perusteet ja analysoi toisessa luvussaan suuren, mutta hyvin suunnitellun 3D-pelikehyksen käyttöä nimeltä App3DCore. Kun virallinen Java 3D -sovellusliittymä on horisontissa, kirjan tämä osa on pian osittain vanhentunut, vaikka suuri osa puitteista käsittelee korkeamman tason näkökohtia kuin Java 3D, joten tämä ei ole kirjan ongelma. Joka tapauksessa tällaisen 3D-kehyksen sisäpuolen selittäminen on erittäin valaisevaa.

Osa 3, Peligalleria, sisältää kahdeksan lukua, joista jokainen kehittää koko pelin. Pelit vaihtelevat hienostuneisuudeltaan, mikä antoi minulle vaikutelman, että tämä kirjan osa on koottu melko hätäisesti. Pelien yksilöllinen suunnittelu ja toteutus on (kaiken kaikkiaan) kuitenkin yhtä korkealaatuista kuin muu kirja. Siellä on vektoripohjainen Asteroidien klooni, Othello, verkkopohjainen Mahjong, vaakasuorassa vieritys, sanaa ammuttava viihdepeli, kaksi erilaista maagisen neliön peliä ja klassisen Worm (tai Snake, jos haluat) pelin inkarnaatio. .

Vaikka kirja ei ole osa virheistä, virheistä ja niin edelleen (esimerkiksi yksi sivu sisältää koodiluettelon, joka on sekoitettu uskomattomasti), pidin siitä paljon. Kirjalla on monia vahvuuksia ja vähän heikkouksia. Se on vahva hyvässä ohjelma-analyysissä ja suunnittelussa. (Ah! Luulit voivasi ohittaa nämä vaiheet vain siksi, että ne ovat pelejä? Väärä.) Kirjassa käytetään erityyppisiä kaavioita erittäin tehokkaasti (objektikaaviot, luokkakaaviot, vuokaaviot, valtion konekaaviot, näytön prototyyppikaaviot ja niin edelleen) , ja suurin osa koodiluetteloista on hyvin luettavissa. (Tämä näkökohta, kuten kirjoitustyyli, vaihtelee tekijästä tekijään. Tämä on väistämätön kääntöpuoli useiden kirjoittajien kirjoittamista kirjoista.)

Huipputason Java-pelien ohjelmointi

Olen yleensä hyvin skeptinen otsikoista, jotka alkavat "Advanced", "Cutting-Edge" ja vastaavista, yksinkertaisesti siksi, että yleensä ne eivät ole! Siinä tapauksessa että Huipputason Java-pelien ohjelmointi, Corioliksen markkinointiosasto ei herättänyt mitään: Kirja ei todellakaan ole tarkoitettu aloittelijoille tai keskitason Java-ohjelmoijille. Itse asiassa kaikki lukuun ottamatta kirjan ensimmäistä ja viimeistä lukua on omistettu kahden pelikehyksen suunnittelun ja toteutuksen perusteelliselle, ei-hölynpölylle. Ensimmäinen kehys palvelee yhden käyttäjän (erillisiä) pelejä, kun taas toinen on suunnattu Internet-pohjaisiin, monen käyttäjän peleihin.

Luku 2 sisältää kokonaisen Asteroidi-kloonin täydellisen toteutuksen, joka on pelattavissa, välkkymätön ja käyttää tasaista animaatiota ja ääntä. Ja vain 250 parittomassa koodirivissä - tai vain 18 kirjan sivulla! Tämän luvun pitäisi siis vakuuttaa kuka tahansa, että pelikehysten ja yleisten kehysten käyttö on yksi parhaista tavoista saavuttaa korkeatasoinen ohjelmoinnin tuottavuus korostamalla suunnittelun uudelleenkäyttöä koodin uudelleenkäytön sijaan (mutta samalla uudelleenkäyttämällä vuoria koodi).

Jos luku 2 on selkeä, lupaava merkki tämän kirjan korkeasta laadusta, niin luku 3 vahvistaa tätä vaikutelmaa esittelemällä meidät kirjan pääteemaan: (erittäin) hyvin suunnitellun pelikehyksen perusteelliseen tutkimiseen. Kirjoittaja selittää ohimennen, mitkä ovat CRC (luokka / vastuualueet / yhteistyökumppanit) -kortit, Boochin luokkakaavioiden ja objektiviestien vuorovaikutustaulukoiden ydin. Muuten, tämä ei ole niin täyttö, koska loppuosa kirjaa käyttää näitä tehokkaita ohjelmistotekniikan työkaluja tekstin parantamiseen!

Yhden käyttäjän pelikehys, nimeltään GameWorks, perustuu kokeiltuun ja testattuun näyttelijöiden asuttaman pelin ohjelmointimetaforaan. Tämän intuitiivisen abstraktion avulla voit toteuttaa minkä tahansa tyyppisen pelin - klassisista lautapeleistä nopeisiin, vauhdikkaisiin arcade-peleihin. Olin hieman pettynyt siihen, että kirjoittajat valitsivat korttipelit esimerkkinä pelityylistä (mieluummin jotain, joka saa adrenaliinin virtaamaan), vaikka he kuitenkin onnistuvat kutomaan kaikki vakiokysymykset ja tekniikat, ja ammattitaidolla niin (muun muassa: kuvankäsittely, syötteen hallinta, spritit, optimoitu näytön päivitys, ääni, satunnaisuus, tekoäly).

Vaikka kirjaa ei ole rakennettu osien ympärille, sen olisi pitänyt olla. Kohdistus on selvästi vaihdettu luvusta 15 eteenpäin. Luku 15, "Verkkopelien ohjelmointi", edustaa selkeää vaihtoa korkeammalle vaihteelle uuden kirjoittajan kirjoittaessa. Esiteltyään verkkopeleihin liittyviä pääkysymyksiä (yhteyden topologiat, viive, pelitilojen synkronointi), kirjassa kehitetään riskiklooni, klassinen strateginen lautapeli (kirjassa nimeltään Domination). Ylivalta on vain tekosyy kehittää uusi pelikehys, joka vastaa verkon tukemien monen käyttäjän pelien yleisluokkaan. Nämä viisi viimeistä lukua ovat kovaa, ja epäilen vahvasti, että lukijat, joilla ei ole tietoliikenteen taustaa, eivät tunnu mukavammilta teknisempien argumenttien kanssa. Mutta ei ole mitään tapaa, jolla voit ohittaa nämä luvut: Ne sisältävät erittäin perusteellisen pelitilan synkronoinnin ja viiveongelmien kriittisten kysymysten käsittelyn sekä useita yhä kehittyneempiä ratkaisuja.

Kirjan lopussa on luku koodin optimoinnista ja mielenkiintoinen luku FRED: n, Java-kirjoitetun "Doom" -kloonin suunnittelusta! FRED käyttää säteenvalua (kyllä, Javalla) saavuttaakseen klassisen "Doom" -tunnelman, ja tämä ydintekniikka selitetään yksityiskohtaisesti.

Yhteenvetona Huipputason Java-pelien ohjelmointi on erinomainen. Kirjoitus on selkeä ja täsmällinen. Kirjoittajien kehittämät ohjelmistot ovat erittäin korkealaatuisia. Luettelot ovat selkeät ja luettavissa, enkä tiedä sinusta, mutta lukiessani muiden ihmisten ohjelmia 15 vuoden ajan en pidä lähdekoodien luettavuutta ylellisyytenä).

Java-viihdesovellusten kehittäminen

Java-viihdesovellusten kehittäminen on erittäin pettymys. Jos julkaisija antoi sinulle 400 sivua, johon voit täyttää kaiken, mitä tiedät Java-ohjelmointipeleistä (okei, okei, "Java En-ter-tain-ment App-lets"), et aloita luvusta, joka toistaa ad nauseam, Java-historia. Tai jatka kohdasta "Java Fundamentals" (luku 4), joka on täysin turha kielen perusteiden uudelleenmuokkaus (muuttujat, Unicode, lausekkeet, kommentit, ohjausvirta, objektit, luokat, paketit - sinä nimeät sen!). Kirjoittaja ei vieläkään epäile, että hän voisi keskittyä kokonaan väärään aiheeseen, joten luvussa 5, "Kehittyneemmät tekniikat", hän rytmittää taulukoilla, vektoreilla, merkkijonoilla, poikkeuksilla, monisäikeellä ja sovelmilla. Aina niin kuumemmaksi tulee luku 6, "Grafiikka, ääni ja tapahtumat". Mutta sinäkin on vaikea löytää viitteitä pelien ohjelmoinnista. Sen sijaan arvokkaiden sivujen kiinteistöt on omistettu tuomaan sinulle vähintään 13 puolisivun kuvakaappausta triviaalista tuloksesta draw3DRect (), drawOval (), drawArc () ja vastaavia!

Kirjan puolivälissä (luku 7, sivu 219) meillä on ensimmäinen Java-esiintyminen peli koodi, tässä tapauksessa yritys Solitaire-korttipelistä (korttipelien on ehdottomasti oltava kauden aikana). Pelin suunnittelu, pelin toteutus ja luetteloiden luettavuus ovat kaikki niin huonompia verrattuna tämän arvostelun muiden kirjojen samoihin näkökohtiin, että on selvää Java-viihdesovellusten kehittäminen on ongelmia.

Jotkut merkittävät kirjoittajan lausunnot ja yleinen huolimattomuus tai termien väärinkäyttö, joilla on kristallinkirkas merkitys, auttavat vain upottamaan tämän kirjan ennen kuin sillä on mahdollisuus purjehtia. AWT: n ulkoasunhallintamekanismia kritisoidaan seuraavasti: "Asettelun käsittelytapa on melko hajanainen. Ei sillä, että sillä ei ole järkeä eikä sillä ole hyvä syy, mutta se on silti hajotettu." Javan verkkoverkkosovellusliittymä ei myöskään ole kirjoittajan mieleen: "Tapa, jolla Java kiinnittää verkon muihin sijainteihin, on rikki, ja vaikka se ei ole täysin käyttökelvoton, se ei todellakaan ole kovin toimiva nykyisessä tilassaan." Outoa, olisin vannonut, että muut ja minä onnistumme luomaan melko jännittäviä asioita samalla API: lla (Web-indeksoija, DAMPP - katso alla olevista lähteistä viittauksia edelliseen JavaWorld artikkeleita näistä aiheista). Tämä viimeinen lainaus tulee luvusta 8, "Moninpeli", jossa meille kuitenkin näytetään "tyhmä pieni esimerkki" (kirjan lainaamiseksi) chat-sovelluksen muodossa. (Muita esimerkkejä kielestä, jota minun on vaikea niellä tässä kirjassa, ovat "sementoida se päähän" (s. 283), "ja asioiden sylkeminen pistorasiaan" (s. 284), lainaten vain kahta.)

Eikö tästä kirjasta ole mitään hyvää sanottavaa? Oikeastaan ​​on olemassa: Luku 2, "Pelisuunnittelun periaatteet", on mielenkiintoinen analyysi siitä, mikä tekee hyvästä pelistä hyvän. Kirjoittaja loistaa tässä tunnistamalla useita näkökohtia, jotka kaikilla hyvillä peleillä on, kuten hyvin suunniteltu peliliitäntä, todenmukaisuus (realismin taso), muokattavuus, tekoäly ja niin edelleen. Seuraava luku "Pelisuunnittelu toiminnassa" analysoi joitain todellisia pelejä ja korostaa niiden käyttöä hyvissä pelisuunnitteluelementeissä. Sitten on yksi iso luku (luku 9), joka on omistettu Gamelet Toolkitin (Mark Tacchin kirjoittaman julkisen pelikehyksen, joka sai JavaCup International -palkinnon) tutkimiseen ja käyttöön. Nämä kolme lukua ovat ainoat kirjan osat, jotka ansaitsevat paperin, johon ne on painettu.

Opeta itsellesi Internet-peliohjelmointi Java: lla

Vertailevat arvostelut ovat vaikeita, koska harvoin kaksi (tai enemmän) kirjaa on täsmälleen samassa luokassa. Opeta itsellesi Internet-peliohjelmointi Java: lla, takakannensa mukaan, osoite käyttäjille "uusi" - "rento" -luokkaan. Aloittelijat, toisin sanoen.

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