Mini projet LOO
Dependencies: mbed APDS_9960 mbed-rtos
Home du projet
Diff: src/cJeu.cpp
- 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