ELEC2645 (2018/19) / Mbed 2 deprecated el17ajf

Dependencies:   mbed

Fork of el17ajf by Angus Findlay

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?

UserRevisionLine numberNew 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 }