Mini projet LOO
Dependencies: mbed APDS_9960 mbed-rtos
Home du projet
src/cJeu.cpp
- Committer:
- clementdoreau
- Date:
- 2016-04-12
- Revision:
- 18:45dbd9948c97
- Parent:
- 17:e03163d4e367
- Child:
- 19:9e3551d418d5
File content as of revision 18:45dbd9948c97:
#include "cJeu.h" cJeu::cJeu() { _mat = new cMatrice(8,8); //on initialise la générateur de nombres pseudo-aléatoires srand(time(NULL)); } cMatrice* cJeu::get_matrice() { return _mat; } unsigned char cJeu::get_score() { return _score; } void cJeu::set_matrice(cMatrice *mat) { _mat = mat; } void cJeu::set_score(unsigned char sc) { _score = sc; } void cJeu::initialiser() { _spi.initSPI(100000, 8, 3); _mat->clear(); _spi.envoyerMatrice(*_mat); } // Description: // Créé une nouvelle pièce et renvoi l'adresse de cette dernière 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; //on génère un deuxième nombre pour choisir la couleur de la pièce int couleur = 1 + ((float)rand()/RAND_MAX) * 8; //selon le nombre généré, on va créer une nouvelle pièce switch(nb) { //on crée une pièce "L" case 1: { _ptrForme = new cEl(3,0); break; } //on crée une pièce "ligne" case 2: { _ptrForme = new cLigne(3,0); break; } //on crée une pièce "Z" case 3: { _ptrForme = new cZed(3,0); break; } //on crée une pièce "T" case 4: { _ptrForme = new cTe(3,0); break; } //on crée une pièce "carré" case 5: { _ptrForme = new cCarre(3,0); break; } default: {} } //puis on affiche la nouvelle pièce _mat->afficherForme(_ptrForme, couleur); _spi.envoyerMatrice(*_mat); } cJeu::~cJeu() { delete _ptrForme; } void cJeu::nouvelleManche() { //cJeu::nouvelleLigne(); //tant que l'on peut descendre //while(frfd) //puis on teste si une ligne est complete cJeu::ligneComplete(); } 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 on fait descendre toutes les pièces au-dessus de la ligne(autres que celle de la manche) d'un cran. */ for( unsigned char i = 0; i < _mat->getLig(); i++) { total = 0; for( unsigned char j = 0; j < _mat->getCol(); j++) { if(_mat->getValTab(j, i) != LED_NOIR) { total ++; } if(total == 8) { numLigne = i; break; } else{ return 0; // PAS DE LIGNE COMPLETE } } } pc.printf("numLigne: %d\n", numLigne); ////////////////////////////////////////////// //On descend toutes les LEDs allumées au dessus de numLigne d'un cran if(numLigne != 0) { for( unsigned char i = 0; i < numLigne; i++) { total = 0; for( unsigned char j = 0; j < _mat->getCol(); j++) { _mat->setValTab(j, i, _mat->getValTab(j-1, i)); } } //Et on augmente le score! _score+=10; } return 1; } int cJeu::partieEnCours(){ Serial pc(USBTX, USBRX); // tx, rx _mat->setValTab(7, 0, LED_VERT); _mat->setValTab(7, 7, LED_VERT); _mat->setValTab(7, 6, LED_VERT); _mat->setValTab(0, 7, LED_VERT); cCollision col; //////////////////////////////////////// // DEMANDE UTILISATEUR //////////////////////////////////////// // CONTROLE COLLISION //////////////////////////////////////// // MOUVEMENT while(col.pieceBas(*_ptrForme, *_mat) == false) { _ptrForme->deplacementBas(); _mat->updateMatrice(); _spi.envoyerMatrice(*_mat); wait(0.2); } while(col.pieceGauche(*_ptrForme, *_mat) == false) { _ptrForme->deplacementGauche(); _mat->updateMatrice(); _spi.envoyerMatrice(*_mat); wait(0.2); } while(col.pieceDroite(*_ptrForme, *_mat) == false) { _ptrForme->deplacementDroite(); _mat->updateMatrice(); _spi.envoyerMatrice(*_mat); wait(0.2); } pc.printf(" Collision !!!!\n"); //////////////////////////////////////// // CONTROLE LIGNE COMPLETE //fin(); nouvellePiece(); while(col.pieceBas(*_ptrForme, *_mat) == false) { _ptrForme->deplacementBas(); _mat->updateMatrice(); _spi.envoyerMatrice(*_mat); wait(0.2); } while(col.pieceGauche(*_ptrForme, *_mat) == false) { _ptrForme->deplacementGauche(); _mat->updateMatrice(); _spi.envoyerMatrice(*_mat); wait(0.2); } while(col.pieceDroite(*_ptrForme, *_mat) == false) { _ptrForme->deplacementDroite(); _mat->updateMatrice(); _spi.envoyerMatrice(*_mat); wait(0.2); } pc.printf(" Collision !!!!\n"); fin(); return 0; } void cJeu::fin() { delete _ptrForme; delete _mat; }