Cómo crear un videojuego desde cero como en 1987
Lo que estamos construyendo
- La versión 11 del protocolo X nació en 1987.
- X11 es un modelo anterior a la aparición de las GPU, por lo que no encaja bien con el hardware actual.
- Todos los sistemas Unix tienen un servidor X, y también es posible ejecutar aplicaciones Linux con GUI en macOS y Windows.
- El protocolo X11 es relativamente simple y se puede empezar solo con crear un socket.
- En el caso de aplicaciones 2D, puede funcionar sin necesidad de interactuar con la GPU.
Autenticación
- En el artículo anterior, se conectaba al servidor X sin autenticación.
- Ahora se admite el protocolo de autenticación de X.
- Esto se debe a que algunos entornos de escritorio que usan XWayland requieren autenticación.
- La autenticación se maneja usando el mecanismo MIT-MAGIC-COOKIE-1.
Abrir una ventana
- Se abre un socket de dominio UNIX para comunicarse con el servidor X.
- Se establece la conexión con el servidor mediante el handshake de X11.
- Se crea un contexto gráfico y una ventana.
- Para mostrar la ventana, se usa la llamada
map_window.
Cargar recursos
- Se cargan las imágenes necesarias para el juego y se convierten al formato de imagen de X11.
- Se crea un Pixmap, se suben las imágenes y luego se copian las partes necesarias a la ventana.
Opinión de GN⁺
- La simplicidad de X11: el protocolo X11 es relativamente simple, por lo que se puede comunicar directamente a través de sockets. Esto ayuda a ingenieros principiantes a entender los conceptos básicos de programación de redes y GUI.
- Posibilidades de optimización: usando buffers fuera de pantalla como Pixmap, las imágenes pueden subirse una sola vez y luego copiarse rápidamente. Este es un buen ejemplo de optimización de rendimiento.
- Ventajas del lenguaje Odin: el lenguaje Odin ofrece funciones que permiten manejar de forma sencilla tareas complejas como la gestión de memoria. Esto hace posible una programación eficiente.
- Compatibilidad con sistemas heredados: este método puede funcionar incluso en sistemas antiguos. Resulta útil cuando se necesita ejecutar software en distintos entornos.
- Recurso de aprendizaje: trabajar directamente con protocolos de bajo nivel como X11 ayuda mucho a entender el funcionamiento interno de las GUI. Esto puede contribuir a mejorar las habilidades de un ingeniero.
1 comentarios
Comentarios de Hacker News
Primer comentario: Las PC de 1987 tenían entre 1 y 2 MB de RAM, y la Super NES tenía 128 KB de RAM. Se creaban ejecutables mucho más pequeños que los programas de Microsoft. Enlace
Segundo comentario: X11 es antiguo, pero si implementas solo las funciones básicas necesarias para desarrollar juegos, no hace falta preocuparse por el resto. Con Xlib se puede trabajar más fácilmente.
Tercer comentario: Desarrolló un clon de Buscaminas para PC con DOS en Turbo Pascal. Tuvo problemas con algoritmos recursivos en niveles grandes y añadió una función para elegir con seguridad la posición inicial.
Cuarto comentario: Desarrollar juegos en 1987 era mucho más difícil que hoy. DOS no soportaba multitarea, así que el flujo de trabajo era muy ineficiente. Enlace
Quinto comentario: Le decepcionó que el archivo wasm del motor Godot mida al menos 50 MB. Sobre todo en juegos 2D simples, hace falta optimización. En general, le pareció impresionante.
Sexto comentario: Le interesó el lenguaje Odin. Odin, de forma parecida a Zig, pasa asignadores de memoria a las funciones, pero tiene un mecanismo que permite manejarlo de forma más simple.
Séptimo comentario: El Buscaminas de Windows 3.1 tenía un código de trampa. Al ingresar cierta combinación de teclas, se podía distinguir entre casillas seguras y casillas con bombas.
Octavo comentario: Si usas una biblioteca como SDL, casi no hay sobrecarga y puedes dar soporte a distintos sistemas operativos. Si usas el SDL 1.x heredado, también es posible soportar versiones antiguas de Linux.
Noveno comentario: El ejecutable de Mines para Windows de Simon Tatham pesa unos 180 KiB. Enlace