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
Fork of el17ajf by
Grid/Grid.cpp@15:afeefa3ceb61, 2019-03-19 (annotated)
- Committer:
- el17ajf
- Date:
- Tue Mar 19 10:36:51 2019 +0000
- Revision:
- 15:afeefa3ceb61
- Parent:
- 14:53d2167d7c9a
- Child:
- 17:cc448ab7266f
added switch debouncing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el17ajf | 3:a1b058ff66c2 | 1 | #include "Grid.h" |
el17ajf | 8:5066ce13a430 | 2 | #include "Graphics.h" |
el17ajf | 3:a1b058ff66c2 | 3 | |
el17ajf | 7:2e37bad816cb | 4 | void Grid::checkForLines() { |
el17ajf | 9:3a7776a29a11 | 5 | for (int j = GRID_HEIGHT - 1; j >= 0; j--) { |
el17ajf | 9:3a7776a29a11 | 6 | for (int i = 0; i < GRID_WIDTH; i++) { |
el17ajf | 14:53d2167d7c9a | 7 | if (grid[i][j] == false) { |
el17ajf | 14:53d2167d7c9a | 8 | // if any empties, break |
el17ajf | 3:a1b058ff66c2 | 9 | break; |
el17ajf | 3:a1b058ff66c2 | 10 | } else { |
el17ajf | 9:3a7776a29a11 | 11 | if (i == GRID_WIDTH - 1) { |
el17ajf | 15:afeefa3ceb61 | 12 | shiftDownFrom(j); |
el17ajf | 15:afeefa3ceb61 | 13 | // rows are now shifted down |
el17ajf | 15:afeefa3ceb61 | 14 | // so check current row again |
el17ajf | 15:afeefa3ceb61 | 15 | j = j + 1; |
el17ajf | 3:a1b058ff66c2 | 16 | } |
el17ajf | 3:a1b058ff66c2 | 17 | } |
el17ajf | 3:a1b058ff66c2 | 18 | } |
el17ajf | 3:a1b058ff66c2 | 19 | } |
el17ajf | 3:a1b058ff66c2 | 20 | } |
el17ajf | 3:a1b058ff66c2 | 21 | |
el17ajf | 4:aa433f9865a6 | 22 | void Grid::shiftDownFrom(int row) { |
el17ajf | 4:aa433f9865a6 | 23 | for (int j = row; j >= 0; j--) { |
el17ajf | 9:3a7776a29a11 | 24 | for (int i = 0; i < GRID_WIDTH; i++) { |
el17ajf | 15:afeefa3ceb61 | 25 | // shift down |
el17ajf | 4:aa433f9865a6 | 26 | if (j == 0) { |
el17ajf | 14:53d2167d7c9a | 27 | grid[i][j] = false; |
el17ajf | 4:aa433f9865a6 | 28 | } else { |
el17ajf | 14:53d2167d7c9a | 29 | grid[i][j] = grid[i][j-1]; |
el17ajf | 4:aa433f9865a6 | 30 | } |
el17ajf | 3:a1b058ff66c2 | 31 | } |
el17ajf | 4:aa433f9865a6 | 32 | } |
el17ajf | 4:aa433f9865a6 | 33 | } |
el17ajf | 4:aa433f9865a6 | 34 | |
el17ajf | 4:aa433f9865a6 | 35 | bool Grid::isSpaceForTetromino(Tetromino tetromino) { |
el17ajf | 4:aa433f9865a6 | 36 | for (int k = 0; k < 4; k++) { |
el17ajf | 4:aa433f9865a6 | 37 | if (!isSpaceForBlock(tetromino.blocks[k])) { |
el17ajf | 4:aa433f9865a6 | 38 | return false; |
el17ajf | 4:aa433f9865a6 | 39 | } |
el17ajf | 4:aa433f9865a6 | 40 | } |
el17ajf | 4:aa433f9865a6 | 41 | return true; |
el17ajf | 4:aa433f9865a6 | 42 | } |
el17ajf | 4:aa433f9865a6 | 43 | |
el17ajf | 4:aa433f9865a6 | 44 | bool Grid::isSpaceForBlock(Block block) { |
el17ajf | 13:59e17cab320a | 45 | // can a block exist here? |
el17ajf | 13:59e17cab320a | 46 | if (block.getX() > GRID_WIDTH - 1) { |
el17ajf | 13:59e17cab320a | 47 | printf("x > \n"); // TODO |
el17ajf | 13:59e17cab320a | 48 | return false; |
el17ajf | 13:59e17cab320a | 49 | } else if (block.getX() < 0) { |
el17ajf | 13:59e17cab320a | 50 | printf("x < \n"); // TODO |
el17ajf | 13:59e17cab320a | 51 | return false; |
el17ajf | 13:59e17cab320a | 52 | } else if (block.getY() > GRID_HEIGHT - 1) { |
el17ajf | 13:59e17cab320a | 53 | printf("y > \n"); // TODO |
el17ajf | 13:59e17cab320a | 54 | return false; |
el17ajf | 13:59e17cab320a | 55 | } else if (block.getY() < 0) { |
el17ajf | 13:59e17cab320a | 56 | printf("y < \n"); // TODO |
el17ajf | 13:59e17cab320a | 57 | return false; |
el17ajf | 13:59e17cab320a | 58 | } else { |
el17ajf | 13:59e17cab320a | 59 | return grid[block.getX()][block.getY()] == false; |
el17ajf | 13:59e17cab320a | 60 | } |
el17ajf | 3:a1b058ff66c2 | 61 | } |
el17ajf | 3:a1b058ff66c2 | 62 | |
el17ajf | 3:a1b058ff66c2 | 63 | void Grid::placeTetromino(Tetromino tetromino) { |
el17ajf | 7:2e37bad816cb | 64 | // TODO |
el17ajf | 13:59e17cab320a | 65 | for (int i = 0; i < 4; i++) { |
el17ajf | 13:59e17cab320a | 66 | grid[tetromino.blocks[i].getX()][tetromino.blocks[i].getY()] = true; |
el17ajf | 13:59e17cab320a | 67 | } |
el17ajf | 3:a1b058ff66c2 | 68 | |
el17ajf | 7:2e37bad816cb | 69 | checkForLines(); |
el17ajf | 4:aa433f9865a6 | 70 | } |
el17ajf | 4:aa433f9865a6 | 71 | |
el17ajf | 4:aa433f9865a6 | 72 | void Grid::clear() { |
el17ajf | 9:3a7776a29a11 | 73 | for (int j = 0; j < GRID_HEIGHT; j++) { |
el17ajf | 9:3a7776a29a11 | 74 | for (int i = 0; i < GRID_WIDTH; i++) { |
el17ajf | 4:aa433f9865a6 | 75 | grid[i][j] = 0; |
el17ajf | 4:aa433f9865a6 | 76 | } |
el17ajf | 4:aa433f9865a6 | 77 | } |
el17ajf | 6:a54df561f442 | 78 | } |
el17ajf | 6:a54df561f442 | 79 | |
el17ajf | 6:a54df561f442 | 80 | void Grid::draw() { |
el17ajf | 11:fba7d54fd36b | 81 | Graphics::drawBorder(); |
el17ajf | 11:fba7d54fd36b | 82 | |
el17ajf | 13:59e17cab320a | 83 | for (int j = 0; j < GRID_HEIGHT; j++) { |
el17ajf | 13:59e17cab320a | 84 | for (int i = 0; i < GRID_WIDTH; i++) { |
el17ajf | 6:a54df561f442 | 85 | if (grid[i][j] == true) { |
el17ajf | 6:a54df561f442 | 86 | Graphics::drawBlock(i, j); |
el17ajf | 6:a54df561f442 | 87 | } |
el17ajf | 6:a54df561f442 | 88 | } |
el17ajf | 6:a54df561f442 | 89 | } |
el17ajf | 11:fba7d54fd36b | 90 | |
el17ajf | 7:2e37bad816cb | 91 | } |
el17ajf | 7:2e37bad816cb | 92 | |
el17ajf | 7:2e37bad816cb | 93 | Grid::Grid() { |
el17ajf | 13:59e17cab320a | 94 | for (int j = 0; j < GRID_HEIGHT; j++) { |
el17ajf | 13:59e17cab320a | 95 | for (int i = 0; i < GRID_WIDTH; i++) { |
el17ajf | 11:fba7d54fd36b | 96 | grid[i][j] = false; |
el17ajf | 11:fba7d54fd36b | 97 | } |
el17ajf | 11:fba7d54fd36b | 98 | } |
el17ajf | 3:a1b058ff66c2 | 99 | } |