#include "LiquidCrystal_I2C.h"
#include "Wire.h"
LiquidCrystal_I2C LCD(0x27,16,2); // définit le type d'écran lcd 16 x 2
//Déclaration des variables
const int butHaut = 2;
const int butBas = 3;
int etatHaut=HIGH;
int etatBas=HIGH;
//Déclaration des objets
byte perso[8] = {
B00000,
B01100,
B01100,
B10010,
B01100,
B01100,
B01100,
B10010
};
byte perso2[8] = {
B10101,
B01010,
B10101,
B01010,
B10101,
B01010,
B10101,
B01010
};
byte tir[8] = {
B01000,
B01000,
B01000,
B11100,
B01010,
B00111,
B00010,
B00101
};
byte objBas[8] = {
B10010,
B01100,
B01010,
B10101,
B01010,
B00100,
B01010,
B10001
};
byte adv[8] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00100
};
byte next[8] = {
B11111,
B10001,
B11011,
B10001,
B11111,
B10001,
B11111,
B11111
};
//-----------------------------------------------------------
// FONCTION SETUP
//-----------------------------------------------------------
void setup() { //On va créer l'interface joueur pour débuter la partie
//Configuration des boutons
Serial.begin(115200);
pinMode(butHaut, INPUT_PULLUP);
pinMode(butBas, INPUT_PULLUP);
//LCD.begin(16, 2);
LCD.init(); // initialisation de l'afficheur
LCD.backlight();
LCD.clear() ;
//Création des figures
LCD.createChar(7, perso2) ; //pers en haut
LCD.createChar(8, perso) ; //pers en bas
LCD.createChar(3, tir);
LCD.createChar(4, objBas);
LCD.createChar(5, adv);
LCD.createChar(9, next);
//Message de bienvenu
LCD.setCursor(4,0); LCD.print("Bienvenue");
LCD.setCursor(4,1); LCD.print("Joueur!");
delay(4000);
//Affiche les instructions
LCD.clear();
LCD.setCursor(1,0) ; LCD.print("Evite le "); LCD.write(byte(4));
LCD.setCursor(1,1); LCD.print("Tire sur le "); LCD.write(byte(5));
LCD.setCursor(15,1); LCD.write(byte(9));
delay(2000);
LCD.clear() ;
}
//-----------------------------------------------------------
// Déclaration des variables du loop
//-----------------------------------------------------------
int compteur_pos_perso = millis() ;
int compteur_pos_adv = millis() ;
long espace = random(3,5);
int compteurEsp = 0 ;
int tab_pos1[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ;
int tab_pos2[16]={0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,5} ;
int choixObj = random(4,5) ;
int vitesse_Pers = 1000 ;
int vitesse_Adv = 300 ;
//-----------------------------------------------------------
// FONCTION LOOP
//-----------------------------------------------------------
/* 7, perso2
* 8, perso
* 3, tir
* 4, objBas
* 5, adv
* 9, next */
void loop() {
etatHaut= digitalRead(butHaut);
etatBas= digitalRead(butBas);
if (tab_pos2[2]==8 && !etatHaut) { //Le pers saute
Serial.println("bouton pressé");
delay(200);
tab_pos2[2]=0; tab_pos1[2]=7 ; //Le perso saute
compteur_pos_perso = millis() ; //pour compter le temps du perso en l'air
}
//Saut du personnage
if (tab_pos1[2]==7 && (millis() > compteur_pos_perso+1000) ) { //Le pers
tab_pos1[2]=0; tab_pos2[2]=8 ; //Le perso redescend
}
/*PARTIE A MIEUX COMPRENDRE
* compteurEsp et espace permettent de faire venir
les nouveaux ennemis dans un certain timing et un
certain espacement d'avec les précédents ennemis
-----------------------------------------------*/
//Actualisation des positions des adv
if (millis() > compteur_pos_adv+vitesse_Adv) {
for (int i=0 ; i<=15 ; i++) {
if (tab_pos2[i]==5 || tab_pos2[i]==4) {
tab_pos2[i-1]=tab_pos2[i] ;
tab_pos2[i]=0 ;
}
}
compteurEsp ++ ;//c le temps necessaire à la réapparition de nouveaux objets
compteur_pos_adv = millis() ;
vitesse_Adv = vitesse_Adv-1 ;
vitesse_Pers = vitesse_Pers-3 ;
}
if (compteurEsp > espace) {
tab_pos2[15]=choixObj ;
compteurEsp = 0 ;
espace=random(3,8);
choixObj = random(4,6);
}
//Tirer
if (!etatBas) {
Serial.println("bouton pressé");
delay(200);
for (int i = 0 ; i<=15 ; i++) {
if(tab_pos2[i]==5) {
tab_pos2[i]=3 ;
}
}
}
//Tu as erdu !!!
int p = 0;
if ( (tab_pos2[2]==5 || tab_pos2[2]==4) && tab_pos1[2]!=7) {
LCD.clear();
LCD.setCursor(0,0);
LCD.print(" Tu as perdu") ;
LCD.setCursor(7,1); LCD.print("!!!");
delay(3000) ;
}
//Actualiser l'affichage
LCD.setCursor(0,0);
for (int i = 0 ; i<=15 ; i++) {
if(tab_pos1[i]!=0) {
LCD.write(byte(tab_pos1[i])) ;
}
else {
LCD.print(" ");
}
}
LCD.setCursor(0,1);
for (int i = 0 ; i<=15 ; i++) {
if(tab_pos2[i]!=0) {
LCD.write(byte(tab_pos2[i])) ;
}
else {
LCD.print(" ");
}
}
delay(100);
}