Dependencies:   MMA8452 N5110 PowerControl beep mbed

Committer:
stevenle93
Date:
Tue May 05 22:32:07 2015 +0000
Revision:
5:c0a58a6916f2
Parent:
4:c141e252d786
Child:
8:aebb468546c5
The changes include: alert sound when the countdown in 10s, the High score menu was extended into Easy, Normal and Hard mode scores, testing function of Sleep().

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stevenle93 1:92f77de19aad 1 /**
stevenle93 1:92f77de19aad 2 @file Game.h
stevenle93 1:92f77de19aad 3
stevenle93 1:92f77de19aad 4 @brief Header file of the game rule which contain member functions, variables and functions definition
stevenle93 1:92f77de19aad 5
stevenle93 1:92f77de19aad 6 */
stevenle93 1:92f77de19aad 7
stevenle93 1:92f77de19aad 8 #ifndef GAME_H
stevenle93 1:92f77de19aad 9 #define GAME_H
stevenle93 1:92f77de19aad 10
stevenle93 1:92f77de19aad 11 #include "mbed.h"
stevenle93 1:92f77de19aad 12 #include "MMA8452.h"
stevenle93 1:92f77de19aad 13 #include "N5110.h"
stevenle93 2:57d1ed1f0ad3 14 #include "Clock.h"
stevenle93 1:92f77de19aad 15
stevenle93 3:1974db5993ef 16 Ticker gatimer;
stevenle93 3:1974db5993ef 17 int gatimerFlag = 0;
stevenle93 3:1974db5993ef 18
stevenle93 3:1974db5993ef 19 void gatimerExpired()
stevenle93 3:1974db5993ef 20 {
stevenle93 3:1974db5993ef 21 gatimerFlag = 1; //Set flag for timer of the game
stevenle93 3:1974db5993ef 22 }
stevenle93 1:92f77de19aad 23
stevenle93 1:92f77de19aad 24 class Game
stevenle93 1:92f77de19aad 25 {
stevenle93 1:92f77de19aad 26 private:
stevenle93 1:92f77de19aad 27 /**
stevenle93 1:92f77de19aad 28 * @param The variable Score is used to store score of user when
stevenle93 1:92f77de19aad 29 * @param the accelerometer excessed a threshold value.
stevenle93 1:92f77de19aad 30 */
stevenle93 2:57d1ed1f0ad3 31
stevenle93 1:92f77de19aad 32
stevenle93 1:92f77de19aad 33 /**
stevenle93 1:92f77de19aad 34 * @param The acceleration variable recalled from MMA8452.h
stevenle93 1:92f77de19aad 35 */
stevenle93 1:92f77de19aad 36 Acceleration accel; // Acceleration variable declared in MMA8452 class
stevenle93 1:92f77de19aad 37
stevenle93 1:92f77de19aad 38 public:
stevenle93 1:92f77de19aad 39 /**
stevenle93 5:c0a58a6916f2 40 * A function that contains condition of easy mode
stevenle93 5:c0a58a6916f2 41 * The conditions: Threshold value of 2g - Time interval for reading data of 0.1s
stevenle93 1:92f77de19aad 42 */
stevenle93 3:1974db5993ef 43 void easyMode();
stevenle93 5:c0a58a6916f2 44 /**
stevenle93 5:c0a58a6916f2 45 * A function that contains condition of normal mode
stevenle93 5:c0a58a6916f2 46 * The conditions: Threshold value of 3g - Time interval for reading data of 0.2s
stevenle93 5:c0a58a6916f2 47 */
stevenle93 3:1974db5993ef 48 void norMode();
stevenle93 5:c0a58a6916f2 49 /**
stevenle93 5:c0a58a6916f2 50 * A functionthat contains condition of hard mode
stevenle93 5:c0a58a6916f2 51 * The conditions: Threshold value of 3g - Time interval for reading data of 0.4s
stevenle93 5:c0a58a6916f2 52 */
stevenle93 3:1974db5993ef 53 void hardMode();
stevenle93 5:c0a58a6916f2 54 /**
stevenle93 5:c0a58a6916f2 55 * @param A global variable to store play score.
stevenle93 5:c0a58a6916f2 56 * @param This score will later transfer into an array
stevenle93 5:c0a58a6916f2 57 */
stevenle93 4:c141e252d786 58 int score;
stevenle93 5:c0a58a6916f2 59 /**
stevenle93 5:c0a58a6916f2 60 * @param An array to store set of scores
stevenle93 5:c0a58a6916f2 61 * @param The array structure is as follow:
stevenle93 5:c0a58a6916f2 62 * @param Easy high score, Easy current score, Normal high score, Normal current score, Hard high score, Hard current score.
stevenle93 5:c0a58a6916f2 63 */
stevenle93 4:c141e252d786 64 int scoArr[6];
stevenle93 5:c0a58a6916f2 65 /**
stevenle93 5:c0a58a6916f2 66 * A function used to reset the game condition
stevenle93 5:c0a58a6916f2 67 */
stevenle93 3:1974db5993ef 68 void reset();
stevenle93 5:c0a58a6916f2 69 /**
stevenle93 5:c0a58a6916f2 70 * A funtion to draw a battery image when playing game
stevenle93 5:c0a58a6916f2 71 */
stevenle93 5:c0a58a6916f2 72 void battImag();
stevenle93 1:92f77de19aad 73 };
stevenle93 1:92f77de19aad 74
stevenle93 3:1974db5993ef 75 void Game::easyMode ()
stevenle93 1:92f77de19aad 76 {
stevenle93 5:c0a58a6916f2 77 lcd.printString("EASY MODE",16,0); //Displaying the title of difficulty level
stevenle93 5:c0a58a6916f2 78 lcd.drawRect(30,32,28,12,0); //Drawing an empty battery image
stevenle93 5:c0a58a6916f2 79 lcd.drawRect(59,36,1,4,1); //Drawing a tip of battery image
stevenle93 3:1974db5993ef 80 if (gatimerFlag) {
stevenle93 3:1974db5993ef 81 gatimerFlag = 0;
stevenle93 3:1974db5993ef 82 accel = mma8452.readValues(); //Read the value from MMA8452 sensor
stevenle93 5:c0a58a6916f2 83
stevenle93 3:1974db5993ef 84 if (accel.x > 2 || accel.x < -2) { //Easy mode: If the value of accelerator data exceed 2g, the score will increase by one unit
stevenle93 3:1974db5993ef 85 score++;
stevenle93 3:1974db5993ef 86 char scorebuffer[14];
stevenle93 4:c141e252d786 87 sprintf(scorebuffer,"Score:%d",score); //Score will be displayed as unsigned Decimal Interger number
stevenle93 4:c141e252d786 88 lcd.printString(scorebuffer,6,3);
stevenle93 5:c0a58a6916f2 89 battImag();
stevenle93 1:92f77de19aad 90 }
stevenle93 1:92f77de19aad 91 }
stevenle93 5:c0a58a6916f2 92
stevenle93 5:c0a58a6916f2 93 scoArr[1] = score;
stevenle93 5:c0a58a6916f2 94 if(scoArr[0] > scoArr[1]) {
stevenle93 4:c141e252d786 95 scoArr[1] = score;
stevenle93 4:c141e252d786 96 } else if(scoArr[0] < scoArr[1]) {
stevenle93 4:c141e252d786 97 scoArr[0] = score;
stevenle93 4:c141e252d786 98 }
stevenle93 1:92f77de19aad 99 }
stevenle93 2:57d1ed1f0ad3 100
stevenle93 3:1974db5993ef 101 void Game::norMode()
stevenle93 3:1974db5993ef 102 {
stevenle93 5:c0a58a6916f2 103 lcd.printString("NORMAL MODE",9,0); //Displaying the title of difficulty level
stevenle93 5:c0a58a6916f2 104 lcd.drawRect(30,32,28,12,0); //Drawing an empty battery image
stevenle93 5:c0a58a6916f2 105 lcd.drawRect(59,36,1,4,1); //Drawing a tip of battery image
stevenle93 3:1974db5993ef 106 if (gatimerFlag) {
stevenle93 3:1974db5993ef 107 gatimerFlag = 0;
stevenle93 3:1974db5993ef 108 accel = mma8452.readValues(); //Read the value from MMA8452 sensor
stevenle93 5:c0a58a6916f2 109
stevenle93 3:1974db5993ef 110 if (accel.x > 3 || accel.x < -3) { //Easy mode: If the value of accelerator data exceed 3g, the score will increase by one unit
stevenle93 3:1974db5993ef 111 score++;
stevenle93 3:1974db5993ef 112 char scorebuffer[14];
stevenle93 4:c141e252d786 113 sprintf(scorebuffer,"Score:%d",score); //Score will be displayed as unsigned Decimal Interger number
stevenle93 4:c141e252d786 114 lcd.printString(scorebuffer,6,3);
stevenle93 5:c0a58a6916f2 115 battImag();
stevenle93 3:1974db5993ef 116 }
stevenle93 3:1974db5993ef 117 }
stevenle93 5:c0a58a6916f2 118 scoArr[3] = score;
stevenle93 5:c0a58a6916f2 119 if(scoArr[2] > scoArr[3]) {
stevenle93 4:c141e252d786 120 scoArr[3] = score;
stevenle93 4:c141e252d786 121 } else if(scoArr[2] < scoArr[3]) {
stevenle93 4:c141e252d786 122 scoArr[2] = score;
stevenle93 4:c141e252d786 123 }
stevenle93 3:1974db5993ef 124 }
stevenle93 3:1974db5993ef 125
stevenle93 3:1974db5993ef 126 void Game::hardMode()
stevenle93 3:1974db5993ef 127 {
stevenle93 5:c0a58a6916f2 128 lcd.printString("HARD MODE",16,0); //Displaying the title of difficulty level
stevenle93 5:c0a58a6916f2 129 lcd.drawRect(30,32,28,12,0); //Drawing an empty battery image
stevenle93 5:c0a58a6916f2 130 lcd.drawRect(59,36,1,4,1); //Drawing a tip of battery image
stevenle93 3:1974db5993ef 131 if (gatimerFlag) {
stevenle93 3:1974db5993ef 132 gatimerFlag = 0;
stevenle93 3:1974db5993ef 133 accel = mma8452.readValues(); //Read the value from MMA8452 sensor
stevenle93 5:c0a58a6916f2 134
stevenle93 3:1974db5993ef 135 if (accel.x > 3.5 || accel.x < -3.5) { //Easy mode: If the value of accelerator data exceed 3.5g, the score will increase by one unit
stevenle93 3:1974db5993ef 136 score++;
stevenle93 3:1974db5993ef 137 char scorebuffer[14];
stevenle93 4:c141e252d786 138 sprintf(scorebuffer,"Score:%d",score); //Score will be displayed as unsigned Decimal Interger number
stevenle93 4:c141e252d786 139 lcd.printString(scorebuffer,6,3);
stevenle93 5:c0a58a6916f2 140 battImag();
stevenle93 3:1974db5993ef 141 }
stevenle93 3:1974db5993ef 142 }
stevenle93 5:c0a58a6916f2 143 scoArr[5] = score;
stevenle93 5:c0a58a6916f2 144 if(scoArr[4] > scoArr[5]) {
stevenle93 4:c141e252d786 145 scoArr[5] = score;
stevenle93 4:c141e252d786 146 } else if(scoArr[4] < scoArr[5]) {
stevenle93 4:c141e252d786 147 scoArr[4] = score;
stevenle93 4:c141e252d786 148 }
stevenle93 3:1974db5993ef 149 }
stevenle93 3:1974db5993ef 150
stevenle93 3:1974db5993ef 151 void Game::reset()
stevenle93 2:57d1ed1f0ad3 152 {
stevenle93 2:57d1ed1f0ad3 153 score = 0;
stevenle93 2:57d1ed1f0ad3 154 CClock = 60;
stevenle93 2:57d1ed1f0ad3 155 }
stevenle93 3:1974db5993ef 156
stevenle93 5:c0a58a6916f2 157 void Game::battImag()
stevenle93 5:c0a58a6916f2 158 {
stevenle93 5:c0a58a6916f2 159 if (score>20 && score<40) {
stevenle93 5:c0a58a6916f2 160 lcd.drawRect(32,34,3,8,1);
stevenle93 5:c0a58a6916f2 161 }
stevenle93 5:c0a58a6916f2 162 if (score>40 && score<60) {
stevenle93 5:c0a58a6916f2 163 lcd.drawRect(32,34,6,8,1);
stevenle93 5:c0a58a6916f2 164 }
stevenle93 5:c0a58a6916f2 165 if (score>60 && score<80) {
stevenle93 5:c0a58a6916f2 166 lcd.drawRect(32,34,9,8,1);
stevenle93 5:c0a58a6916f2 167 }
stevenle93 5:c0a58a6916f2 168 if (score>80 && score<100) {
stevenle93 5:c0a58a6916f2 169 lcd.drawRect(32,34,12,8,1);
stevenle93 5:c0a58a6916f2 170 }
stevenle93 5:c0a58a6916f2 171 if (score>100 && score<120) {
stevenle93 5:c0a58a6916f2 172 lcd.drawRect(32,34,15,8,1);
stevenle93 5:c0a58a6916f2 173 }
stevenle93 5:c0a58a6916f2 174 if (score>120 && score<140) {
stevenle93 5:c0a58a6916f2 175 lcd.drawRect(32,34,18,8,1);
stevenle93 5:c0a58a6916f2 176 }
stevenle93 5:c0a58a6916f2 177 if (score>140 && score<160) {
stevenle93 5:c0a58a6916f2 178 lcd.drawRect(32,34,21,8,1);
stevenle93 5:c0a58a6916f2 179 }
stevenle93 5:c0a58a6916f2 180 if (score>160) {
stevenle93 5:c0a58a6916f2 181 lcd.drawRect(32,34,24,8,1);
stevenle93 5:c0a58a6916f2 182 }
stevenle93 5:c0a58a6916f2 183 }
stevenle93 5:c0a58a6916f2 184
stevenle93 5:c0a58a6916f2 185
stevenle93 1:92f77de19aad 186 #endif