Générer un labyrinthe avec le langage RUST et claude.ia

Posted by admin on avril 21, 2025
GNU/Linux, rust / No Comments
use rand::prelude::*;
use std::collections::HashSet;

fn main() {
    // Dimensions du labyrinthe (doit être impair pour avoir des murs aux bords)
    let width = 29;
    let height = 19;
    
    // Générer le labyrinthe
    let maze = generate_maze(width, height);
    
    // Afficher le labyrinthe
    print_maze(&maze, width, height);
}

fn generate_maze(width: usize, height: usize) -> Vec<Vec<char>> {
    // Initialiser le labyrinthe avec des murs partout
    let mut maze = vec![vec!['#'; width]; height];
    let mut rng = rand::thread_rng();
    
    // Ensemble pour suivre les cellules visitées
    let mut visited = HashSet::new();
    
    // Pile pour l'algorithme DFS
    let mut stack = Vec::new();
    
    // Point de départ (coordonnées impaires)
    let start_x = 1;
    let start_y = 1;
    
    // Marquer le point de départ comme un chemin
    maze[start_y][start_x] = ' ';
    visited.insert((start_x, start_y));
    stack.push((start_x, start_y));
    
    // Directions possibles: droite, bas, gauche, haut
    let directions = [(2, 0), (0, 2), (-2, 0), (0, -2)];
    
    // Tant que la pile n'est pas vide
    while !stack.is_empty() {
        let current = stack.last().unwrap().clone();
        let (x, y) = current;
        
        // Trouver les voisins non visités
        let mut neighbors = Vec::new();
        
        for (dx, dy) in directions.iter() {
            let nx = (x as isize + dx) as usize;
            let ny = (y as isize + dy) as usize;
            
            // Vérifier si le voisin est dans les limites du labyrinthe
            if nx > 0 && nx < width - 1 && ny > 0 && ny < height - 1 
               && !visited.contains(&(nx, ny)) {
                neighbors.push((nx, ny, *dx, *dy));
            }
        }
        
        // S'il y a des voisins non visités
        if !neighbors.is_empty() {
            // Choisir un voisin au hasard
            let (nx, ny, dx, dy) = neighbors[rng.gen_range(0..neighbors.len())];
            
            // Creuser un passage
            let wall_x = (x as isize + dx / 2) as usize;
            let wall_y = (y as isize + dy / 2) as usize;
            maze[wall_y][wall_x] = ' ';
            
            // Marquer le voisin comme visité
            maze[ny][nx] = ' ';
            visited.insert((nx, ny));
            
            // Pousser le nouveau voisin sur la pile
            stack.push((nx, ny));
        } else {
            // Retour en arrière si aucun voisin non visité
            stack.pop();
        }
    }
    
    // Définir l'entrée et la sortie
    maze[0][1] = ' '; // Entrée en haut
    maze[height - 1][width - 2] = ' '; // Sortie en bas
    
    maze
}

fn print_maze(maze: &Vec<Vec<char>>, width: usize, height: usize) {
    for y in 0..height {
        for x in 0..width {
            print!("{}", maze[y][x]);
        }
        println!();
    }
}


cargo.toml:

[dependencies]
rand = "0.8.5"

résultat:

$ cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/maze_claudeia`
# ###########################
# #         #   #         # #
# ####### # # # ### ##### # #
#   #     #   #     #   # # #
### # ############### ### # #
#   #   #           #   #   #
# ##### # ### ##### ### ### #
#       # #   #   #     #   #
########### ### # ####### ###
#   #       #   #         # #
# ### ### ### ############# #
# #   # #     #         #   #
# # ### ######### ##### ### #
#   #     #     # #   #     #
# ### ### # ### # ### ##### #
# #   #   #   # #   # #   # #
# ### # ##### # ### # # # # #
#     #       #     #   #   #
########################### #

J’ai modifié une classe CPP pour afficher correctement le labyrinthe généré

Posted by admin on mars 13, 2025
All, qt, QT6 / No Comments

Le widget 2D et la vue 3D OpenGL ne correspondaient pas : la direction des murs et des chemins était inversée.

J’ai modifié la classe qui s’occupe du rendu en OpenGL avec le signe – pour que les coordonnées des murs soient dessinées correctement. J’ai aussi modifié la position de la caméra. Donc -x à la place de x.

J’ai testé avec GNU_LINUX. Le résultat me convenait.

J’ai fabriqué un exécutable pour Windows 11 avec les dlls que l’exécutable a besoin pour fonctionner.


Tags:

Exemple de résolution d’un labyrinthe géant dans le navigateur web

Posted by admin on mars 12, 2025
All, web / No Comments

Tags: ,

Des exemples de codes sources pour la génération de labyrinthe

Posted by admin on mars 12, 2025
All / No Comments

Installer rust sous GNU_LINUX

Posted by admin on février 18, 2025
All, GNU/Linux / No Comments

adaptation du code de qmazegen pour utiliser QT6

Posted by admin on janvier 15, 2025
All, qt, QT6 / No Comments
J’ai installé QT6 et charger les fichiers sources de QMAZEGEN. J’ai essayé de compiler avec QT6. J’ai eu des erreurs de compilation.

J’ai corrigé les erreurs de compilation.

Je devais récupérer le temps écoulé ElapsedTime.

J’ai utilisé une classe de QT6 : https://doc.qt.io/qt-6/qelapsedtimer.html.

Le programme QMAZEGEN fonctionne à nouveau.

Je vais continuer de le tester puis le mettre en ligne avec les fichiers source sur SourceForge.

Problèmes de connexion entre kodi et yatse sur un PC MX Linux

Posted by admin on janvier 04, 2025
GNU/Linux, kodi / No Comments

Après certains tests réseaux j’ai découvert que le PC sous MX Linux avait un firewall après l’installation.

Je voulais supprimer le firewall et donc supprimer les règles iptables.

J’ai donc écrit ces commandes dans un script.

https://korben.info/comment-supprimer-toutes-les-regles-iptables.html


Tags: , , ,

Des commandes linux pour les débutants

Posted by admin on décembre 26, 2024
All, GNU/Linux / No Comments

$cd /home

$ls

$cd ~

$sudo apt install nano mc


Tags:

Réinstaller grub

Posted by admin on décembre 26, 2024
All, GNU/Linux / No Comments

Update grub.
grub-mkconfig -o /boot/grub/grub.cfg


Tags: ,

Comment zipper un répertoire sous Linux ?

Posted by admin on décembre 25, 2024
All, GNU/Linux / No Comments

$zip -r <nom du fichier zip> <nom du répertoire>

L’option « -r » indique à zip d’inclure les fichiers/dossiers dans les sous-répertoires.


Tags:

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: