Tetris game on mikroTFT touchscreen and LPC1768
Block.cpp@1:b4aa36ae11ac, 2017-02-25 (annotated)
- 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?
User | Revision | Line number | New 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 | } |