Libros de programación de juegos Java: una revisión comparativa

La programación de juegos es lo que me metió en las computadoras hace unos 15 años. Si eres como yo, entonces la animación mágica y de colores brillantes que irradian los juegos de computadora te atrae como una polilla a la luz. Pero estar fascinado por los juegos de computadora (y sus componentes internos) y poder programarlos son dos cosas completamente diferentes. Tuve que aprender el oficio de la manera difícil: mirando los juegos durante horas hasta que pudieras ver cómo funcionaban. En estos días puedes hacer trampa y tomar un atajo: coge un libro y simplemente "fusiona tu mente" con el programador experimentado que ofrece toda su experiencia, consejos y trucos.

Teniendo en cuenta que algunos libros de Java (consulte el libro de Laura Lemay que se enumera a continuación en la sección Recursos) en estos días quieren guiarlo por caminos diferentes, podría hacer cosas peores que confiar en un ex programador de juegos (comercial) para revisar el programa actual. libros de programación de juegos Java disponibles.

Cuatro títulos aterrizaron en mi puerta para esta revisión:

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

  • Programación de juegos Java de vanguardia, por Neil Bartlett, Steve Simkin y Chris Stranc (Coriolis Group Books)

  • Desarrollo de applets de entretenimiento de Java , por John Withers (Wiley)

  • Enséñese a programar juegos de Internet con Java , por Michael Morrison (Sams.net)

Antes de revisar los libros en detalle, comencemos con una tabla que le brinda una vista panorámica de sus principales características:

Tabla 1: Descripción general de los libros de programación de juegos Java.

Título (editor) Precio (US $) Páginas Capítulos (Apéndices) ¿CD ROM? Autores Orientación a objetos Enfoque multiusuario en red Enfoque del marco de juego
Black Art of Java Game Programming (Waite) 49,99 933 20 (5) si 3 ++

Muy

Bueno

Bueno Bueno
Programación de juegos Java de vanguardia (Coriolis) 39,99 523 21 (2) si 3

Muy

Bueno

Muy

Bueno

Muy

Bueno

Desarrollo de applets de entretenimiento de Java (Wiley) 29,95 392 10 (0) No 1 Pobre Pobre Promedio
Aprenda usted mismo a programar juegos de Internet con Java (Sams.net) 39,99 416 21 (3) si 1 Promedio Bueno Ninguna

Para describir los encabezados de la tabla, la columna Orientación a objetos resalta hasta qué punto los autores del libro respectivo utilizaron Java de la forma en que se supone que debe utilizarse: de forma orientada a objetos. Los buenos libros de Java, cualquiera que sea su enfoque, imponen buenas prácticas orientadas a objetos. Los libros inferiores usan Java como si fuera C o Pascal, es decir, de forma procedimental. Los juegos son aplicaciones candidatas muy buenas que se benefician de que se diseñen e implementen utilizando la orientación a objetos, por lo que un buen libro de juegos Java debe ser sólido en OOA / OOD / OOP (Análisis, diseño, programación OO).

La columna Networked Multi-User Focus destaca cuánto se centra el libro en el mayor potencial de programación de juegos de Java: juegos en red para múltiples usuarios.

La columna Game Framework Focus destaca hasta qué punto el libro se basa en un marco de juego para explicar y desarrollar la programación de juegos. Los frameworks de juegos son API de juegos de última generación que eliminan muchas de las tareas estándar que todos los juegos tienen que realizar (gestión de sprites, repintado de pantalla, mantenimiento de puntuación, etc.).

Ahora, mire los libros en detalle.

El arte negro de la programación de juegos Java

Black Art of Java Game Programming es uno de esos libros tipo Biblia, todas las 933 páginas. El libro está lógicamente estructurado en tres partes:

  1. "Fundamentos del desarrollo de juegos Java"
  2. "Técnicas avanzadas de juegos y gráficos"
  3. "Galería de juegos"

La Parte 1, que está escrita en su totalidad por el autor principal del libro (Joel Fan), entreteje de manera experta los tres hilos temáticos de Java, la orientación a objetos y los fundamentos de la programación de juegos en un todo claro, refrescante y coherente.

La parte 2 se centra en las técnicas de redes y 3D. Un capítulo desarrolla un sistema de gestión de alta puntuación del lado del servidor, mientras que otro desarrolla un sistema completo de sala de chat. Ambos sistemas implican programas del lado del cliente y del lado del servidor (applets y servidores, en otras palabras). Los únicos dos capítulos que tratan sobre 3D se leen como un libro dentro de un libro: en más de 110 páginas, Calin Tenitchi repasa todos los conceptos básicos del 3D clásico y, en su segundo capítulo, analiza el uso de un marco de juego 3D grande pero muy bien diseñado llamado App3DCore. Con la API oficial de Java 3D en el horizonte, esta parte del libro pronto quedará parcialmente obsoleta, aunque gran parte del marco trata aspectos de mayor nivel que Java 3D, por lo que esto no es un problema para el libro. En cualquier caso, tener explicado el interior de este marco 3D es muy esclarecedor.

