Livres de programmation de jeux Java: une revue comparative

La programmation de jeux est ce qui m'a fait découvrir les ordinateurs il y a 15 ans. Si vous êtes comme moi, alors l'animation magique et aux couleurs vives qui rayonne des jeux informatiques vous attire comme un papillon de nuit. Mais être fasciné par les jeux informatiques (et leurs composants internes) et pouvoir les programmer sont deux choses tout à fait différentes. J'ai dû apprendre le métier à la dure - en regardant les jeux pendant des heures jusqu'à ce que vous puissiez voir comment ils fonctionnaient. Ces jours-ci, vous pouvez tricher et prendre un raccourci: prenez un livre et juste «mélangez l'esprit» avec le programmeur expérimenté qui dégorge toute son expérience, ses trucs et astuces.

En gardant à l'esprit que certains livres Java (voir le livre de Laura Lemay répertorié ci-dessous dans la section Ressources) ces jours-ci veulent vous guider sur des chemins différents, vous pourriez faire des choses pires que de faire confiance à un ancien programmeur de jeux (commercial) pour revoir le livres de programmation de jeux Java disponibles.

Quatre titres ont atterri à ma porte pour cette revue:

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

  • Programmation de jeux Java de pointe , par Neil Bartlett, Steve Simkin et Chris Stranc (Coriolis Group Books)

  • Développer des applets de divertissement Java , par John Withers (Wiley)

  • Enseignez-vous à la programmation de jeux Internet avec Java , par Michael Morrison (Sams.net)

Avant de passer en revue les livres en détail, commençons par un tableau qui vous donne une vue d'ensemble de leurs principales caractéristiques:

Tableau 1: Présentation des manuels de programmation de jeux Java.

Titre (éditeur) Prix ​​(US $) Des pages Chapitres (annexes) CD ROM? Auteurs Orientation objet Focus multi-utilisateurs en réseau Focus sur le cadre de jeu
Black Art of Java Game Programming (Waite) 49,99 933 20 (5) Oui 3 ++

Très

Bien

Bien Bien
Programmation de jeux Java de pointe (Coriolis) 39,99 523 21 (2) Oui 3

Très

Bien

Très

Bien

Très

Bien

Développement d'applets de divertissement Java (Wiley) 29,95 392 10 (0) Non 1 Pauvres Pauvres Moyenne
Enseignez-vous à la programmation de jeux Internet avec Java (Sams.net) 39,99 416 21 (3) Oui 1 Moyenne Bien Aucun

Pour décrire les en-têtes de tableau, la colonne Orientation-objet met en évidence dans quelle mesure le ou les auteurs du livre respectif ont utilisé Java de la manière dont il est censé être utilisé: de manière orientée objet. Les bons livres Java, quel que soit leur objectif, imposent de bonnes pratiques orientées objet. Les livres inférieurs utilisent Java comme s'il s'agissait de C ou de Pascal - c'est-à-dire de manière procédurale. Les jeux sont de très bonnes applications candidates qui bénéficient d'être conçues et implémentées en utilisant l'orientation objet, donc un bon livre de jeux Java a intérêt à être fort sur OOA / OOD / OOP (OO Analysis, Design, Programming).

La colonne Networked Multi-User Focus souligne à quel point le livre se concentre sur le plus fort potentiel de programmation de jeux Java: les jeux multi-utilisateurs en réseau.

La colonne Game Framework Focus souligne dans quelle mesure le livre s'appuie sur un framework de jeu pour expliquer et développer la programmation de jeux. Les frameworks de jeu sont des API de jeu à la pointe de la technologie qui éliminent de nombreuses tâches standard que tous les jeux doivent effectuer (gestion des sprites, repeindre l'écran, comptabilisation des scores, etc.).

Maintenant, regardez les livres en détail.

Black Art of Java Game Programming

