BastatDoreau / Mbed 2 deprecated MoveYourTetris

Dependencies:   mbed APDS_9960 mbed-rtos

Dependents:   MoveYourTetris_OK

Committer:
Willheisen
Date:
Sun Apr 10 17:46:03 2016 +0000
Revision:
11:c37922a0a915
Parent:
10:9ef3f520ff6c
Child:
12:7afdbc7465ac
Mouvements et gestion de la descente OK  pour le "L"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
clementdoreau 1:ab5f440f4156 1 #include "cMatrice.h"
Willheisen 9:6f3d8b714a59 2 #include <algorithm>
Willheisen 9:6f3d8b714a59 3
Willheisen 9:6f3d8b714a59 4 // CONSTRUCTEURS
clementdoreau 1:ab5f440f4156 5
Willheisen 9:6f3d8b714a59 6 cMatrice::cMatrice()
Willheisen 9:6f3d8b714a59 7 {
Willheisen 9:6f3d8b714a59 8
Willheisen 9:6f3d8b714a59 9 }
clementdoreau 1:ab5f440f4156 10
Willheisen 9:6f3d8b714a59 11 cMatrice::cMatrice(unsigned char c, unsigned char l)
Willheisen 9:6f3d8b714a59 12 {
Willheisen 9:6f3d8b714a59 13 _lig = l;
Willheisen 9:6f3d8b714a59 14 _col = c;
Willheisen 9:6f3d8b714a59 15 _matrice = new unsigned char*[_lig];
Willheisen 11:c37922a0a915 16 for(unsigned char i = 0; i < _lig; i++) {
Willheisen 11:c37922a0a915 17 _matrice[i] = new unsigned char[_col];
Willheisen 11:c37922a0a915 18 }
Willheisen 11:c37922a0a915 19 clear();
Willheisen 9:6f3d8b714a59 20 }
clementdoreau 1:ab5f440f4156 21
Willheisen 9:6f3d8b714a59 22 // DESTRUCTEUR
Willheisen 9:6f3d8b714a59 23 cMatrice::~cMatrice()
Willheisen 9:6f3d8b714a59 24 {
Willheisen 11:c37922a0a915 25 for(unsigned char i = 0; i < _lig; i++) {
Willheisen 11:c37922a0a915 26 delete[] _matrice[i];
Willheisen 11:c37922a0a915 27 delete[] _matrice;
Willheisen 11:c37922a0a915 28 }
clementdoreau 1:ab5f440f4156 29 }
clementdoreau 1:ab5f440f4156 30
Willheisen 9:6f3d8b714a59 31 // GETTER
Willheisen 9:6f3d8b714a59 32 unsigned char cMatrice::getValTab(unsigned char l, unsigned char c)
Willheisen 9:6f3d8b714a59 33 {
Willheisen 9:6f3d8b714a59 34 return _matrice[l][c];
clementdoreau 1:ab5f440f4156 35 }
clementdoreau 1:ab5f440f4156 36
Willheisen 11:c37922a0a915 37 unsigned char cMatrice::getCol()
Willheisen 11:c37922a0a915 38 {
Willheisen 11:c37922a0a915 39 return _col;
Willheisen 9:6f3d8b714a59 40 }
clementdoreau 1:ab5f440f4156 41
Willheisen 11:c37922a0a915 42 unsigned char cMatrice::getLig()
Willheisen 11:c37922a0a915 43 {
Willheisen 11:c37922a0a915 44 return _lig;
Willheisen 9:6f3d8b714a59 45 }
Willheisen 3:493dd1cf30a4 46
Willheisen 11:c37922a0a915 47 cForme* cMatrice::get_pForme()
Willheisen 11:c37922a0a915 48 {
Willheisen 11:c37922a0a915 49 return _pForme;
Willheisen 11:c37922a0a915 50 }
clementdoreau 1:ab5f440f4156 51 // SETTER
clementdoreau 7:4b283e36b147 52
Willheisen 11:c37922a0a915 53 void cMatrice::setCol(unsigned char c)
Willheisen 11:c37922a0a915 54 {
Willheisen 11:c37922a0a915 55 _col = c;
Willheisen 9:6f3d8b714a59 56 }
clementdoreau 7:4b283e36b147 57
Willheisen 11:c37922a0a915 58 void cMatrice::setLig(unsigned char l)
Willheisen 11:c37922a0a915 59 {
Willheisen 11:c37922a0a915 60 _lig = l;
Willheisen 9:6f3d8b714a59 61 }
Willheisen 9:6f3d8b714a59 62
clementdoreau 7:4b283e36b147 63
Willheisen 9:6f3d8b714a59 64 // METHODES
clementdoreau 7:4b283e36b147 65
Willheisen 4:b7a46af55574 66 // Paramètres:
Willheisen 4:b7a46af55574 67 // f: Forme à afficher
Willheisen 4:b7a46af55574 68 // c: Couleur
clementdoreau 10:9ef3f520ff6c 69 void cMatrice::afficherForme(cForme* f, unsigned char c)
Willheisen 9:6f3d8b714a59 70 {
Willheisen 11:c37922a0a915 71 _pForme = f;
Willheisen 11:c37922a0a915 72 // Changement de couleur des Leds
Willheisen 9:6f3d8b714a59 73 for (int i = 0; i < 4; i++) {
Willheisen 11:c37922a0a915 74 _pForme->getLed(i).setCouleur(c);
clementdoreau 10:9ef3f520ff6c 75 _matrice[_pForme->getLed(i).getPositionX()][_pForme->getLed(i).getPositionY()] = c;
Willheisen 11:c37922a0a915 76
Willheisen 9:6f3d8b714a59 77 }
Willheisen 4:b7a46af55574 78 }
Willheisen 4:b7a46af55574 79
Willheisen 4:b7a46af55574 80
Willheisen 4:b7a46af55574 81 // Description:
Willheisen 4:b7a46af55574 82 // Nettoyage de la matrice, passage à 0 de la valeur de chaque Led
Willheisen 9:6f3d8b714a59 83 void cMatrice::clear()
Willheisen 9:6f3d8b714a59 84 {
Willheisen 11:c37922a0a915 85 for(unsigned char i = 0; i < _lig; i++) {
Willheisen 11:c37922a0a915 86 for(unsigned char j = 0; j < _col; j++) {
Willheisen 11:c37922a0a915 87 _matrice[i][j] = LED_NOIR;
Willheisen 11:c37922a0a915 88 }
Willheisen 11:c37922a0a915 89 }
Willheisen 11:c37922a0a915 90 _matrice[0][0] = LED_ROUGE;
Willheisen 4:b7a46af55574 91 }
clementdoreau 1:ab5f440f4156 92
Willheisen 11:c37922a0a915 93 void cMatrice::updateMatrice()
clementdoreau 10:9ef3f520ff6c 94 {
Willheisen 11:c37922a0a915 95 // On éteint les leds de la pièce
Willheisen 11:c37922a0a915 96 for (int i = 0; i < 4; i++) {
clementdoreau 10:9ef3f520ff6c 97 _matrice[_pForme->getLed(i).getOldPositionX()][_pForme->getLed(i).getOldPositionY()] = LED_NOIR;
clementdoreau 10:9ef3f520ff6c 98 }
clementdoreau 10:9ef3f520ff6c 99 // Affichage de la nouvelle position
Willheisen 11:c37922a0a915 100 afficherForme(_pForme, _pForme->getLed(0).getCouleur());
clementdoreau 10:9ef3f520ff6c 101 ///////////////////////////////////////////////////////////////////////////////////////////////
clementdoreau 10:9ef3f520ff6c 102 // Controle de la collision avec les bords
clementdoreau 10:9ef3f520ff6c 103 ///////////////////////////////////////////////////////////////////////////////////////////////
clementdoreau 10:9ef3f520ff6c 104 }
Willheisen 11:c37922a0a915 105
Willheisen 11:c37922a0a915 106 unsigned char cMatrice::verificationMvt(unsigned char c)
Willheisen 11:c37922a0a915 107 {
Willheisen 11:c37922a0a915 108 unsigned char result = 0;
Willheisen 11:c37922a0a915 109 Serial pc(USBTX, USBRX);
Willheisen 11:c37922a0a915 110 /*unsigned char position[4][2]= {0};
Willheisen 11:c37922a0a915 111 unsigned char positionXMin = 7;
Willheisen 11:c37922a0a915 112 unsigned char positionXMax = 0;
Willheisen 11:c37922a0a915 113 unsigned char positionYMax = 0;
Willheisen 11:c37922a0a915 114
Willheisen 11:c37922a0a915 115 //on cherche la coordonnées de la/les LED(s) de la pièce la/les plus basse(s)
Willheisen 11:c37922a0a915 116 for (int i = 0; i < 4; i++) {
Willheisen 11:c37922a0a915 117 if(_pForme->getLed(i).getPositionX() > position[i][0]) {
Willheisen 11:c37922a0a915 118 position[i][0] = _pForme->getLed(i).getPositionX();
Willheisen 11:c37922a0a915 119 }
Willheisen 11:c37922a0a915 120 if(_pForme->getLed(i).getPositionY() > position[i][1]) {
Willheisen 11:c37922a0a915 121 position[i][1] = _pForme->getLed(i).getPositionY();
Willheisen 11:c37922a0a915 122 }
Willheisen 11:c37922a0a915 123 }
Willheisen 11:c37922a0a915 124
Willheisen 11:c37922a0a915 125 for (int i = 0; i < 4; i++) {
Willheisen 11:c37922a0a915 126 if(position[i][0] > positionXMax) {
Willheisen 11:c37922a0a915 127 positionXMax = position[i][0];
Willheisen 11:c37922a0a915 128 } else if(position[i][0] < positionXMin) {
Willheisen 11:c37922a0a915 129 positionXMin = position[i][0];
Willheisen 11:c37922a0a915 130 }
Willheisen 11:c37922a0a915 131 if (position[i][1] > positionYMax) {
Willheisen 11:c37922a0a915 132 positionYMax = position[i][1];
Willheisen 11:c37922a0a915 133 }
Willheisen 11:c37922a0a915 134 }
Willheisen 11:c37922a0a915 135 pc.printf("Xmin= %d, Xmax= %d, Ymax = %d \n", positionXMin, positionXMax, positionYMax);
Willheisen 11:c37922a0a915 136 */
Willheisen 11:c37922a0a915 137 //POUR UN L
Willheisen 11:c37922a0a915 138 if(_pForme->getTypeForme() == 4) {
Willheisen 11:c37922a0a915 139
Willheisen 11:c37922a0a915 140 switch(_pForme->getOrientation()) {
Willheisen 11:c37922a0a915 141 //En orientation de base:
Willheisen 11:c37922a0a915 142 case 1: {
Willheisen 11:c37922a0a915 143 //Si la LED en dessous de la LED 0 est noire
Willheisen 11:c37922a0a915 144 if(_matrice[_pForme->getLed(0).getPositionX()][_pForme->getLed(0).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 145 //Et si la LED en dessous de la LED 2 est noire
Willheisen 11:c37922a0a915 146 if(_matrice[_pForme->getLed(2).getPositionX()][_pForme->getLed(2).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 147 //Et si la LED en dessous de la LED 3 est noire
Willheisen 11:c37922a0a915 148 if(_matrice[_pForme->getLed(3).getPositionX()][_pForme->getLed(3).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 149 //alors on peut descendre la piece
Willheisen 11:c37922a0a915 150 result = 1;
Willheisen 11:c37922a0a915 151 }
Willheisen 11:c37922a0a915 152 }
Willheisen 11:c37922a0a915 153 }
Willheisen 11:c37922a0a915 154 break;
Willheisen 11:c37922a0a915 155 }
Willheisen 11:c37922a0a915 156 //En orientation 2:
Willheisen 11:c37922a0a915 157 case 2: {
Willheisen 11:c37922a0a915 158 //Si la LED en dessous de la LED 0 est noire
Willheisen 11:c37922a0a915 159 if(_matrice[_pForme->getLed(0).getPositionX()][_pForme->getLed(0).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 160 //Et si la LED en dessous de la LED 3 est noire
Willheisen 11:c37922a0a915 161 if(_matrice[_pForme->getLed(3).getPositionX()][_pForme->getLed(3).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 162 //alors on peut descendre la piece
Willheisen 11:c37922a0a915 163 result = 1;
Willheisen 11:c37922a0a915 164 }
Willheisen 11:c37922a0a915 165
Willheisen 11:c37922a0a915 166 }
Willheisen 11:c37922a0a915 167 break;
Willheisen 11:c37922a0a915 168 }
Willheisen 11:c37922a0a915 169 //En orientation 3:
Willheisen 11:c37922a0a915 170 case 3: {
Willheisen 11:c37922a0a915 171 //Si la LED en dessous de la LED 1 est noire
Willheisen 11:c37922a0a915 172 if(_matrice[_pForme->getLed(1).getPositionX()][_pForme->getLed(1).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 173 //Et si la LED en dessous de la LED 2 est noire
Willheisen 11:c37922a0a915 174 if(_matrice[_pForme->getLed(2).getPositionX()][_pForme->getLed(2).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 175 //Et si la LED en dessous de la LED 3 est noire
Willheisen 11:c37922a0a915 176 if(_matrice[_pForme->getLed(3).getPositionX()][_pForme->getLed(3).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 177 //alors on peut descendre la piece
Willheisen 11:c37922a0a915 178 result = 1;
Willheisen 11:c37922a0a915 179 }
Willheisen 11:c37922a0a915 180 }
Willheisen 11:c37922a0a915 181 }
Willheisen 11:c37922a0a915 182 break;
Willheisen 11:c37922a0a915 183 }
Willheisen 11:c37922a0a915 184 //En orientation 4:
Willheisen 11:c37922a0a915 185 case 4: {
Willheisen 11:c37922a0a915 186 //Si la LED en dessous de la LED 0 est noire
Willheisen 11:c37922a0a915 187 if(_matrice[_pForme->getLed(0).getPositionX()][_pForme->getLed(0).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 188 //Et si la LED en dessous de la LED 1 est noire
Willheisen 11:c37922a0a915 189 if(_matrice[_pForme->getLed(1).getPositionX()][_pForme->getLed(1).getPositionY() + 1] == LED_NOIR) {
Willheisen 11:c37922a0a915 190 //alors on peut descendre la piece
Willheisen 11:c37922a0a915 191 result = 1;
Willheisen 11:c37922a0a915 192 }
Willheisen 11:c37922a0a915 193 }
Willheisen 11:c37922a0a915 194 break;
Willheisen 11:c37922a0a915 195 }
Willheisen 11:c37922a0a915 196 }
Willheisen 11:c37922a0a915 197 }
Willheisen 11:c37922a0a915 198
Willheisen 11:c37922a0a915 199
Willheisen 11:c37922a0a915 200 pc.printf("%d\n", result);
Willheisen 11:c37922a0a915 201
Willheisen 11:c37922a0a915 202
Willheisen 11:c37922a0a915 203
Willheisen 11:c37922a0a915 204
Willheisen 11:c37922a0a915 205 /* switch(c) {
Willheisen 11:c37922a0a915 206 //si c'est un déplacement vers le bas
Willheisen 11:c37922a0a915 207 case 'b': {
Willheisen 11:c37922a0a915 208 if(
Willheisen 11:c37922a0a915 209 break;
Willheisen 11:c37922a0a915 210 }
Willheisen 11:c37922a0a915 211
Willheisen 11:c37922a0a915 212 }*/
Willheisen 11:c37922a0a915 213 return result;
Willheisen 11:c37922a0a915 214 }