Книги за програмиране на игри на Java: Сравнителен преглед

Програмирането на игри е това, което ме вкара в компютрите преди около 15 години. Ако изобщо сте като мен, тогава вълшебната, ярко оцветена анимация, излъчвана от компютърните игри, ви привлича като молец на светло. Но да бъдеш очарован от компютърните игри (и вътрешността им) и да можеш да ги програмираш са съвсем две различни неща. Трябваше да науча занаята по трудния начин - като се взирах с часове в игри, докато не разберем как работят. В наши дни можете да изневерите и да предприемете пряк път: Вземете книга и просто се „съобразете“ с опитния програмист, който отхвърля целия си опит, съвети и трикове.

Като се има предвид, че някои книги за Java (вижте книгата на Laura Lemay, изброени по-долу в раздела „Ресурси“), днес искат да ви отведат по различни пътища, можете да направите по-лоши неща, отколкото да се доверите на бивш (комерсиален) програмист на игри да прегледа текущия налични книги за програмиране на Java игри.

Четири заглавия попаднаха на прага ми за този преглед:

  • Black Art of Java Game Programming , от Joel Fan, Eric Ries и Calin Tenitchi (Waite Group Press)

  • Програмиране на най- новите Java игри , от Нийл Бартлет, Стив Симкин и Крис Странк (Кориолис Груп Книги)

  • Разработване на Java Entertainment Applets , от Джон Уидърс (Wiley)

  • Научете се на програмиране на интернет игри с Java , от Майкъл Морисън (Sams.net)

Преди да прегледам подробно книгите, нека започнем с таблица, която ви дава птичи поглед върху основните им характеристики:

Таблица 1: Общ преглед на книги за програмиране на игри Java.

Заглавие (Издател) Цена (US $) Страници Глави (приложения) CD ROM? Автори Обект-ориентация Мрежов фокус за много потребители Фокус на Game Framework
Black Art of Java Game Programming (Waite) 49,99 933 20 (5) Да 3 ++

Много

добре

добре добре
Най-модерното програмиране на Java игри (Кориолис) 39,99 523 21 (2) Да 3

Много

добре

Много

добре

Много

добре

Разработване на Java Entertainment Applets (Wiley) 29.95 392 10 (0) Не 1 Бедно Бедно Средно аритметично
Научете се на програмиране на интернет игри с Java (Sams.net) 39,99 416 21 (3) Да 1 Средно аритметично добре Нито един

За да опише заглавията на таблицата, колоната „Обект-ориентация“ подчертава до каква степен авторът (ците) на съответната книга са използвали Java по начина, по който тя е предназначена: по обектно-ориентиран начин. Добрите книги за Java, независимо от фокуса им, налагат добри обектно-ориентирани практики. По-ниските книги използват Java, сякаш е C или Pascal - тоест по процедурен начин. Игрите са много добри кандидат-приложения, които се възползват от това, че са проектирани и внедрени с помощта на обектна ориентация, така че добрата книга с игри за Java е по-добре да бъде силна в OOA / OOD / OOP (OO анализ, дизайн, програмиране).

Колоната Networked Multi-User Focus подчертава доколко книгата се фокусира върху най-силния потенциал на Java за програмиране на игри: мрежови игри за много потребители

Колоната на Game Framework Focus подчертава до каква степен книгата разчита на рамка на играта за обяснение и разработване на програмиране на игри. Игровите рамки са най-съвременните приложни програмни интерфейси (API), които елиминират много от стандартните задачи, които всички игри трябва да изпълняват (управление на спрайтове, пребоядисване на екрана, водене на резултатите и т.н.).

Сега, погледнете книгите в детайли.

Програмиране на игри на Black Art of Java

Програмирането на игри Black Art of Java е една от тези книги от библейски тип - всичките 933 страници от нея. Книгата е логически структурирана в три части:

  1. "Основи на разработването на Java игри"
  2. „Разширени техники за игри и графики“
  3. "Галерия с игри"

Част 1, която е написана изцяло от главния автор на книгата (Джоел Фан), умело преплита трите нишки на Java, обект-ориентация и основи на програмиране на игри в едно ясно, освежаващо и последователно цяло.

Част 2 се фокусира върху мрежови и 3D техники. Една глава разработва система за управление на високи оценки от страна на сървъра, докато друга разработва цяла система за чат стая. И двете системи включват клиентски и сървърни програми (аплети и сървъри, с други думи). Единствените две глави, занимаващи се с 3D, се четат като книга в книга: В над 110 страници Калин Теничи прескача всички класически основи на 3D и във втората си глава анализира използването на голяма, но много добре проектирана рамка за 3D игри, наречена App3DCore. С официалния Java 3D API на хоризонта, тази част от книгата скоро ще бъде частично остаряла, въпреки че голяма част от рамката се занимава с аспекти на по-високо ниво от Java 3D, така че това не е проблем за книгата. Във всеки случай обяснението на вътрешността на такава 3D рамка е много просветляващо.

