# Capítulo 1: Introducción a SDL2, Rust y Goku

### Introducción

¡Bienvenido al emocionante mundo del desarrollo de juegos! En este capítulo, te presentamos tres herramientas poderosas que están ganando popularidad entre los desarrolladores de juegos: Rust, Simple DirectMedia Layer (SDL2) y Goku. Cuando se combinan, estas herramientas ofrecen una experiencia sin precedentes para crear videojuegos. Al final de este capítulo, entenderás Rust, SDL2 y Goku y habrás preparado tu entorno de desarrollo para comenzar tu viaje en la creación de juegos.

### ¿Qué es Rust?

Rust es un lenguaje de programación que busca ofrecer el rendimiento de lenguajes como C y C++ mientras ofrece garantías de seguridad en memoria. Se lanzó por primera vez en 2010 y desde entonces ha ganado popularidad, especialmente entre los desarrolladores de juegos, programadores de sistemas y aplicaciones de ensamblaje web. Rust se enfoca fuertemente en el rendimiento, la confiabilidad y la productividad.

Algunas características que hacen a Rust atractivo para el desarrollo de juegos incluyen:

* **Rendimiento**: Rust tiene un perfil de rendimiento similar a C y C++.
* **Seguridad de memoria**: El sistema de propiedad de Rust garantiza seguridad en la memoria sin un recolector de basura.
* **Programación Concurrente**: El sistema de tipos y el modelo de propiedad de Rust permiten una concurrencia sin miedo.
* **Interoperabilidad**: Puedes usar Rust fácilmente junto con C y otros lenguajes.
* **Comunidad y Ecosistema**: Rust cuenta con una comunidad activa y un creciente ecosistema de bibliotecas y herramientas.

### ¿Qué es SDL2?

Simple DirectMedia Layer (SDL) es una biblioteca de desarrollo multiplataforma diseñada para proporcionar acceso de bajo nivel a audio, teclado, mouse, joystick y hardware gráfico a través de OpenGL y Direct3D. SDL2 es la última versión de SDL y es ampliamente utilizado en la industria del juego. SDL2 proporciona una API uniforme para construir juegos que pueden ejecutarse en varios sistemas operativos, incluidos Windows, Linux y macOS.

Características de SDL2:

* **Soporte multiplataforma**: Escribe tu juego una vez y despliégalo en múltiples sistemas operativos.
* **API Simple**: SDL2 tiene una API sencilla para gráficos, sonido y manejo de entrada.
* **Aceleración de hardware**: SDL2 puede usar OpenGL y Direct3D para renderizado acelerado por hardware.
* **Comunidad y Ecosistema**: SDL2 es ampliamente utilizado y hay una comunidad activa que crea tutoriales, bibliotecas y herramientas.

### ¿Qué es Goku?

Goku es un lenguaje de programación emergente diseñado para el desarrollo de juegos. Sus capacidades sinérgicas con Rust y SDL2 lo convierten en una opción destacada para los desarrolladores que buscan una combinación de rendimiento, facilidad e innovación. Goku simplifica la lógica de juego compleja y ayuda en un desarrollo más rápido, mientras sigue ofreciendo la flexibilidad que buscan los desarrolladores avanzados.

Características de Goku:

* **Facilidad de uso**: La sintaxis de Goku está diseñada con claridad y simplicidad en mente, lo que la hace accesible para principiantes y robusta para profesionales.
* **Optimización de rendimiento**: Goku trabaja eficientemente tanto con Rust como con SDL2.
* **Lógica de juego integrada**: Las mecánicas de juego estándar son más fáciles de implementar con las funciones integradas de Goku.
* **GUI integrada**: GUI basada en imgui.

### Configurando tu entorno de desarrollo en Rust y Goku

Antes de que puedas comenzar a escribir código en Rust, necesitas configurar tu entorno de desarrollo. Sigue estos pasos:

1. Instala Rust: Ve al sitio web oficial de Rust y sigue las instrucciones de instalación para tu sistema operativo.
2. Comprobar la instalación: Después de la instalación, abre una terminal y ejecuta el siguiente comando para asegurarte de que Rust se instaló correctamente: `rustc --version`
3. Actualiza Rust: Es una buena práctica asegurarse de que estás usando la última versión de Rust. Ejecuta el siguiente comando para actualizar Rust: `rustup update`
4. Clona el motor de juego Goku desde el repositorio https://github.com/ladroid/goku

### Escribiendo tu primer programa en Goku

Ahora que tu entorno está configurado, escribamos un programa simple para abrir una ventana usando Goku. Este programa será la base para los juegos que desarrollarás en este libro.

Inicializa SDL2: En tu archivo main.rs, inicializa SDL2:

```rust
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut ventana = two_d::Window::new("Prueba de juego", 600, 800)?;
    ventana.canvas.set_draw_color(sdl2::pixels::Color::RGB(0, 0, 0

));
    ventana.canvas.clear();
    ventana.canvas.present();
    'bucleprincipal: loop {
        for evento in ventana.sdl_context.event_pump()?.poll_iter() {
            match evento {
                sdl2::event::Event::Quit { .. } => break 'bucleprincipal,
                _ => {}
            }
        }
        ventana.canvas.set_draw_color(sdl2::pixels::Color::RGB(255, 0, 0));
        ventana.canvas.clear();
        ventana.canvas.present();
        std::thread::sleep(std::time::Duration::new(0, 1_000_000_000u32 / 60));
    }
    Ok(())
}
```

Ejecuta tu programa: Primero en tu terminal, ejecuta el programa usando Cargo: cargo run copia el código y pégalo en el editor de texto integrado, guarda y luego construye desde el menú de la barra superior.

Esto abrirá una ventana con un fondo rojo. Al presionar la tecla Escape o cerrar la ventana, el programa finalizará.

### Conclusión

¡Felicitaciones! Has comenzado una emocionante travesía en el desarrollo de juegos con Rust, SDL2 y Goku. Tu conocimiento básico de estas herramientas está establecido y tu entorno de desarrollo está listo para juegos. El próximo capítulo se sumergirá más profundamente en las texturas en el desarrollo de juegos, desentrañando métodos para cargar y administrar estas utilizando Goku. ¡Mantente entusiasta, programa meticulosamente y sigue el camino para convertirte en un desarrollador de juegos competente!