Black Art of Java Game Programming est l'un de ces livres de type Bible - dont les 933 pages. Le livre est structuré logiquement en trois parties:

  1. "Principes de base du développement de jeux Java"
  2. "Techniques avancées de jeu et de graphisme"
  3. "Galerie de jeux"

La partie 1, qui est entièrement écrite par l'auteur principal du livre (Joel Fan), tisse de manière experte les trois thèmes de base de Java, de l'orientation objet et de la programmation de jeux en un tout clair, rafraîchissant et cohérent.

La partie 2 se concentre sur le réseautage et les techniques 3D. Un chapitre développe un système de gestion des scores élevés côté serveur tandis qu'un autre développe un système complet de salle de discussion. Ces deux systèmes impliquent des programmes côté client et côté serveur (applets et serveurs, en d'autres termes). Les deux seuls chapitres traitant de la 3D se lisent comme un livre dans un livre: en plus de 110 pages, Calin Tenitchi examine toutes les bases classiques de la 3D et, dans son deuxième chapitre, analyse l'utilisation d'un cadre de jeu 3D grand mais très bien conçu appelé App3DCore. Avec l'API officielle Java 3D à l'horizon, cette partie du livre sera bientôt partiellement obsolète, bien qu'une grande partie du framework traite d'aspects de plus haut niveau que Java 3D, donc ce n'est pas un problème pour le livre. Quoi qu'il en soit, il est très instructif d'expliquer l'intérieur d'un tel cadre 3D.