Част 3, Галерията с игри, съдържа осем глави, всяка от които развива цяла игра. Игрите се различават по сложност, което ми създаде впечатлението, че тази част от книгата е доста прибързано събрана. Индивидуалният дизайн и изпълнение на игрите обаче (като цяло) е със същото високо качество като останалата част от книгата. Има вектор-базиран клонинг на астероиди, Othello, уеб-базиран маджонг, хоризонтално превъртаща се, образователна игра за стрелба с думи, две различни игри с магически квадрат и въплъщение на класическата игра Worm (или Snake, ако предпочитате) .

Въпреки че книгата не е без своя дял от бъгове, грешки и т.н. (например една страница съдържа списък с кодове, който е изкривен невярващо), много ми хареса. Книгата има много силни и малко слабости. Той е силен за добрия анализ и дизайн на програмата. (А! Мислехте, че бихте могли да пропуснете тези етапи, само защото са игри? Грешно.) Книгата използва много ефективно различни видове диаграми (обектни диаграми, диаграми на класове, диаграми на потоци, диаграми на държавни машини, диаграми на прототипи на екрана и т.н.) и повечето кодови списъци са много четими. (Този аспект, подобно на стила на писане, варира от автор на автор. Това е неизбежната обратна страна на книги, написани от няколко автори.)

Програмиране на Java за най-модерни игри

Обикновено съм много скептичен към заглавията, започвайки с „Advanced“, „Cutting Edge“ и други подобни, просто защото обикновено не са! В случая с Cutting-Edge Java Game Programming , маркетинговият отдел на Кориолис не е направил нищо: Книгата определено не е за начинаещи или Java програмисти на средно ниво. Всъщност всички, с изключение на първата и последната глава на книгата, са посветени на задълбочен, недвусмислен анализ на дизайна и изпълнението на две игрови рамки. Първата рамка обслужва еднопотребителски (самостоятелни) игри, докато втората е насочена към интернет базирани игри за много потребители.

Глава 2 съдържа пълната реализация на цял клонинг на Asteroids, който може да се възпроизвежда, без трептене и използва плавна анимация и звук. И това само в 250 нечетни реда код - или само в 18 страници с книги! Следователно тази глава трябва да убеди всеки, че използването на игрови рамки и рамки като цяло е един от най-добрите начини за постигане на високи нива на продуктивност на програмиране чрез акцентиране върху повторното използване на дизайна, вместо повторното използване на кода (но в процеса също така повторното използване на планини от код).

Ако Глава 2 е ясен, обещаващ знак за високото качество на тази книга, то Глава 3 засилва това впечатление, като ни запознава с основната тема на книгата: задълбоченото изследване на (много) добре проектирана рамка на играта. Между другото, авторът обяснява какво представляват картите CRC (Class / Responsibilities / Collaborators), същността на диаграмите на клас Booch и диаграмите за взаимодействие на обектните съобщения. Между другото, това не е като запълване на страници, защото останалата част от книгата използва тези мощни инструменти за софтуерно инженерство, за да подобри текста!

Игралната рамка за един потребител, наречена GameWorks, се основава на изпитаната метафора за програмиране на игри на сцена, населена с актьори. Използвайки тази интуитивна абстракция, можете да внедрите всякакъв вид игра - от класически настолни игри до бързи, изпълнени с екшън аркадни игри. Бях леко разочарован, че авторите избраха игрите с карти като пример за стил на игра (предпочитам нещо, което кара адреналина да тече), въпреки че въпреки това успяват да вплетат всички стандартни въпроси и техники, и то експертно (наред с други: обработка на изображения, управление на входа, спрайтове, оптимизирано опресняване на екрана, аудио, произволност, изкуствен интелект).

Въпреки че книгата не е структурирана по части, трябваше да бъде. Има ясно превключване на фокуса от глава 15 нататък. Глава 15, „Програмиране на мрежови игри“, представлява определено преминаване към по-висока скорост, като нов автор е писател. След представянето на основните проблеми, свързани с мрежови игри (топологии на връзките, латентност, синхронизация на състоянието на играта), книгата разработва клонинг на риска, класическата стратегическа настолна игра (наречена Доминация в книгата). Доминирането е само оправдание за разработване на нова рамка на играта, адресираща общия клас на мрежови многопотребителски игри. Последните пет глави са трудни и силно подозирам, че читателите без известен опит за комуникация на данни няма да се чувстват добре с по-техническите аргументи. Но няма начин да пропуснете тези глави:Те съдържат много задълбочено третиране на критичните проблеми на десинхронизацията на състоянието на играта и проблемите с латентността, както и редица все по-сложни решения.

