À propos

Bienvenue sur bellevichy, un petit espace personnel pour expérimenter, noter des idées et garder une trace de différents tests techniques. Rien de très officiel, juste un coin tranquille pour jouer avec le code et quelques concepts.

Note technique : générateur de valeurs aléatoires

Expérimentation autour de la génération de nombres aléatoires en C, afin de produire des valeurs entières et flottantes dans un intervalle donné.

Extrait de code :

float flottant_aleatoire(float debut, float fin) {
    return ((float)rand() / RAND_MAX * (fin - debut) + debut);
    srand(time(NULL));
}

int entier_aleatoire(int debut, int fin) {
    return rand() % (fin - debut + 1) + debut;
}
srand(time(NULL));

Note technique : Makefile du jeu « jeu_caillou »

Ce fichier Makefile automatise la compilation du projet jeu_caillou. Il définit une cible principale qui lie les fichiers objets jeu.o, calculs.o et dessin.o avec la bibliothèque mathématique -lm, ainsi que des règles séparées pour compiler chaque module et une cible clean pour supprimer les fichiers objets.

Extrait de configuration (Makefile) :

jeu_caillou : jeu.o calculs.o dessin.o
            gcc -o jeu_caillou jeu.o calculs.o dessin.o -lm
            @echo "Compilation du jeu du caillou finie !"
        
        jeu.o : jeu.c
            gcc -c jeu.c 
        
        calculs.o : calculs.c calculs.h
            gcc -c calculs.c -lm
        
        dessin.o : dessin.c dessin.h
            gcc -c dessin.c
        
        
        clean:
            rm -f *.o

Note technique : gestion du joueur suivant

Cette fonction calcule le prochain joueur dans une rotation circulaire. Le passage au joueur suivant dépend de deux paramètres du jeu : la vitesse (normale ou accélérée) et le sens (croissant ou décroissant). Une normalisation est ensuite appliquée pour maintenir l'indice du joueur dans un ensemble de 5 participants.

Extrait de code :

int joueur_suivant(struct jeu ali) {
            int x;
            
            if (ali.vitesse == normale && ali.sens == croissant) {
                x = ali.joueur_actuel + 1;
            }
            else if (ali.vitesse == normale && ali.sens == decroissant) {
                x = ali.joueur_actuel - 1;
            }
            else if (ali.vitesse == acceleree && ali.sens == decroissant) {
                x = ali.joueur_actuel - 2;
            }
            else if (ali.vitesse == acceleree && ali.sens == croissant) {
                x = ali.joueur_actuel + 2;
            }
            else {
                x = 0;
            }
        
            if (x < 0) {
                x = x + 5;
            }
        
            return x % 5;
        }