Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed APDS_9960 mbed-rtos
src/cMatrice.cpp@11:c37922a0a915, 2016-04-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |