Tetris for the RA8875, derived from another users implementation.

Dependencies:   RA8875

Fork of Tetris by Sergejs Popovs

Tetris, adapted to the RA8875 graphics library and display.

As currently implemented, this version is defined for the 800x480 display. A number of macros can adapt it for other screen resolutions.

Further, while presently configured for landscape mode, it should be fairly easy to reconfigure it for portrait mode.

Committer:
sergun2311
Date:
Sat Feb 25 23:52:28 2017 +0000
Revision:
1:b4aa36ae11ac
Parent:
0:645509d95b8d
Child:
2:6b6986c3d2bd
Tetris with gestures

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sergun2311 0:645509d95b8d 1 #include "Block.h"
sergun2311 0:645509d95b8d 2 #include "mbed.h"
sergun2311 0:645509d95b8d 3 #include "playGround.h"
sergun2311 0:645509d95b8d 4 #include "Piece.h"
sergun2311 0:645509d95b8d 5 #include "Field.h"
sergun2311 1:b4aa36ae11ac 6
sergun2311 1:b4aa36ae11ac 7 Block::Block()
sergun2311 1:b4aa36ae11ac 8 {
sergun2311 0:645509d95b8d 9 form = rand() % 7;
sergun2311 0:645509d95b8d 10 angle = rand() % 4;
sergun2311 0:645509d95b8d 11 x = 4 + rand() % 2;
sergun2311 1:b4aa36ae11ac 12 y = -1;
sergun2311 1:b4aa36ae11ac 13 }
sergun2311 1:b4aa36ae11ac 14
sergun2311 1:b4aa36ae11ac 15 Block::~Block()
sergun2311 1:b4aa36ae11ac 16 {
sergun2311 1:b4aa36ae11ac 17 }
sergun2311 0:645509d95b8d 18
sergun2311 1:b4aa36ae11ac 19 void Block::rotateLeft()
sergun2311 1:b4aa36ae11ac 20 {
sergun2311 1:b4aa36ae11ac 21 if ( angle == 0 )
sergun2311 1:b4aa36ae11ac 22 angle = 3;
sergun2311 1:b4aa36ae11ac 23 else
sergun2311 1:b4aa36ae11ac 24 angle = ( abs(angle - 1) ) % 4;
sergun2311 0:645509d95b8d 25 }
sergun2311 1:b4aa36ae11ac 26
sergun2311 1:b4aa36ae11ac 27 void Block::rotateRight()
sergun2311 1:b4aa36ae11ac 28 {
sergun2311 1:b4aa36ae11ac 29 if ( angle == 3 )
sergun2311 1:b4aa36ae11ac 30 angle = 0;
sergun2311 1:b4aa36ae11ac 31 else
sergun2311 1:b4aa36ae11ac 32 angle = ( abs(angle + 1) ) % 4;
sergun2311 1:b4aa36ae11ac 33 }
sergun2311 0:645509d95b8d 34
sergun2311 1:b4aa36ae11ac 35 void Block::moveLeft()
sergun2311 1:b4aa36ae11ac 36 {
sergun2311 1:b4aa36ae11ac 37 if ( !CheckLeft() )
sergun2311 1:b4aa36ae11ac 38 x--;
sergun2311 1:b4aa36ae11ac 39 }
sergun2311 1:b4aa36ae11ac 40
sergun2311 1:b4aa36ae11ac 41 void Block::moveRight()
sergun2311 1:b4aa36ae11ac 42 {
sergun2311 1:b4aa36ae11ac 43 if ( !CheckRight() )
sergun2311 1:b4aa36ae11ac 44 x++;
sergun2311 1:b4aa36ae11ac 45 }
sergun2311 0:645509d95b8d 46
sergun2311 0:645509d95b8d 47 bool Block::CheckBottom()
sergun2311 0:645509d95b8d 48 {
sergun2311 0:645509d95b8d 49 int xx, yy;
sergun2311 0:645509d95b8d 50 for ( xx = 0 ; xx < 5 ; xx++ ) {
sergun2311 1:b4aa36ae11ac 51 for (yy = 0 ; yy < 5 ; yy++ ) {
sergun2311 1:b4aa36ae11ac 52 if ( (Piece[form][angle][xx][yy] != 0)
sergun2311 1:b4aa36ae11ac 53 && (Field[y + yy - 1][x + xx - 2] != 0) &&
sergun2311 1:b4aa36ae11ac 54 ( y + yy - 1 > 0 ) )
sergun2311 1:b4aa36ae11ac 55 return 1;
sergun2311 1:b4aa36ae11ac 56 if ( (Piece[form][angle][xx][yy] != 0) && ( yy + y == 13 ) )
sergun2311 0:645509d95b8d 57 return 1;
sergun2311 0:645509d95b8d 58 }
sergun2311 0:645509d95b8d 59 }
sergun2311 0:645509d95b8d 60 return 0;
sergun2311 1:b4aa36ae11ac 61 }
sergun2311 1:b4aa36ae11ac 62
sergun2311 1:b4aa36ae11ac 63 bool Block::CheckLeft()
sergun2311 1:b4aa36ae11ac 64 {
sergun2311 1:b4aa36ae11ac 65 int xx, yy;
sergun2311 1:b4aa36ae11ac 66 for ( xx = 0 ; xx < 5 ; xx++ ) {
sergun2311 1:b4aa36ae11ac 67 for (yy = 0 ; yy < 5 ; yy++ ) {
sergun2311 1:b4aa36ae11ac 68 if ( (Piece[form][angle][xx][yy] != 0)
sergun2311 1:b4aa36ae11ac 69 && (Field[y + yy - 1][x + xx - 3] != 0) &&
sergun2311 1:b4aa36ae11ac 70 ( y + yy - 3 > 0 ) )
sergun2311 1:b4aa36ae11ac 71 return 1;
sergun2311 1:b4aa36ae11ac 72 if ( (Piece[form][angle][xx][yy] != 0) && ( xx + x == 2 ) )
sergun2311 1:b4aa36ae11ac 73 return 1;
sergun2311 1:b4aa36ae11ac 74 }
sergun2311 1:b4aa36ae11ac 75 }
sergun2311 1:b4aa36ae11ac 76 return 0;
sergun2311 1:b4aa36ae11ac 77 }
sergun2311 1:b4aa36ae11ac 78
sergun2311 1:b4aa36ae11ac 79 bool Block::CheckRight()
sergun2311 1:b4aa36ae11ac 80 {
sergun2311 1:b4aa36ae11ac 81 int xx, yy;
sergun2311 1:b4aa36ae11ac 82 for ( xx = 0 ; xx < 5 ; xx++ ) {
sergun2311 1:b4aa36ae11ac 83 for (yy = 0 ; yy < 5 ; yy++ ) {
sergun2311 1:b4aa36ae11ac 84 if ( (Piece[form][angle][xx][yy] != 0)
sergun2311 1:b4aa36ae11ac 85 && (Field[y + yy - 1][x + xx - 1] != 0) &&
sergun2311 1:b4aa36ae11ac 86 ( y + yy - 3 > 0 ) )
sergun2311 1:b4aa36ae11ac 87 return 1;
sergun2311 1:b4aa36ae11ac 88 if ( (Piece[form][angle][xx][yy] != 0) && ( (xx + x) == 11) )
sergun2311 1:b4aa36ae11ac 89 return 1;
sergun2311 1:b4aa36ae11ac 90 }
sergun2311 1:b4aa36ae11ac 91 }
sergun2311 1:b4aa36ae11ac 92 return 0;
sergun2311 1:b4aa36ae11ac 93 }