From 93c109728d525588557e57d6139515ffff261871 Mon Sep 17 00:00:00 2001 From: kank Date: Sat, 10 Oct 2009 21:18:04 +0000 Subject: [PATCH] line numbers --- games/tetris/view.c | 81 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/games/tetris/view.c b/games/tetris/view.c index 8d09147..3d376fb 100644 --- a/games/tetris/view.c +++ b/games/tetris/view.c @@ -207,13 +207,20 @@ void tetris_view_drawBorders(uint8_t nColor) setpixel((pixel){4, y}, nColor); setpixel((pixel){15, y}, nColor); } + + uint8_t nPen; + for (y = 0; y < 5; ++y) { for (x = 0; x <= 3; ++x){ - setpixel((pixel){x, y}, nColor); - setpixel((pixel){x, y + 11}, nColor); + + if ((y<1 || y>3) || (x<1 || y>3)){ + setpixel((pixel){x, y}, nColor); + setpixel((pixel){x, y + 11}, nColor); + } } } + } @@ -238,6 +245,8 @@ void tetris_view_blinkBorders() * Argmument pPl: pointer to the playfield whose complete lines should blink * Return value: void */ + + void tetris_view_blinkLines(tetris_playfield_t *pPl) { // reduce necessity of pointer arithmetic @@ -278,6 +287,72 @@ void tetris_view_blinkLines(tetris_playfield_t *pPl) } +/* Function: tetris_view_showLineNumbers + * Description: displays completed Lines (0-99) + * Argmument pV: pointer to the view + * Argument nColor: color + * Return value: void + */ +void tetris_view_showLineNumbers (tetris_view_t *pV, uint8_t nColor) +{ + //Get number of completed lines + uint8_t Lines = tetris_logic_getLines(pV->pLogic); + uint8_t nPen; + + int x=0, y=0, i; + int ones, tens; + + ones= Lines%10; + tens=(Lines/10)%10; + + //pick drawing color, dark if ones=0, bright (piece color) otherwise + if ((ones%10)!=0) + nPen=TETRIS_VIEW_COLORPIECE; + else nPen=TETRIS_VIEW_COLORSPACE; + + //Draws ones in the upper part of the border as a 3x3 square with 0-9 pixels + //Start at column 1 + y=1; + for (i=1;i<=9;i++) + { + //Start at line 1, increase every loop cycle + x++; + + //the square is just three pixels wide, start over in next column once the row is full + if (x%4==0) + { + y++; + x=1; + } + setpixel((pixel){x,y}, nPen); + //only draw as many ones as there are, make the rest of the square dark. + if (i==ones) nPen=TETRIS_VIEW_COLORSPACE; + } + + //back to normal color, but only if tens is not divisible by 10 + if ((tens%10)!=0) + nPen=TETRIS_VIEW_COLORPIECE; + else nPen=TETRIS_VIEW_COLORSPACE; + + //Draws ones in the lower part of the border as a 3x3 square with 0-9 pixels + x=0; + y=12; //offset for lower part of the border + for (i=1;i<=9;i++) + { + x++; //Start at line 1, increase every loop cycle + + //the square is just three pixels wide, start over in next column once the row is full + if (x%4==0) + { + y++; + x=1; + } + setpixel((pixel){x,y}, nPen); + //only draw as many ones as there are, make the rest of the square dark. + if (i==tens) nPen=TETRIS_VIEW_COLORSPACE; + } +} + /**************************** * construction/destruction * ****************************/ @@ -369,6 +444,7 @@ void tetris_view_update(tetris_view_t *pV) if (tetris_playfield_getRowMask(pV->pPl) != 0) { tetris_view_blinkLines(pV->pPl); + tetris_view_showLineNumbers(pV, TETRIS_VIEW_COLORPIECE); } // draw preview piece @@ -384,6 +460,7 @@ void tetris_view_update(tetris_view_t *pV) tetris_view_blinkBorders(); pV->nOldLevel = nLevel; } + }