Книгата завършва с глава за оптимизиране на кода и интересна глава за дизайна на FRED, клонинг "Doom", написан на Java! FRED използва лъчево леене (да, в Java), за да постигне това класическо усещане "Doom" и тази основна техника е обяснена подробно.

За да обобщим, Програмирането на Java с най-модерни игри е отлично. Писането е ясно и актуално. Софтуерът, който авторите разработват, е с много високо качество. Списъците са ясни и четливи и не знам за вас, но след като прочетох програми на други хора в продължение на 15 години, не считам четимостта на изходния код за лукс).

Разработване на Java Entertainment Applets

Разработването на Java Entertainment Applets е много разочароваща книга. Ако издател ви е дал 400 страници, в които да натъпкате всичко, което знаете за програмиране на игри в Java (добре, добре, "Java En-ter-tain-ment App-lets"), тогава не започвате с глава, която повтаря, ad гадене, историята на Java. Или продължете с „Основи на Java“ (Глава 4), напълно излишно препрограмиране на основите на езика (променливи, Unicode, изрази, коментари, контролен поток, обекти, класове, пакети - вие го наречете!). Авторът все още не подозира, че може да се фокусира изцяло върху грешната тема, така че в Глава 5, „По-напреднали техники“, той продължава да работи с масиви, вектори, низове, изключения, многопоточност, аплети. Все по-горещо става главата 6, „Графика, звук и събития“. Но и тук ще бъдете трудно да намерите препратки към програмирането на игри. Вместо това, скъпоценен страница недвижими имоти е посветена ви донесат не по-малко от 13 на половин страница снимки на екрани на тривиалните резултатите от draw3DRect(), drawOval(), drawArc()и други подобни!

По средата на книгата (Глава 7, стр. 219) имаме първото появяване на някакъв код на Java игра , в този случай опит за игра на пасианс (решително, игрите с карти трябва да са в сезона). Дизайнът на играта, изпълнението на играта и четливостта на списъците са толкова по-ниски в сравнение със същите аспекти на другите книги в този преглед, че е ясно Разработването на Java Entertainment Applets има проблеми.

Някои забележителни изявления, направени от автора, и обща небрежност или злоупотреба с термини, които имат кристално ясен смисъл, само помага да се потопи тази книга, преди да има шанс да отплава. Механизмът за управление на оформлението на AWT е критикуван по следния начин: "Начинът, по който се обработва оформлението, е доста опростен. Не че няма смисъл и не е по основателна причина, но все още е развален." Приложният програмен интерфейс на Java също не е по вкуса на автора: "Начинът, по който Java се свързва с други места в мрежата, е нарушен и макар да не е напълно неизползваем, със сигурност не е много функционален в сегашното си състояние." Странно, бих се заклел, че другите и аз самият успяваме да създадем доста вълнуващи неща със същия този API (уеб робот,DAMPP - вижте ресурси по-долу за препратки към предишния ми JavaWorldстатии по тези теми). Последният цитат излиза от Глава 8, „Мултиплейър игри“, където въпреки това ни се показва „глупав малък пример“ (да цитираме книгата) под формата на приложение за чат. (Други примери за език, които ми е трудно да преглътна в тази книга, са „да си го циментирам в главата“ (стр. 283), „и плюене на неща над гнездото“ (стр. 284), да цитирам само два.)

Няма ли нещо добро да се каже за тази книга? Всъщност има: Глава 2, „Принципите на игровия дизайн“, е интересен анализ на това, което прави добрата игра добра. Тук авторът блести, като идентифицира няколко аспекта, които имат всички добри игри, като добре проектиран интерфейс на играта, достоверност (ниво на реализъм), адаптивност, AI и т.н. Следващата глава, "Game Design in Action", анализира някои реални игри и подчертава тяхното използване на добри елементи на игровия дизайн. След това има една голяма глава (Глава 9), посветена на проучване и използване на Gamelet Toolkit (игрална рамка за публично достояние, написана от Mark Tacchi, получила награда JavaCup International). Страхувам се, че тези три глави са единствените части от книгата, които си струват хартията, върху която са отпечатани.

Научете се на програмиране на интернет игри с Java

Сравнителните рецензии са трудни, защото рядко две (или повече) книги са в една и съща категория. Научете себе си Програмиране на интернет игри с Java , според задната му корица, се обръща към потребителите в категориите „нови“ до „случайни“. С други думи, начинаещи.