ELEC2645 (2018/19) / Mbed 2 deprecated el17ajf

Dependencies:   mbed

Fork of el17ajf by Angus Findlay

Revision:
19:370d83a8dc33
Parent:
18:24ce897024d0
Child:
21:62d2b5b73160
--- a/Game/Game.cpp	Wed Apr 03 14:31:49 2019 +0000
+++ b/Game/Game.cpp	Wed Apr 03 16:18:26 2019 +0000
@@ -2,6 +2,7 @@
 #include "Input.h"
 #include "Engine.h"
 #include "Menus.h"
+#include "Prefs.h"
 
 Game::Game(Difficulty difficulty) {
     currentTetromino = Tetromino::getTetrominoOfType(
@@ -11,19 +12,26 @@
     switch (difficulty) {
         case EASY:
             move_frames = Engine::FPS / 6; // ~ 160ms
+            scoreForRow = 6;
             break;
         case MEDIUM:
             move_frames = Engine::FPS / 9; // ~ 110ms
+            scoreForRow = 8;
             break;
         case HARD:
             move_frames = Engine::FPS / 12; // ~ 80ms
+            scoreForRow = 10;
             break;
     }
-    
     frames = 0;
     last_move_frame = 0;
     start_x = Grid::GRID_WIDTH / 2 - 1;
     currentTetromino = currentTetromino.teleportedTo(start_x);
+    score = 0;
+    Prefs prefs;
+    playerNumber = prefs.getKey(Prefs::LAST_PLAYER) + 1;
+
+    printf(">>>>>>> made game ...\n");
 }
 
 Game::~Game() {
@@ -58,11 +66,21 @@
     }
 }
 
+void Game::addScore(int rowsCleared) {
+    score += scoreForRow * rowsCleared * rowsCleared;
+    if (score > 9999) {
+        score = 9999;
+    }
+}
+
 void Game::moveCurrentTetrominoDown() {
     if (grid.isSpaceForTetromino(currentTetromino.movedDown())) {
         currentTetromino = currentTetromino.movedDown();
     } else {
-        grid.placeTetromino(currentTetromino);
+        int rowsCleared = grid.placeTetromino(currentTetromino);
+        if (rowsCleared != 0) {
+            addScore(rowsCleared);
+        }
         currentTetromino = Tetromino::getTetrominoOfType(nextTetrominoType);
         // centre it
         currentTetromino = currentTetromino.teleportedTo(start_x);
@@ -76,6 +94,7 @@
 
 void Game::dropCurrentTetromino() {
     while (grid.isSpaceForTetromino(currentTetromino.movedDown())) {
+        score += 1;
         currentTetromino = currentTetromino.movedDown();
     }
     moveCurrentTetrominoDown();
@@ -86,6 +105,19 @@
     grid.draw();
 }
 
+void Game::addScoreToLeaderboard() {
+    Prefs prefs;
+    for (int i = 0; i < Prefs::HIGHSCORE3; i++) {
+        if (score > prefs.getKey((Prefs::Key)i)) {
+            prefs.setKey((Prefs::Key)i, score);
+            prefs.setKey((Prefs::Key)(i + 3), playerNumber);
+        }
+    }
+}
+
 void Game::gameOver() {
+    addScoreToLeaderboard();
+    Prefs prefs;
+    prefs.setKey(Prefs::LAST_PLAYER, playerNumber);
     Menus::add(Menus::GAME_OVER);
 }