Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Tetris.h"
- #include "Bloc.h"
- #include <ht1632c.h>
- #include <Arduino.h>
- Tetris::Tetris()
- {
- delay = 500;
- number1CurrentStep = 0;
- number2CurrentStep = 0;
- number3CurrentStep = 0;
- number4CurrentStep = 0;
- ledM = ht1632c(7, 6, 4, 5, GEOM_32x16, 2);
- // Les deux lignes suivantes font stoper mon code
- // ledM.plot(3, 3, 1);
- // ledM.sendframe();
- // Cette fonction semble aussi stoper l'exécution du code, problème mémoire ?
- // setHistorique();
- }
- void Tetris::init(byte heureD, byte heureU, byte minuteD, byte minuteU)
- {
- hD = heureD;
- hU = heureU;
- mD = minuteD;
- mU = minuteU;
- // TODO : Afficher l'heure
- writeDots();
- writeCloud();
- writeEmail();
- ledM.sendframe();
- }
- /* Points de l'heure */
- void Tetris::writeDots()
- {
- ledM.rect(18, 4, 19, 5, GREEN);
- ledM.rect(18, 8, 19, 9, GREEN);
- }
- /* Icone Nuage */
- void Tetris::writeCloud()
- {
- ledM.plot(40, 13, GREEN);
- ledM.line(41, 12, 42, 12, GREEN);
- ledM.line(43, 11, 45, 11, GREEN);
- ledM.line(46, 12, 46, 13, GREEN);
- // Barre du bas
- ledM.line(40, 14, 46, 14, GREEN);
- }
- /* Icone Email */
- void Tetris::writeEmail()
- {
- ledM.rect(40, 2, 46, 6, GREEN);
- ledM.plot(42, 3, GREEN);
- ledM.plot(44, 3, GREEN);
- ledM.plot(43, 4, GREEN);
- }
- void Tetris::setDate(byte heureD, byte heureU, byte minuteD, byte minuteU)
- {
- Serial.print("Heure ds1307 : ");
- Serial.print(heureD);
- Serial.print(heureU);
- Serial.print(" : ");
- Serial.print(minuteD);
- Serial.println(minuteU);
- Serial.print("Heure tetris : ");
- Serial.print(hD);
- Serial.print(hU);
- Serial.print(" : ");
- Serial.print(mD);
- Serial.println(mU);
- // Dizaines d'heure différente ?
- if(hD != heureD)
- check(HEURE_DIZAINES, heureD);
- if(hU != heureU)
- check(HEURE_UNITES, heureU);
- if(mD != minuteD)
- check(MINUTE_DIZAINES, minuteD);
- if(mU != minuteU)
- check(MINUTE_UNITES, minuteU);
- }
- void Tetris::check(byte type, byte number)
- {
- /*
- Serial.print("Changement : ");
- Serial.print(type);
- Serial.print("- Nombre : ");
- Serial.print(number);
- Serial.println("--------");
- */
- time = millis();
- switch(type)
- {
- case HEURE_DIZAINES:
- if(number1lastUpdate == 0 || (number1lastUpdate + delay) < time)
- {
- change(type, number);
- }
- break;
- case HEURE_UNITES :
- if(number2lastUpdate == 0 || (number2lastUpdate + delay) < time)
- {
- change(type, number);
- }
- break;
- case MINUTE_DIZAINES:
- if(number3lastUpdate == 0 || (number3lastUpdate + delay) < time)
- {
- change(type, number);
- }
- break;
- case MINUTE_UNITES:
- if(number4lastUpdate == 0 || (number4lastUpdate + delay) < time)
- {
- change(type, number);
- }
- break;
- }
- }
- void Tetris::getPosition(byte &posX, byte &posY, byte number, byte k)
- {
- if(historique[number][k].posx > 0)
- posX = historique[number][k].posx;
- if(historique[number][k].posy > 0)
- posY = historique[number][k].posy;
- if(posY == 0)
- {
- if(TETRIS_HEIGHT - historique[number][k].finaly + historique[number][k].height >= TETRIS_HEIGHT)
- {
- if(historique[number][k].width == 1)
- posX = 3;
- else
- posX = floor(TETRIS_WIDTH / historique[number][k].width);
- }
- }
- else
- {
- // Check X
- if(historique[number][k].finalx != posX)
- {
- if(historique[number][k].finalx < posX)
- posX -= 1;
- else
- posX += 1;
- }
- }
- posY++;
- historique[number][k].posx = posX;
- historique[number][k].posy = posY;
- }
- void Tetris::change(byte type, byte number)
- {
- unsigned int step;
- unsigned int passe;
- /*
- Serial.print("TYPE : ");
- Serial.print(type);
- Serial.print(" -- Number : ");
- Serial.println(number);
- Serial.print("Etape : ");
- Serial.println(int(step), DEC);
- */
- if(type == HEURE_DIZAINES)
- {
- step = number1CurrentStep;
- }
- else if(type == HEURE_UNITES)
- {
- step = number2CurrentStep;
- }
- else if(type == MINUTE_DIZAINES)
- {
- step = number3CurrentStep;
- }
- else if(type == MINUTE_UNITES)
- {
- step = number4CurrentStep;
- }
- // TODO: On remet à 0 les leds correspondant à notre type
- int nbItems = 0;
- for(int i=0;i<ARRAYSIZE(historique[number]);i++)
- {
- nbItems++;
- if(historique[number][i].id == 255)
- break;
- // if(passe < step)
- // continue;
- // TODO: Vérifier sur l'étape correspond
- byte posX = 0;
- byte posY = 0;
- if(i > 0)
- {
- byte start = (i < 10) ? 0 : i - 9;
- for(int j=start;j<i;j++)
- {
- getPosition(posX, posY, number, j);
- // TODO : Affichage du bloc sur la matrice
- // Serial.println(historique[number][j].id);
- displayBloc(historique[number][j].id, type, posX, posY);
- passe++;
- }
- }
- getPosition(posX, posY, number, i);
- // TODO : Affichage du bloc sur la matrice
- // Serial.println(historique[number][i].id);
- displayBloc(historique[number][i].id, type, posX, posY);
- passe++;
- }
- int nbSteps = 0;
- if(nbItems > 0)
- nbSteps = (nbItems - 1) * nbItems / 2;
- Serial.print("MAX STEPS : ");
- Serial.print(nbSteps);
- Serial.print("CURRENT STEPS : ");
- Serial.print(step);
- if(type == HEURE_DIZAINES)
- {
- number1CurrentStep++;
- if(number1CurrentStep >= nbSteps)
- {
- hD = number;
- number1CurrentStep = 0;
- }
- }
- else if(type == HEURE_UNITES)
- {
- number2CurrentStep++;
- if(number2CurrentStep >= nbSteps)
- {
- hU = number;
- number2CurrentStep = 0;
- }
- }
- else if(type == MINUTE_DIZAINES)
- {
- number3CurrentStep++;
- if(number3CurrentStep >= nbSteps)
- {
- mD = number;
- number3CurrentStep = 0;
- }
- }
- else if(type == MINUTE_UNITES)
- {
- number4CurrentStep++;
- if(number4CurrentStep >= nbSteps)
- {
- mU = number;
- number4CurrentStep = 0;
- }
- }
- // TODO: On envoie la frame
- }
- void Tetris::displayBloc(byte bloc, byte type, byte x, byte y)
- {
- x += type * TETRIS_WIDTH + ( TETRIS_PADDING * type ) - TETRIS_WIDTH;
- if(type >= 3)
- x += 4;
- y += TETRIS_PADDING;
- // TODO : Eviter ce bugfix
- if(y > (TETRIS_HEIGHT + TETRIS_PADDING))
- return;
- Serial.print("Affichage bloc ");
- Serial.print(bloc);
- Serial.print("a la position : (");
- Serial.print(x);
- Serial.print(";");
- Serial.print(y);
- Serial.println(")");
- switch(bloc)
- {
- case 0:
- ledM.line(x, y, x + 4, y, GREEN);
- break;
- case 1:
- ledM.line(x, y, x, y + 4, GREEN);
- break;
- case 2:
- ledM.line(x, y, x, y + 2, GREEN);
- ledM.plot(x + 1, y + 2, GREEN);
- break;
- case 3:
- ledM.line(x, y + 1, x + 2, y + 1, GREEN);
- ledM.plot(x, y, GREEN);
- break;
- case 4:
- ledM.line(x + 1, y, x + 1, y + 2, GREEN);
- ledM.plot(x, y + 2, GREEN);
- break;
- case 5:
- ledM.line(x, y + 1, x + 2, y + 1, GREEN);
- ledM.plot(x + 2, y, GREEN);
- break;
- case 6:
- ledM.line(x, y + 1, x + 2, y + 1, GREEN);
- ledM.plot(x + 1, y, GREEN);
- break;
- case 7:
- ledM.rect(x, y, x + 1, y + 1, GREEN);
- break;
- case 8:
- ledM.line(x, y, x, y + 2, GREEN);
- ledM.plot(x + 1, y + 1, GREEN);
- break;
- case 9:
- ledM.line(x, y, x + 2, y, GREEN);
- ledM.plot(x, y + 1, GREEN);
- break;
- case 10:
- ledM.line(x, y, x, y + 2, GREEN);
- ledM.plot(x + 1, y, GREEN);
- break;
- }
- ledM.sendframe();
- }
- void Tetris::setHistorique()
- {
- //////
- ////// 0
- //////
- b.setId(5);
- b.setFinalPos(0, 10);
- historique[0][0] = b;
- b.setId(7);
- b.setFinalPos(3, 10);
- historique[0][1] = b;
- b.setId(1);
- b.setFinalPos(5, 10);
- historique[0][2] = b;
- b.setId(1);
- b.setFinalPos(0, 9);
- historique[0][3] = b;
- b.setId(1);
- b.setFinalPos(1, 9);
- historique[0][4] = b;
- b.setId(10);
- b.setFinalPos(4, 8);
- historique[0][5] = b;
- b.setId(2);
- b.setFinalPos(4, 5);
- historique[0][6] = b;
- b.setId(4);
- b.setFinalPos(0, 5);
- historique[0][7] = b;
- b.setId(1);
- b.setFinalPos(0, 4);
- historique[0][8] = b;
- b.setId(1);
- b.setFinalPos(5, 4);
- historique[0][9] = b;
- b.setId(0);
- b.setFinalPos(1, 2);
- historique[0][10] = b;
- b.setId(0);
- b.setFinalPos(1, 1);
- historique[0][11] = b;
- //////
- ////// 1
- //////
- b.setId(1);
- b.setFinalPos(4, 10);
- historique[1][0] = b;
- b.setId(1);
- b.setFinalPos(5, 10);
- historique[1][1] = b;
- b.setId(2);
- b.setFinalPos(4, 6);
- historique[1][2] = b;
- b.setId(1);
- b.setFinalPos(5, 5);
- historique[1][3] = b;
- b.setId(10);
- b.setFinalPos(4, 3);
- historique[1][4] = b;
- //////
- ////// 2
- //////
- b.setId(1);
- b.setFinalPos(0, 10);
- historique[2][0] = b;
- b.setId(1);
- b.setFinalPos(1, 10);
- historique[2][1] = b;
- b.setId(7);
- b.setFinalPos(2, 10);
- historique[2][2] = b;
- b.setId(7);
- b.setFinalPos(4, 10);
- historique[2][3] = b;
- b.setId(3);
- b.setFinalPos(0, 6);
- historique[2][4] = b;
- b.setId(5);
- b.setFinalPos(3, 6);
- historique[2][5] = b;
- b.setId(0);
- b.setFinalPos(1, 5);
- historique[2][6] = b;
- b.setId(1);
- b.setFinalPos(4, 4);
- historique[2][7] = b;
- b.setId(1);
- b.setFinalPos(5, 4);
- historique[2][8] = b;
- b.setId(7);
- b.setFinalPos(0, 2);
- historique[2][9] = b;
- b.setId(7);
- b.setFinalPos(2, 2);
- historique[2][10] = b;
- //////
- ////// 3
- //////
- b.setId(7);
- b.setFinalPos(0, 10);
- historique[3][0] = b;
- b.setId(0);
- b.setFinalPos(2, 10);
- historique[3][1] = b;
- b.setId(0);
- b.setFinalPos(2, 9);
- historique[3][2] = b;
- b.setId(4);
- b.setFinalPos(4, 8);
- historique[3][3] = b;
- b.setId(10);
- b.setFinalPos(4, 7);
- historique[3][4] = b;
- b.setId(7);
- b.setFinalPos(2, 6);
- historique[3][5] = b;
- b.setId(1);
- b.setFinalPos(4, 4);
- historique[3][6] = b;
- b.setId(1);
- b.setFinalPos(5, 4);
- historique[3][7] = b;
- b.setId(5);
- b.setFinalPos(1, 2);
- historique[3][8] = b;
- b.setId(9);
- b.setFinalPos(0, 2);
- historique[3][9] = b;
- //////
- ////// 4
- //////
- b.setId(4);
- b.setFinalPos(4, 10);
- historique[4][0] = b;
- b.setId(1);
- b.setFinalPos(4, 9);
- historique[4][1] = b;
- b.setId(1);
- b.setFinalPos(5, 7);
- historique[4][2] = b;
- b.setId(7);
- b.setFinalPos(2, 6);
- historique[4][3] = b;
- b.setId(4);
- b.setFinalPos(0, 6);
- historique[4][4] = b;
- b.setId(10);
- b.setFinalPos(4, 5);
- historique[4][5] = b;
- b.setId(10);
- b.setFinalPos(0, 5);
- historique[4][6] = b;
- b.setId(7);
- b.setFinalPos(0, 2);
- historique[4][7] = b;
- b.setId(7);
- b.setFinalPos(4, 2);
- historique[4][8] = b;
- //////
- ////// 5
- //////
- b.setId(5);
- b.setFinalPos(1, 10);
- historique[5][0] = b;
- b.setId(9);
- b.setFinalPos(0, 10);
- historique[5][1] = b;
- b.setId(1);
- b.setFinalPos(4, 10);
- historique[5][2] = b;
- b.setId(1);
- b.setFinalPos(5, 10);
- historique[5][3] = b;
- b.setId(2);
- b.setFinalPos(0, 6);
- historique[5][4] = b;
- b.setId(0);
- b.setFinalPos(2, 6);
- historique[5][5] = b;
- b.setId(1);
- b.setFinalPos(1, 5);
- historique[5][6] = b;
- b.setId(0);
- b.setFinalPos(2, 5);
- historique[5][7] = b;
- b.setId(10);
- b.setFinalPos(0, 3);
- historique[5][8] = b;
- b.setId(7);
- b.setFinalPos(2, 2);
- historique[5][9] = b;
- b.setId(7);
- b.setFinalPos(4, 2);
- historique[5][10] = b;
- //////
- ////// 6
- //////
- b.setId(5);
- b.setFinalPos(0, 10);
- historique[6][0] = b;
- b.setId(5);
- b.setFinalPos(3, 10);
- historique[6][1] = b;
- b.setId(7);
- b.setFinalPos(0, 9);
- historique[6][2] = b;
- b.setId(4);
- b.setFinalPos(3, 9);
- historique[6][3] = b;
- b.setId(1);
- b.setFinalPos(5, 8);
- historique[6][4] = b;
- b.setId(2);
- b.setFinalPos(0, 7);
- historique[6][5] = b;
- b.setId(0);
- b.setFinalPos(1, 6);
- historique[6][6] = b;
- b.setId(0);
- b.setFinalPos(1, 5);
- historique[6][7] = b;
- b.setId(4);
- b.setFinalPos(0, 4);
- historique[6][8] = b;
- b.setId(10);
- b.setFinalPos(0, 3);
- historique[6][9] = b;
- //////
- ////// 7
- //////
- b.setId(1);
- b.setFinalPos(4, 10);
- historique[7][0] = b;
- b.setId(1);
- b.setFinalPos(5, 10);
- historique[7][1] = b;
- b.setId(2);
- b.setFinalPos(4, 6);
- historique[7][2] = b;
- b.setId(1);
- b.setFinalPos(5, 5);
- historique[7][3] = b;
- b.setId(10);
- b.setFinalPos(4, 3);
- historique[7][4] = b;
- b.setId(0);
- b.setFinalPos(0, 2);
- historique[7][5] = b;
- b.setId(0);
- b.setFinalPos(0, 1);
- historique[7][6] = b;
- //////
- ////// 8
- //////
- b.setId(0);
- b.setFinalPos(0, 10);
- historique[8][0] = b;
- b.setId(1);
- b.setFinalPos(4, 10);
- historique[8][1] = b;
- b.setId(1);
- b.setFinalPos(5, 10);
- historique[8][2] = b;
- b.setId(3);
- b.setFinalPos(1, 9);
- historique[8][3] = b;
- b.setId(10);
- b.setFinalPos(0, 9);
- historique[8][4] = b;
- b.setId(0);
- b.setFinalPos(2, 6);
- historique[8][5] = b;
- b.setId(4);
- b.setFinalPos(0, 6);
- historique[8][6] = b;
- b.setId(1);
- b.setFinalPos(0, 5);
- historique[8][7] = b;
- b.setId(0);
- b.setFinalPos(2, 5);
- historique[8][8] = b;
- b.setId(1);
- b.setFinalPos(4, 4);
- historique[8][9] = b;
- b.setId(1);
- b.setFinalPos(5, 4);
- historique[8][10] = b;
- b.setId(9);
- b.setFinalPos(1, 3);
- historique[8][11] = b;
- b.setId(0);
- b.setFinalPos(0, 1);
- historique[8][12] = b;
- //////
- ////// 9
- //////
- b.setId(7);
- b.setFinalPos(4, 10);
- historique[9][0] = b;
- b.setId(2);
- b.setFinalPos(4, 8);
- historique[9][1] = b;
- b.setId(1);
- b.setFinalPos(5, 7);
- historique[9][2] = b;
- b.setId(5);
- b.setFinalPos(1, 6);
- historique[9][3] = b;
- b.setId(9);
- b.setFinalPos(0, 6);
- historique[9][4] = b;
- b.setId(10);
- b.setFinalPos(4, 5);
- historique[9][5] = b;
- b.setId(2);
- b.setFinalPos(0, 4);
- historique[9][6] = b;
- b.setId(9);
- b.setFinalPos(1, 3);
- historique[9][7] = b;
- b.setId(7);
- b.setFinalPos(4, 2);
- historique[9][8] = b;
- b.setId(0);
- b.setFinalPos(0, 1);
- historique[9][9] = b;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement