Inteligencia Artificial en Videojuegos, más links para meterse en tema
La “joda” de las Máquinas de Estado Finitas Jerárquicas
– ventajas sobre las Máquinas de Estado Finitas, explicación general y limitaciones de las mismas
Por qué las Máquinas de Estado no son la mejor solución para la I.A.
Sobre los Arboles de Comportamientos (Behavior Trees):
Un vistazo general a los Arboles de Comportamientos
Arboles de Comportamientos para la I.A. de los juegos de última generación (videos)
Popurrí de webadas – Opus 0×04
El verdadero video de despedida de Bill Gates
Todos los teléfonos móviles van al infierno
Debuggear PHP con xdebug:
Tracing PHP Applications with xdebug
Profiling PHP Applications With xdebug
El béisbol y los números primos
La narrativa en videojuegos de la próxima generación, una serie de artículos muy interesantes sobre la disciplina de la escritura para videojuegos y una visión hacia un futuro cercano:
Parte 1: ¿De qué se compone una historia?
Parte 2: ¿Cómo contar historias en un videojuego?
Doubleton Design Pattern
Para estrenar una nueva sección en este blog, escribo sobre el patrón de diseño “Doubleton”. La sección “sobre diseño” está orientada a analizar el diseño de sistemas informáticos desde una perspectiva grotesca, y desde el limite que separa lo utilizable de lo completamente inútil. Pero en el improbable caso de que alguna de estas diserciones realmente vislumbre un aspecto no conocido del diseño de sistemas, por favor, no olvidarse del autor.
El patrón de diseño Doubleton, también conocido como patrón YinYang tiene como propósito restringir el instanciamiento de una clase a solo dos objetos, en contraste con el patrón Singleton que solo permite una instancia.
Su uso es aplicable donde una enumeración (tipo nativo de dato que permite una lista enumerada de constantes) no es suficiente para suplir las necesidades semánticas y sintácticas que la abstracción buscada requiere. O sea, cuando las circunstancias requieren que los dos valores posibles funcionen como objetos, ya sea para asignarles operaciones y/o métodos o para asegurar legibilidad y tipado seguro.
La implementación de una clase Doubleton debe restringir el instanciamiento de la misma manera que lo hace el patrón Singleton, pero, a diferencia de este, no tiene un getter estático único y genérico. La implementación tiene dos getters estáticos cuya denominación depende de la semántica utilizada. Un ejemplo clásico de esto es el tipo de dato booleano:
| class Boolean {
| ...
| static Boolean getTrue() { ... }
| static Boolean getFalse() { ... }
| ...
| }
A su vez, la implementación provee un método para obtener el opuesto de una de las instancias, que efectivamente provee la otra instancia del Doubleton:
| class X {
| ...
| X getOpposite() { ... }
| ...
| }
Métodos y operadores adicionales deben suplirse con el propósito de proveer una interfaz que promueva la legibilidad. Por ejemplo, en el caso de la abstracción de un dato booleano es conveniente proveer las operaciones booleanas básicas:
| class Boolean {
| ...
| static Boolean not(Boolean boolean) { ... }
| Boolean and(Boolean other) { ... }
| Boolean or(Boolean other) { ... }
| ...
| }
Otras aplicaciones frecuentes del patrón Doubleton son: Gender(Male/Female), Choice(Yes/No), Switch(On/Off), YinYang (Yin/Yang), CharacterAligment(Good/Evil), PoliticAligment(Democrat/Republican), y este último uso ha sido deprecado: EngineType(Diesel/Gasoline).