Mini projet LOO

Dependencies:   mbed APDS_9960 mbed-rtos

Dependents:   MoveYourTetris_OK

Home du projet

Revision:
21:f0cf4173ecdb
Parent:
20:921ffec1acb4
Child:
22:16863912486d
--- a/src/cJeu.cpp	Wed Apr 13 15:39:11 2016 +0000
+++ b/src/cJeu.cpp	Thu Apr 14 12:50:25 2016 +0000
@@ -2,9 +2,21 @@
 
 cJeu::cJeu()
 {
-    _mat = new cMatrice(8,8);
+
+}
+
+cJeu::cJeu(unsigned char x, unsigned char y)
+{
+    //: _interrupt(pb)         // create the InterruptIn on the pin specified to Counter
+        ///////////////////////////////////////////////////
+//_interrupt.rise(this, &cBoussole::detectionMvt);
+    //on crée une nouvelle matrice
+    _mat = new cMatrice(x, y);
     //on initialise la générateur de nombres pseudo-aléatoires
     srand(time(NULL));
+    ///////////////////////////////////////////
+    _boussole = new cBoussole(p9,p10);
+
 
 }
 
@@ -40,9 +52,9 @@
 void cJeu::nouvellePiece()
 {
     //on génère un nombre aléatoire entre 1 et 5 pour la pièce
-    int nb = 1 + ((float)rand()/RAND_MAX) * 5;
+    unsigned char nb = 1 + ((float)rand()/RAND_MAX) * 5;
     //on génère un deuxième nombre pour choisir la couleur de la pièce
-    int couleur = 1 + ((float)rand()/RAND_MAX) * 8;
+    unsigned char couleur = 1 + ((float)rand()/RAND_MAX) * 7;
     //selon le nombre généré, on va créer une nouvelle pièce
     switch(nb) {
             //on crée une pièce "L"
@@ -72,7 +84,41 @@
         }
         default:
         {}
+
+    }//et on choisi sa couleur
+    switch(couleur) {
+        case 1: {
+            couleur = LED_ROUGE;
+            break;
+        }
+        case 2: {
+            couleur = LED_ORANGE;
+            break;
+        }
+        case 3: {
+            couleur = LED_JAUNE;
+            break;
+        }
+        case 4: {
+            couleur = LED_VERT;
+            break;
+        }
+        case 5: {
+            couleur = LED_BLEU_CLAIR;
+            break;
+        }
+        case 6: {
+            couleur = LED_BLEU_FONCE;
+            break;
+        }
+        case 7: {
+            couleur = LED_MAGENTA;
+            break;
+        }
+        default:
+        {}
     }
+
     //puis on affiche la nouvelle pièce
     _mat->afficherForme(_ptrForme, couleur);
     _spi.envoyerMatrice(*_mat);
