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;
}