La troisième partie, la Game Gallery, contient huit chapitres, dont chacun développe un jeu entier. Les jeux varient en sophistication, ce qui m'a donné l'impression que cette partie du livre a été préparée à la hâte. La conception et la mise en œuvre individuelles des jeux sont (dans l'ensemble) de la même qualité que le reste du livre, cependant. Il y a un clone d'astéroïdes à base de vecteurs, Othello, un Mahjong basé sur le Web, un jeu ludo-éducatif à défilement horizontal et à tir de mots, deux jeux de carrés magiques différents et une incarnation du jeu classique Worm (ou Snake, si vous préférez) .

Bien que le livre ne soit pas sans son lot de problèmes, d'erreurs, etc. (par exemple, une page contient une liste de codes qui est mutilée au-delà de toute croyance), je l'ai beaucoup aimé. Le livre a de nombreux atouts et quelques faiblesses. Il repose sur une bonne analyse et conception de programmes. (Ah! Vous pensiez pouvoir sauter ces étapes simplement parce que ce sont des jeux? Faux.) Le livre utilise très efficacement différents types de diagrammes (diagrammes d'objets, diagrammes de classes, organigrammes, diagrammes de machines d'état, diagrammes de prototypes d'écran, etc.) , et la plupart des listes de codes sont très lisibles. (Cet aspect, comme le style d'écriture, varie d'un auteur à l'autre. C'est l'inévitable revers des livres écrits par plusieurs auteurs.)

Programmation de jeux Java de pointe

Je suis généralement très sceptique quant aux titres commençant par «Advanced», «Cutting-Edge» et autres, simplement parce que, généralement, ils ne le sont pas! Dans le cas de la programmation de jeux Java de pointe , le département marketing de Coriolis n'a rien fait de battage: le livre n'est certainement pas pour les programmeurs Java débutants ou de niveau intermédiaire. En fait, tous les chapitres du livre sauf le premier et le dernier sont consacrés à une analyse approfondie et sans fioritures de la conception et de la mise en œuvre de deux cadres de jeu. Le premier cadre s'adresse aux jeux mono-utilisateur (autonomes) tandis que le second est orienté vers les jeux multi-utilisateurs basés sur Internet.

Le chapitre 2 contient l'implémentation complète d'un clone Asteroids entier qui est jouable, sans scintillement et utilise une animation et un son fluides. Et cela en seulement 250 lignes de code impaires - ou seulement 18 pages de livre! Ce chapitre devrait donc convaincre quiconque que l'utilisation des frameworks de jeu, et des frameworks en général, est l'un des meilleurs moyens d'atteindre des niveaux élevés de productivité de programmation en accentuant la réutilisation de la conception, plutôt que la réutilisation du code (mais dans le processus également en réutilisant des montagnes de code).

Si le chapitre 2 est un signe clair et prometteur de la haute qualité de ce livre, alors le chapitre 3 renforce cette impression en nous introduisant au thème central du livre: l'exploration en profondeur d'un cadre de jeu (très) bien conçu. Au passage, l'auteur explique ce que sont les cartes CRC (Classe / Responsabilités / Collaborateurs), l'essence des diagrammes de classes Booch et des diagrammes d'interaction objet-message. Au fait, ce n'est pas comme un remplissage de page car le reste du livre utilise ces puissants outils de génie logiciel pour améliorer le texte!

Le cadre de jeu mono-utilisateur, appelé GameWorks, est basé sur la métaphore éprouvée de la programmation de jeu d'une scène peuplée d'acteurs. En utilisant cette abstraction intuitive, vous pouvez implémenter n'importe quel type de jeu - des jeux de société classiques aux jeux d'arcade rapides et pleins d'action. J'ai été légèrement déçu que les auteurs aient choisi les jeux de cartes comme exemple de style de jeu (je préfère quelque chose qui fait monter l'adrénaline), bien qu'ils réussissent néanmoins à intégrer tous les problèmes et techniques standard, et de manière experte (entre autres: le traitement d'image, gestion des entrées, sprites, rafraîchissement d'écran optimisé, audio, aléa, intelligence artificielle).

Bien que le livre ne soit pas structuré autour de parties, il aurait dû l'être. Il y a un changement d'orientation clair à partir du chapitre 15. Le chapitre 15, «Programmation de jeux en réseau», représente un passage définitif à une vitesse supérieure, avec un nouvel auteur faisant l'écriture. Après avoir présenté les principaux problèmes liés aux jeux en réseau (topologies de connexion, latence, synchronisation de l'état du jeu), le livre développe un clone de Risk, le jeu de plateau de stratégie classique (appelé Domination dans le livre). La domination n'est qu'une excuse pour développer un nouveau cadre de jeu s'adressant à la classe générique des jeux multi-utilisateurs compatibles réseau. Ces cinq derniers chapitres sont difficiles et je soupçonne fortement que les lecteurs sans connaissances en communication de données ne seront pas à l'aise avec les arguments plus techniques. Mais il est impossible de sauter ces chapitres:Ils contiennent un traitement très approfondi des problèmes critiques de la désynchronisation de l'état du jeu et des problèmes de latence, ainsi qu'un certain nombre de solutions de plus en plus sophistiquées.

Le livre se termine par un chapitre sur l'optimisation du code et un chapitre intéressant sur la conception de FRED, un clone "Doom" écrit en Java! FRED utilise le lancer de rayons (oui, en Java) pour obtenir cette sensation "Doom" classique, et cette technique de base est expliquée en détail.

Pour résumer, la programmation de jeux Java de pointe est excellente. L'écriture est lucide et précise. Le logiciel développé par les auteurs est de très haute qualité. Les listes sont claires et lisibles, et je ne sais pas pour vous, mais après avoir lu les programmes d'autres personnes pendant 15 ans, je ne considère pas la lisibilité du code source comme un luxe).

Développement d'applets de divertissement Java

