# Chapitre 1: Introduction à SDL2, Rust et Goku

### Introduction

Bienvenue dans le monde palpitant du développement de jeux ! Dans ce chapitre, nous vous présentons trois outils puissants qui deviennent populaires parmi les développeurs de jeux : Rust, Simple DirectMedia Layer (SDL2) et Goku. Combinés, ces outils offrent une expérience inégalée pour créer des jeux vidéo. À la fin de ce chapitre, vous comprendrez Rust, SDL2 et Goku et aurez préparé votre environnement de développement pour démarrer votre aventure de création de jeux.

### Qu'est-ce que Rust ?

Rust est un langage de programmation qui vise à fournir les performances de langages tels que C et C++ tout en offrant des garanties de sécurité mémoire. Il a été lancé pour la première fois en 2010 et a depuis gagné en popularité, en particulier parmi les développeurs de jeux, les programmeurs système et les applications d'assemblage web. Rust se concentre fortement sur la performance, la fiabilité et la productivité.

Quelques caractéristiques qui rendent Rust attrayant pour le développement de jeux comprennent :

* **Performance** : Rust a un profil de performance similaire à C et C++.
* **Sécurité mémoire** : Le système de propriété de Rust assure une sécurité mémoire sans un ramasse-miettes.
* **Programmation concurrente** : Le système de type et le modèle de propriété de Rust permettent une concurrence sans crainte.
* **Interopérabilité** : Vous pouvez facilement utiliser Rust à côté de C et d'autres langues.
* **Communauté et écosystème** : Rust dispose d'une communauté active et d'un écosystème croissant de bibliothèques et d'outils.

### Qu'est-ce que SDL2 ?

Simple DirectMedia Layer (SDL) est une bibliothèque de développement multiplateforme conçue pour fournir un accès de bas niveau à l'audio, au clavier, à la souris, au joystick et au matériel graphique via OpenGL et Direct3D. SDL2 est la dernière version de SDL et est largement utilisée dans l'industrie du jeu. SDL2 offre une API uniforme pour construire des jeux qui peuvent fonctionner sur divers systèmes d'exploitation, y compris Windows, Linux et macOS.

Caractéristiques de SDL2 :

* **Support multiplateforme** : Écrivez votre jeu une fois et déployez-le sur plusieurs systèmes d'exploitation.
* **API simple** : SDL2 dispose d'une API simple pour les graphiques, le son et la gestion des entrées.
* **Accélération matérielle** : SDL2 peut utiliser OpenGL et Direct3D pour un rendu accéléré par le matériel.
* **Communauté et écosystème** : SDL2 est largement utilisé et il existe une communauté active créant des tutoriels, des bibliothèques et des outils.

### Qu'est-ce que Goku ?

Goku est un langage de programmation émergent conçu pour le développement de jeux. Ses capacités synergiques avec Rust et SDL2 en font un choix de prédilection pour les développeurs cherchant un mélange de performance, de facilité et d'innovation. Goku simplifie la logique de jeu complexe et aide à un développement plus rapide, tout en offrant la flexibilité que recherchent les développeurs avancés.

Caractéristiques de Goku :

* **Facilité d'utilisation** : La syntaxe de Goku est conçue avec clarté et simplicité à l'esprit, la rendant accessible aux débutants tout en étant robuste pour les professionnels.
* **Optimisation des performances** : Goku fonctionne efficacement avec Rust et SDL2.
* **Logique de jeu intégrée** : Les mécaniques de jeu standard sont plus faciles à mettre en œuvre avec les fonctions intégrées de Goku.
* **GUI intégré** : GUI basé sur imgui.

### Configurer votre environnement de développement Rust et Goku

Avant de pouvoir commencer à écrire du code Rust, vous devez configurer votre environnement de développement. Suivez ces étapes :

1. Installez Rust : Allez sur le site officiel de Rust et suivez les instructions d'installation pour votre système d'exploitation.
2. Vérifiez l'installation : Après l'installation, ouvrez un terminal et exécutez la commande suivante pour vous assurer que Rust est correctement installé : `rustc --version`
3. Mettez à jour Rust : Il est bon de s'assurer que vous utilisez la dernière version de Rust. Exécutez la commande suivante pour mettre à jour Rust : `rustup update`
4. Clonez le moteur de jeu Goku depuis le dépôt https://github.com/ladroid/goku

### Écrire votre premier programme avec Goku

Maintenant que votre environnement est configuré, écrivons un programme simple pour ouvrir une fenêtre avec Goku. Ce programme sera la base des jeux que vous développerez tout au long de ce livre.

Initialisez SDL2 : Dans votre fichier main.rs, initialisez SDL2 :

```rust
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut fenetre = two_d::Window::new("Test de jeu", 600, 800)?;
    fenetre.canvas.set_draw_color(sdl2::pixels::Color::RGB(0, 0, 0));
    fenetre.canvas.clear();
    fenetre.canvas.present();
    'boucleprincipale: loop {
        for evenement in fenetre.sdl_context.event_pump()?.poll_iter() {
            match evenement {
                sdl2::event::Event::Quit { .. } => break 'boucleprincipale,
                _ => {}
            }
        }
        fen

etre.canvas.set_draw_color(sdl2::pixels::Color::RGB(255, 0, 0));
        fenetre.canvas.clear();
        fenetre.canvas.present();
        std::thread::sleep(std::time::Duration::new(0, 1_000_000_000u32 / 60));
    }
    Ok(())
}
```

Exécutez votre programme : Tout d'abord dans votre terminal, exécutez le programme en utilisant Cargo : cargo run copiez le code et collez-le dans l'éditeur de texte intégré, enregistrez puis construisez à partir du menu de la barre supérieure.

Cela ouvrira une fenêtre avec un fond rouge. En appuyant sur la touche Échappement ou en fermant la fenêtre, le programme se terminera.

### Conclusion

Bravo ! Vous avez entamé un voyage électrisant dans le développement de jeux avec Rust, SDL2 et Goku. Vos connaissances de base sur ces outils sont établies et votre environnement de développement est prêt pour les jeux. Le prochain chapitre approfondira les textures dans le développement de jeux, en dévoilant des méthodes pour les charger et les gérer avec Goku. Restez enthousiaste, codez méticuleusement et suivez le chemin pour devenir un développeur de jeux compétent !
