Je suis livre pour les nuls en s'amusant depuis quelques jours. Je suis arrivé à un chapire appelé Devinuim.
Dans ce jeu, on doit deviner des nombres en binaire à partir de 4 diodes en fonctio qu'elle s'allume ou s'éteigne. J'ai voulu améliorer le code source de ce jeu et le voici:
#define PAUSE 400
#define LUMIN 100
const byte yLed1 = 11;
const byte yLed2 = 10;
const byte yLed4 = 9;
const byte yLed8 = 6;
byte ayTablo[10]; // Le fameux tableau!
byte compteur = 0;
byte ActuelNumb = 0;
byte PrecNumb = 0;
void setup() {
pinMode(yLed1, OUTPUT);
pinMode(yLed2, OUTPUT);
pinMode(yLed4, OUTPUT);
pinMode(yLed8, OUTPUT);
Serial.begin(9600);
Serial.println("*** Bienvenue chez DEVINUM ***");
}
void loop() {
for (byte i = 0; i < 10; i++) {
do{
ActuelNumb = ayTablo[i];
ayTablo[i] = random(1, 15);
PrecNumb = ayTablo[i];
compteur++;
}while( ActuelNumb == PrecNumb && compteur > 1);
Serial.println(" ");
Serial.print(ayTablo[i]);
afficherBin(ayTablo[i]);
toutEteindre();
}
afficherReponses();
attendreSaisie();
}
void afficherBin(byte bNum) {
if (bNum == 0) return;
Serial.print("\t Binaire ");
///////////////////////////////////////////////////////////
// ERRATA DANS LE LIVRE: IL FAUT AFFICHER LE MSB EN PREMIER
if (bitRead(bNum, 3)) agir(yLed8, LUMIN);
else agir(yLed8, 0);
if (bitRead(bNum, 2)) agir(yLed4, LUMIN);
else agir(yLed4, 0);
if (bitRead(bNum, 1)) agir(yLed2, LUMIN);
else agir(yLed2, 0);
if (bitRead(bNum, 0)) agir(yLed1, LUMIN);
else agir(yLed1, 0);
delay(PAUSE*3);
}
void agir(byte bBroche, byte bValeur) {
analogWrite(bBroche, bValeur);
Serial.print(boolean(bValeur));
}
void toutEteindre() {
analogWrite(yLed8, 0);
analogWrite(yLed4, 0);
analogWrite(yLed2, 0);
analogWrite(yLed1, 0);
delay(PAUSE*3);
}
void afficherReponses() {
delay(PAUSE*10);
Serial.println();
Serial.println("Maitre Devinum te donne les solutions : ");
for (byte i = 0; i < 10; i++) {
Serial.print(ayTablo[i]);
Serial.print(" | ");
}
Serial.println();
Serial.println("****************** ");
Serial.println("Clic dans zone de saisie en haut du Moniteur...");
Serial.println("... puis Espace et Entree pour autre partie !");
}
void attendreSaisie(){
while ( Serial.available() == 0 ) ; // Vigilance ici
while ( Serial.available() > 0 ) Serial.read();
Serial.flush();
}
Dans la fonction Loop, J'ai voulu rajouter une boucle do while pour éviter les doublons mais cela n'a pas eu l'effet escompter. Seriez-vous en mesure de m'aider ?
Rakushi:
La boucle do while devait éviter des doublons c'est à dire que aytablo ne peux pas renvoyer 2 valeurs idntique sauf que cela n'a pas fonctionné.
ce que vous avez codé c'est que vous ne pouvez pas avoir - à la position i la même valeur qu'il y avait avant dans cette position.
Vous n'avez pas codé qu'il ne peut pas y avoir à la position i une valeur déjà utilisée auparavant dans le tableau (si vous voulez que toutes les valeurs du tableau soient différentes)