@@ -97,6 +143,7 @@
 unsigned char cJeu::ligneComplete()
 {
     Serial pc(USBTX, USBRX);
+
     unsigned char total = 0, numLigne = 0;
     /*on parcourt chaque ligne de la matrice.
     Si une de ces lignes est complète (c-à-d pas de LED noire), alors
@@ -134,12 +181,17 @@
 
 int cJeu::partieEnCours()
 {
-
+    /////
+    int perdu;
+    unsigned char mvt;
+    perdu = 0;
+///////////////////////////////////////////////////////////////////////
     Serial pc(USBTX, USBRX); // tx, rx
+    DigitalOut led(LED1);
+    /*
     _mat->setValTab(7, 0, LED_VERT);
-    _mat->setValTab(7, 7, LED_VERT);
-    _mat->setValTab(7, 6, LED_VERT);
-    _mat->setValTab(0, 7, LED_VERT);
+    _mat->setValTab(5, 5, LED_VERT);
+    _mat->setValTab(6, 2, LED_VERT);*/
     cCollision col;
 
     ////////////////////////////////////////
@@ -149,27 +201,114 @@
     ////////////////////////////////////////
     //  CONTROLE COLLISION
 
-
+    /*    _ptrForme = new cZed(3,0);
+        _mat->afficherForme(_ptrForme, LED_ROUGE);
+        _spi.envoyerMatrice(*_mat);*/
     ////////////////////////////////////////
     //  MOUVEMENT
-    while(1) {
-        nouvellePiece();
-        //_ptrForme = new cZed(3,0);
-        //_mat->afficherForme(_ptrForme, LED_ROUGE);
-        //_spi.envoyerMatrice(*_mat);
-        while(col.pieceBas(*_ptrForme, *_mat) == false && col.bordBas(*_ptrForme, *_mat) == false){
+    nouvellePiece();
+    if(col.pieceBas(*_ptrForme, *_mat) == true) {
+        perdu = 1;
+        wait(0.5);
+        for(unsigned char i = 0; i < _mat->getLig(); i++) {
+            for(unsigned char j = 0; j < _mat->getCol(); j++) {
+                _mat->setValTab(i, j, LED_BLEU_FONCE);
+            }
+        }
+        _spi.envoyerMatrice(*_mat);
+        wait(0.5);
+        _mat->clear();
+        _spi.envoyerMatrice(*_mat);
+    }
+    /*     _ptrForme->deplacementBas();
+      _mat->updateMatrice();
+     _spi.envoyerMatrice(*_mat);
+             wait(0.5);*/
+    while(!perdu) {
+
+
+        //si la nouvelle pièce ne peut pas descendre, alors on a perdu.
+        //on change la couleur de la matrice puis
+        //On efface la matrice
+        /*if(col.pieceBas(*_ptrForme, *_mat) == true) {
+            perdu = 1;
+            wait(0.5);
+            for(unsigned char i = 0; i < _mat->getLig(); i++) {
+                for(unsigned char j = 0; j < _mat->getCol(); j++) {
+                    _mat->setValTab(i, j, LED_BLEU_FONCE);
+                }
+            }
+            _spi.envoyerMatrice(*_mat);
+            wait(0.5);
+            _mat->clear();
+            _spi.envoyerMatrice(*_mat);
 
+        } else {
+            */
+        //while(col.pieceBas(*_ptrForme, *_mat) == false && col.bordBas(*_ptrForme, *_mat) == false) {
+        //on récupère l'information de mouvement
+        /*if(col.pieceBas(*_ptrForme, *_mat) == true || col.bordBas(*_ptrForme, *_mat) == true) {
+            perdu = 1;
+        }*/
+        
+        //led = 1;
+        //while(!mvt) {
+            mvt = _boussole->detectionMvt();
+        //}
+        //led = 0;
+        switch(mvt) {
+            case 'a': {
+                if(col.pieceBas(*_ptrForme, *_mat) == false && col.bordBas(*_ptrForme, *_mat) == false) {
+                    _ptrForme->deplacementBas();
+                }
+                break;
+            }
+            case 'g': {
+
+                if(col.pieceGauche(*_ptrForme, *_mat) == false && col.bordGauche(*_ptrForme) == false) {
+                    _ptrForme->deplacementGauche();
+                }
+                break;
+            }
+            case 'd': {
+
+                if(col.pieceDroite(*_ptrForme, *_mat) == false && col.bordDroit(*_ptrForme) == false) {
+                    _ptrForme->deplacementDroite();
+                }
+                break;
+            }
+            case  'l': {
+                if(col.pieceBas(*_ptrForme, *_mat) == false && col.bordBas(*_ptrForme, *_mat) == false) {
+                    _ptrForme->rotationHoraire();
+                }
+                break;
+            }
+            case  'r': {
+                if(col.pieceBas(*_ptrForme, *_mat) == false && col.bordBas(*_ptrForme, *_mat) == false) {
+                    _ptrForme->rotationHoraire();
+                    _ptrForme->rotationHoraire();
+                    _ptrForme->rotationHoraire();
+                }
+                break;
+            }
+            default:
+            {}
+        }
+        //on rafraîchi la matrice
+        _mat->updateMatrice();
+        _spi.envoyerMatrice(*_mat);
+        wait(0.2);
+        //et si on peut on descend la pièce
+        if(col.pieceBas(*_ptrForme, *_mat) == false && col.bordBas(*_ptrForme, *_mat) == false) {
             _ptrForme->deplacementBas();
             _mat->updateMatrice();
             _spi.envoyerMatrice(*_mat);
-            wait(0.2);
-            
+        }
+        wait(0.2);
+        //} le else
+        // pc.printf(" Collision !!!!\n");
+        //pc.printf("prochaine manche\n");
 
-        
-        }
-        pc.printf(" Collision !!!!\n");
-        pc.printf("prochaine manche\n");
-        fin();
     }
     return 0;
 }
@@ -177,5 +316,6 @@
 void cJeu::fin()
 {
     delete _ptrForme;
-    //delete _mat;
+    delete _boussole;
+    delete _mat;
 }
\ No newline at end of file