La Parte 3, la Galería de juegos, contiene ocho capítulos, cada uno de los cuales desarrolla un juego completo. Los juegos varían en sofisticación, lo que me dio la impresión de que esta parte del libro se armó apresuradamente. Sin embargo, el diseño e implementación individual de los juegos es (en general) de la misma alta calidad que el resto del libro. Hay un clon de Asteroides basado en vectores, Othello, un Mahjong basado en la web, un juego de entretenimiento educativo de desplazamiento horizontal y disparar palabras, dos juegos de cuadrados mágicos diferentes y una encarnación del clásico juego de gusano (o serpiente, si lo prefieres) .

Aunque el libro no está exento de problemas técnicos, errores, etc. (por ejemplo, una página contiene una lista de códigos que está alterada más allá de lo creíble), me gustó mucho. El libro tiene muchas fortalezas y pocas debilidades. Es fuerte en un buen análisis y diseño de programas. (¡Ah! ¿Pensaste que podrías saltarte esas etapas solo porque son juegos? Incorrecto.) El libro usa varios tipos de diagramas de manera muy efectiva (diagramas de objetos, diagramas de clases, diagramas de flujo, diagramas de máquinas de estados, diagramas de prototipos de pantalla, etc.) y la mayoría de los listados de códigos son muy legibles. (Este aspecto, al igual que el estilo de escritura, varía de un autor a otro. Este es el reverso inevitable de los libros escritos por varios autores).

Programación de juegos Java de vanguardia

Por lo general, soy muy escéptico con los títulos que comienzan con "Advanced", "Cutting-Edge" y similares, simplemente porque, por lo general, no lo son. En el caso de la programación de juegos Java de vanguardia , el departamento de marketing de Coriolis no promocionó nada: el libro definitivamente no es para principiantes o programadores de Java de nivel intermedio. De hecho, todos los capítulos del libro, excepto el primero y el último, están dedicados a un análisis profundo y sensato del diseño y la implementación de dos marcos de juego. El primer marco está dirigido a juegos de un solo usuario (independientes), mientras que el segundo está orientado a juegos multiusuario basados ​​en Internet.

El Capítulo 2 incluye la implementación completa de un clon completo de Asteroids que se puede reproducir, no parpadea y utiliza una animación y un sonido suaves. Y eso en solo 250 líneas impares de código, ¡o solo 18 páginas de libro! Este capítulo, por lo tanto, debería convencer a cualquiera de que usar frameworks de juegos, y frameworks en general, es una de las mejores formas de lograr altos niveles de productividad de programación al acentuar la reutilización del diseño, en lugar de la reutilización del código (pero en el proceso también reutilizando montañas de código).

Si el Capítulo 2 es un signo claro y prometedor de la alta calidad de este libro, el Capítulo 3 refuerza esa impresión al presentarnos el tema central del libro: la exploración en profundidad de un marco de juego (muy) bien diseñado. De paso, el autor explica qué son las tarjetas CRC (Clase / Responsabilidades / Colaboradores), la esencia de los diagramas de clases de Booch y los diagramas de interacción entre objetos y mensajes. Por cierto, esto no es un relleno de página porque el resto del libro utiliza estas poderosas herramientas de ingeniería de software para mejorar el texto.

El marco de juego para un solo usuario, llamado GameWorks, se basa en la metáfora probada de la programación de juegos de un escenario poblado por actores. Con esta abstracción intuitiva, puede implementar cualquier tipo de juego, desde juegos de mesa clásicos hasta juegos de arcade rápidos y llenos de acción. Me decepcionó un poco que los autores eligieran los juegos de cartas como ejemplo de estilo de juego (prefiero algo que haga fluir la adrenalina), aunque, sin embargo, logran entretejer todos los problemas y técnicas estándar, y de manera experta (entre otros: procesamiento de imágenes, gestión de entrada, sprites, actualización de pantalla optimizada, audio, aleatoriedad, inteligencia artificial).

Aunque el libro no está estructurado en partes, debería haberlo estado. Hay un claro cambio de enfoque desde el capítulo 15 en adelante. El capítulo 15, "Programación de juegos en red", representa un cambio definitivo a una marcha más alta, con un nuevo autor escribiendo. Después de presentar los principales problemas relacionados con los juegos basados ​​en red (topologías de conexión, latencia, sincronización del estado del juego), el libro desarrolla un clon de Risk, el clásico juego de mesa de estrategia (llamado Domination en el libro). La dominación es solo una excusa para desarrollar un nuevo marco de juego que aborde la clase genérica de juegos multiusuario habilitados para la red. Estos últimos cinco capítulos son difíciles, y sospecho firmemente que los lectores sin experiencia en comunicación de datos no se sentirán cómodos con los argumentos más técnicos. Pero no hay forma de que pueda omitir estos capítulos:Contienen un tratamiento muy completo de los problemas críticos de la desincronización del estado del juego y los problemas de latencia, así como una serie de soluciones cada vez más sofisticadas.