Développer des applets de divertissement Java est un livre très décevant. Si un éditeur vous a donné 400 pages pour entasser tout ce que vous savez sur la programmation de jeux en Java (d'accord, d'accord, "Java En-ter-tain-ment App-lets"), alors vous ne commencez pas par un chapitre qui répète, à satiété, l'histoire de Java. Ou continuez avec "Java Fundamentals" (Chapitre 4), une refonte totalement superflue des bases du langage (variables, Unicode, expressions, commentaires, flux de contrôle, objets, classes, packages - vous l'appelez!). L'auteur ne soupçonne toujours pas qu'il pourrait se concentrer entièrement sur le mauvais sujet, donc dans le chapitre 5, «Techniques plus avancées», il bourdonne avec des tableaux, des vecteurs, des chaînes, des exceptions, du multithreading, des applets. Le chapitre 6, "Graphiques, sons et événements" devient de plus en plus chaud. Mais vous aurez du mal à trouver ici non plus des références à la programmation de jeux. Au lieu de cela, la page immobilier précieux est consacré à vous apporter pas moins de 13 captures d' écran demi-page des résultats insignifiants de draw3DRect(), drawOval(), drawArc()etc.!

À mi-chemin du livre (chapitre 7, page 219), nous avons la première apparition d'un code de jeu Java , dans ce cas, une tentative de jeu de cartes Solitaire (décidément, les jeux de cartes doivent être de saison). La conception du jeu, la mise en œuvre du jeu et la lisibilité des listes sont tellement inférieures par rapport aux mêmes aspects des autres livres de cette revue qu'il est clair que Développer des applets de divertissement Java pose des problèmes.

Certaines déclarations remarquables de l'auteur, et une négligence générale ou une mauvaise utilisation de termes qui ont une signification cristalline, ne font que couler ce livre avant qu'il n'ait une chance de naviguer. Le mécanisme de gestion de la mise en page d'AWT est critiqué comme suit: "La façon dont la mise en page est gérée est assez bâclée. Ce n'est pas que cela n'a aucun sens et ce n'est pas pour une bonne raison, mais elle est toujours bâclée." L'API réseau de Java n'est pas non plus du goût de l'auteur: "La façon dont Java se connecte à d'autres emplacements sur le Net est cassée, et bien qu'elle ne soit pas totalement inutilisable, elle n'est certainement pas très fonctionnelle dans son état actuel." Etrange, j'aurais juré que d'autres et moi-même arrivons à créer des choses assez excitantes avec cette même API (Web crawler,DAMPP - voir les ressources ci-dessous pour des références à mon précédent JavaWorldarticles sur ces sujets). Cette dernière citation sort du chapitre 8, «Multiplayer Gaming», où l'on nous montre néanmoins «un petit exemple stupide» (pour citer le livre) sous la forme d'une application de chat. (D'autres exemples de langage que j'ai du mal à avaler dans ce livre sont "le cimenter dans votre tête" (p. 283), "et cracher des choses sur une douille" (p. 284), pour n'en citer que deux.)

N'y a-t-il rien de bon à dire sur ce livre? En fait, il y a: le chapitre 2, «Les principes de la conception de jeux», est une analyse intéressante de ce qui fait un bon jeu. Ici, l'auteur brille en identifiant plusieurs aspects de tous les bons jeux, comme une interface de jeu bien conçue, la véracité (niveau de réalisme), la personnalisation, l'IA, etc. Le chapitre suivant, «Game Design in Action», analyse certains jeux réels et met en évidence leur utilisation de bons éléments de conception de jeux. Ensuite, il y a un grand chapitre (chapitre 9) consacré à l'étude et à l'utilisation du Gamelet Toolkit (un framework de jeu du domaine public, écrit par Mark Tacchi, qui a reçu un prix international JavaCup). Ces trois chapitres sont les seules parties du livre qui valent le papier sur lequel elles sont imprimées, j'en ai peur.

Enseignez-vous à la programmation de jeux Internet avec Java

Les critiques comparatives sont difficiles car il y a rarement deux livres (ou plus) dans exactement la même catégorie. Teach Yourself Internet Game Programming with Java , selon sa couverture arrière, s'adresse aux utilisateurs dans les catégories «nouveau» à «occasionnel». Débutants, en d'autres termes.