El libro termina con un capítulo sobre optimización de código y un capítulo interesante sobre el diseño de FRED, un clon "Doom" escrito en Java. FRED usa ray casting (sí, en Java) para lograr esa sensación clásica de "Doom", y esta técnica central se explica en detalle.

En resumen, la programación de juegos Java de vanguardia es excelente. La escritura es lúcida y precisa. El software que desarrollan los autores es de muy alta calidad. Los listados son claros y legibles, y no sé ustedes, pero después de leer los programas de otras personas durante 15 años, no considero que la legibilidad del código fuente sea un lujo).

Desarrollo de applets de entretenimiento de Java

Desarrollar applets de entretenimiento de Java es un libro muy decepcionante. Si un editor te dio 400 páginas en las que acumular todo lo que sabes sobre la programación de juegos en Java (está bien, está bien, "Java En-ter-tain-ment App-lets"), entonces no comiences con un capítulo que reitere, hasta el hastío, la historia de Java. O continúe con "Java Fundamentals" (Capítulo 4), una repetición totalmente superflua de los conceptos básicos del lenguaje (variables, Unicode, expresiones, comentarios, flujo de control, objetos, clases, paquetes, ¡lo que sea!). El autor aún no sospecha que podría estar enfocándose en el tema equivocado por completo, por lo que en el Capítulo 5, "Técnicas más avanzadas", habla de matrices, vectores, cadenas, excepciones, subprocesos múltiples, applets. Cada vez más caliente es el Capítulo 6, "Gráficos, sonido y eventos". Pero tampoco encontrarás aquí referencias a la programación de juegos. En su lugar, preciosa página de bienes raíces se dedica a hacerle llegar nada menos que 13 de media página capturas de pantalla de los resultados triviales de draw3DRect(), drawOval(), drawArc()y similares!

A mitad del libro (Capítulo 7, página 219) tenemos la primera aparición de algún código de juego de Java , en este caso, un intento en el juego de cartas Solitario (decididamente, los juegos de cartas deben estar en temporada). El diseño del juego, la implementación del juego y la legibilidad de los listados son todos tan inferiores en comparación con los mismos aspectos de los otros libros en esta revisión que está claro que desarrollar Applets de entretenimiento de Java tiene problemas.

Algunas declaraciones notables hechas por el autor, y un descuido general o mal uso de términos que tienen un significado claro como el cristal, solo ayudan a hundir este libro antes de que tenga la oportunidad de navegar. El mecanismo de administración de diseño de AWT es criticado de la siguiente manera: "La forma en que se maneja el diseño es bastante chapucera. No es que no tenga sentido y no lo sea por una buena razón, pero aún así es chapucera". La API de red de Java tampoco es del agrado del autor: "La forma en que Java se conecta a otras ubicaciones en la red está rota, y aunque no es totalmente inutilizable, seguro que no es muy funcional en su estado actual". Extraño, habría jurado que otros y yo conseguimos crear cosas muy interesantes con esa misma API (rastreador web,DAMPP: consulte los recursos a continuación para obtener referencias a mi JavaWorld anteriorartículos sobre estos temas). Esa última cita proviene del Capítulo 8, "Juegos multijugador", donde, sin embargo, se nos muestra "un pequeño ejemplo estúpido" (para citar el libro) en forma de una aplicación de chat. (Otros ejemplos de lenguaje que encuentro difícil de tragar en este libro son "cimentarlo en tu cabeza" (p. 283), "y escupir cosas en un cuenco" (p. 284), por citar solo dos).

¿No hay nada bueno que decir sobre este libro? En realidad, existe: el Capítulo 2, "Los principios del diseño de juegos", es un análisis interesante de lo que hace que un buen juego sea bueno. Aquí el autor brilla al identificar varios aspectos que tienen todos los buenos juegos, como una interfaz de juego bien diseñada, veracidad (nivel de realismo), personalización, IA, etc. El siguiente capítulo, "Diseño de juegos en acción", analiza algunos juegos reales y destaca su uso de buenos elementos de diseño de juegos. Luego hay un gran capítulo (Capítulo 9) dedicado al estudio y uso del Gamelet Toolkit (un marco de juego de dominio público, escrito por Mark Tacchi, que recibió un premio JavaCup International). Estos tres capítulos son las únicas partes del libro que valen el papel en el que están impresos, me temo.

Aprenda a programar juegos de Internet con Java

Las revisiones comparativas son difíciles porque rara vez dos (o más) libros pertenecen exactamente a la misma categoría. Aprenda usted mismo La programación de juegos de Internet con Java , según su contraportada, se dirige a los usuarios en las categorías "nuevas" a "casuales". Principiantes, en otras palabras.