Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem
main.cpp@4:c1da839b41b1, 2020-04-27 (annotated)
- Committer:
- rushib1
- Date:
- Mon Apr 27 03:38:35 2020 +0000
- Revision:
- 4:c1da839b41b1
- Parent:
- 3:6e41a5ce16c2
- Child:
- 5:269d04e12a9e
Changed scoreboard
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rushib1 | 0:5bb514318c64 | 1 | #include "mbed.h" |
rushib1 | 0:5bb514318c64 | 2 | #include "uLCD_4DGL.h" |
rushib1 | 0:5bb514318c64 | 3 | #include "rgb.h" |
rushib1 | 0:5bb514318c64 | 4 | #include "SDFileSystem.h" |
rushib1 | 0:5bb514318c64 | 5 | #include "wave_player.h" |
rushib1 | 0:5bb514318c64 | 6 | #include "rtos.h" |
rushib1 | 0:5bb514318c64 | 7 | |
rushib1 | 0:5bb514318c64 | 8 | #include <string> |
rushib1 | 0:5bb514318c64 | 9 | #include <iostream> |
rushib1 | 0:5bb514318c64 | 10 | #include <fstream> |
rushib1 | 2:acd4656312d8 | 11 | #include <algorithm> |
rushib1 | 0:5bb514318c64 | 12 | |
rushib1 | 3:6e41a5ce16c2 | 13 | enum DIFF_LEVEL{NA=0, EASY=1, MED=2, HARD=3, SCORE=4}; |
rushib1 | 3:6e41a5ce16c2 | 14 | enum SIGN{PLUS=0, MINUS=1, MULT=2}; |
rushib1 | 3:6e41a5ce16c2 | 15 | |
rushib1 | 3:6e41a5ce16c2 | 16 | struct Gen_Question{ |
rushib1 | 3:6e41a5ce16c2 | 17 | int num1; |
rushib1 | 3:6e41a5ce16c2 | 18 | int num2; |
rushib1 | 3:6e41a5ce16c2 | 19 | int sign; |
rushib1 | 3:6e41a5ce16c2 | 20 | int corr_ans; |
rushib1 | 3:6e41a5ce16c2 | 21 | int ans[4]; |
rushib1 | 3:6e41a5ce16c2 | 22 | }; |
rushib1 | 3:6e41a5ce16c2 | 23 | |
rushib1 | 3:6e41a5ce16c2 | 24 | struct Game_Difficulty{ |
rushib1 | 3:6e41a5ce16c2 | 25 | bool is_selected; |
rushib1 | 3:6e41a5ce16c2 | 26 | enum DIFF_LEVEL level; |
rushib1 | 3:6e41a5ce16c2 | 27 | int ans_time; |
rushib1 | 3:6e41a5ce16c2 | 28 | int max_num; |
rushib1 | 3:6e41a5ce16c2 | 29 | int num_of_q; |
rushib1 | 3:6e41a5ce16c2 | 30 | int score_mult; |
rushib1 | 3:6e41a5ce16c2 | 31 | }; |
rushib1 | 3:6e41a5ce16c2 | 32 | |
rushib1 | 3:6e41a5ce16c2 | 33 | struct Game_Settings{ |
rushib1 | 3:6e41a5ce16c2 | 34 | Game_Difficulty new_diff; |
rushib1 | 3:6e41a5ce16c2 | 35 | int score; |
rushib1 | 3:6e41a5ce16c2 | 36 | int live_left; |
rushib1 | 3:6e41a5ce16c2 | 37 | int q_on; |
rushib1 | 3:6e41a5ce16c2 | 38 | bool is_timeout; |
rushib1 | 3:6e41a5ce16c2 | 39 | bool is_lose; |
rushib1 | 3:6e41a5ce16c2 | 40 | }; |
rushib1 | 3:6e41a5ce16c2 | 41 | |
rushib1 | 3:6e41a5ce16c2 | 42 | |
rushib1 | 3:6e41a5ce16c2 | 43 | Game_Settings new_game = {.q_on=1, .live_left = 3, .new_diff.is_selected=false, .is_timeout=true, .is_lose =false}; |
rushib1 | 3:6e41a5ce16c2 | 44 | |
rushib1 | 3:6e41a5ce16c2 | 45 | |
rushib1 | 3:6e41a5ce16c2 | 46 | void print_high_score(); |
rushib1 | 3:6e41a5ce16c2 | 47 | int* read_high_score(); |
rushib1 | 0:5bb514318c64 | 48 | |
rushib1 | 0:5bb514318c64 | 49 | /* |
rushib1 | 0:5bb514318c64 | 50 | ------------------CONSTS |
rushib1 | 0:5bb514318c64 | 51 | */ |
rushib1 | 3:6e41a5ce16c2 | 52 | //const int EASY_TIME =20; |
rushib1 | 3:6e41a5ce16c2 | 53 | //const int MED_TIME =15; |
rushib1 | 3:6e41a5ce16c2 | 54 | //const int HARD_TIME =10; |
rushib1 | 0:5bb514318c64 | 55 | |
rushib1 | 0:5bb514318c64 | 56 | volatile bool homescreen = true; |
rushib1 | 0:5bb514318c64 | 57 | volatile bool boot_vid = true; |
rushib1 | 0:5bb514318c64 | 58 | |
rushib1 | 0:5bb514318c64 | 59 | /* |
rushib1 | 0:5bb514318c64 | 60 | ------------------I/O VARS |
rushib1 | 0:5bb514318c64 | 61 | */ |
rushib1 | 0:5bb514318c64 | 62 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
rushib1 | 0:5bb514318c64 | 63 | RawSerial bluemod(p28, p27); |
rushib1 | 0:5bb514318c64 | 64 | Serial pc(USBTX, USBRX); |
rushib1 | 0:5bb514318c64 | 65 | uLCD_4DGL uLCD(p9, p10, p11); |
rushib1 | 0:5bb514318c64 | 66 | DigitalIn pb(p12); |
rushib1 | 0:5bb514318c64 | 67 | |
rushib1 | 0:5bb514318c64 | 68 | /* |
rushib1 | 0:5bb514318c64 | 69 | ------------------LED VARS |
rushib1 | 0:5bb514318c64 | 70 | */ |
rushib1 | 2:acd4656312d8 | 71 | |
rushib1 | 2:acd4656312d8 | 72 | DigitalOut life[] = {(p16), (p19), (p20)}; |
rushib1 | 0:5bb514318c64 | 73 | RGBLed myRGBled(p21, p24, p23); |
rushib1 | 0:5bb514318c64 | 74 | DigitalOut onboard_led(LED1); |
rushib1 | 0:5bb514318c64 | 75 | |
rushib1 | 0:5bb514318c64 | 76 | /* |
rushib1 | 0:5bb514318c64 | 77 | ------------------AUDIO VARS |
rushib1 | 0:5bb514318c64 | 78 | */ |
rushib1 | 0:5bb514318c64 | 79 | |
rushib1 | 0:5bb514318c64 | 80 | FILE *wave_file; |
rushib1 | 0:5bb514318c64 | 81 | AnalogOut DACount(p18); |
rushib1 | 0:5bb514318c64 | 82 | wave_player waver(&DACount); |
rushib1 | 0:5bb514318c64 | 83 | |
rushib1 | 0:5bb514318c64 | 84 | /* |
rushib1 | 0:5bb514318c64 | 85 | ------------------GENERAL VARS |
rushib1 | 0:5bb514318c64 | 86 | */ |
rushib1 | 3:6e41a5ce16c2 | 87 | volatile char bnum = '0'; |
rushib1 | 3:6e41a5ce16c2 | 88 | |
rushib1 | 0:5bb514318c64 | 89 | |
rushib1 | 0:5bb514318c64 | 90 | Mutex lcd_mutex; |
rushib1 | 0:5bb514318c64 | 91 | Mutex blue_mutex; |
rushib1 | 0:5bb514318c64 | 92 | Thread thread1, thread2, thread3; |
rushib1 | 0:5bb514318c64 | 93 | |
rushib1 | 0:5bb514318c64 | 94 | void main_screen() |
rushib1 | 0:5bb514318c64 | 95 | { |
rushib1 | 3:6e41a5ce16c2 | 96 | //pc.printf("MAIN_SCREEN\r\n"); |
rushib1 | 0:5bb514318c64 | 97 | uLCD.cls(); |
rushib1 | 3:6e41a5ce16c2 | 98 | uLCD.text_height(1); |
rushib1 | 3:6e41a5ce16c2 | 99 | uLCD.text_width(1); |
rushib1 | 3:6e41a5ce16c2 | 100 | uLCD.color(0xF0F6F7); |
rushib1 | 0:5bb514318c64 | 101 | uLCD.locate(6, 1); |
rushib1 | 0:5bb514318c64 | 102 | uLCD.printf("MATH FUN"); |
rushib1 | 0:5bb514318c64 | 103 | uLCD.locate(1, 4); |
rushib1 | 0:5bb514318c64 | 104 | uLCD.printf("Difficulty"); |
rushib1 | 3:6e41a5ce16c2 | 105 | uLCD.text_height(1); |
rushib1 | 3:6e41a5ce16c2 | 106 | uLCD.text_width(1); |
rushib1 | 0:5bb514318c64 | 107 | uLCD.locate(3, 6); |
rushib1 | 0:5bb514318c64 | 108 | uLCD.color(GREEN); |
rushib1 | 0:5bb514318c64 | 109 | uLCD.printf("1) Easy"); |
rushib1 | 0:5bb514318c64 | 110 | uLCD.locate(3, 8); |
rushib1 | 0:5bb514318c64 | 111 | uLCD.color(0xFFFF00); |
rushib1 | 0:5bb514318c64 | 112 | uLCD.printf("2) Not as Easy"); |
rushib1 | 0:5bb514318c64 | 113 | uLCD.locate(3, 10); |
rushib1 | 0:5bb514318c64 | 114 | uLCD.color(RED); |
rushib1 | 0:5bb514318c64 | 115 | uLCD.printf("3) Very Uneasy"); |
rushib1 | 3:6e41a5ce16c2 | 116 | uLCD.color(0x669DB2); |
rushib1 | 0:5bb514318c64 | 117 | uLCD.locate(1, 13); |
rushib1 | 0:5bb514318c64 | 118 | uLCD.printf("4) High Scores"); |
rushib1 | 3:6e41a5ce16c2 | 119 | uLCD.rectangle(0, 0, 127, 127, 0xA89C94); |
rushib1 | 0:5bb514318c64 | 120 | homescreen = false; |
rushib1 | 0:5bb514318c64 | 121 | } |
rushib1 | 0:5bb514318c64 | 122 | |
rushib1 | 2:acd4656312d8 | 123 | bool count_distinct(int arr[], int n) |
rushib1 | 2:acd4656312d8 | 124 | { |
rushib1 | 2:acd4656312d8 | 125 | int res = 1; |
rushib1 | 2:acd4656312d8 | 126 | // Pick all elements one by one |
rushib1 | 2:acd4656312d8 | 127 | for (int i = 1; i < n; i++) |
rushib1 | 2:acd4656312d8 | 128 | { |
rushib1 | 2:acd4656312d8 | 129 | int j = 0; |
rushib1 | 2:acd4656312d8 | 130 | for (j = 0; j < i; j++) |
rushib1 | 2:acd4656312d8 | 131 | if (arr[i] == arr[j]) |
rushib1 | 2:acd4656312d8 | 132 | break; |
rushib1 | 3:6e41a5ce16c2 | 133 | // If not printed earlier, then print it |
rushib1 | 2:acd4656312d8 | 134 | if (i == j) |
rushib1 | 2:acd4656312d8 | 135 | res++; |
rushib1 | 0:5bb514318c64 | 136 | } |
rushib1 | 2:acd4656312d8 | 137 | if (res == 4) |
rushib1 | 2:acd4656312d8 | 138 | { |
rushib1 | 2:acd4656312d8 | 139 | return false; |
rushib1 | 2:acd4656312d8 | 140 | } |
rushib1 | 2:acd4656312d8 | 141 | else |
rushib1 | 2:acd4656312d8 | 142 | { |
rushib1 | 2:acd4656312d8 | 143 | return true; |
rushib1 | 2:acd4656312d8 | 144 | } |
rushib1 | 2:acd4656312d8 | 145 | } |
rushib1 | 0:5bb514318c64 | 146 | |
rushib1 | 3:6e41a5ce16c2 | 147 | void gen_ans(Gen_Question *gen_new_q) |
rushib1 | 2:acd4656312d8 | 148 | { |
rushib1 | 3:6e41a5ce16c2 | 149 | //rand()%(max-min + 1) + min; |
rushib1 | 3:6e41a5ce16c2 | 150 | gen_new_q->num1 = rand() % (new_game.new_diff.max_num + 1 - 0) + 0; |
rushib1 | 3:6e41a5ce16c2 | 151 | gen_new_q->num2 = rand() % (new_game.new_diff.max_num + 1 - 1) + 1; |
rushib1 | 3:6e41a5ce16c2 | 152 | gen_new_q->sign = rand() % (3 + 1 - 1) + 1; |
rushib1 | 3:6e41a5ce16c2 | 153 | |
rushib1 | 3:6e41a5ce16c2 | 154 | switch (gen_new_q->sign) |
rushib1 | 2:acd4656312d8 | 155 | { |
rushib1 | 2:acd4656312d8 | 156 | case 1: |
rushib1 | 3:6e41a5ce16c2 | 157 | gen_new_q->sign = '*'; |
rushib1 | 3:6e41a5ce16c2 | 158 | gen_new_q->ans[0] = gen_new_q->num1 * gen_new_q->num2; |
rushib1 | 3:6e41a5ce16c2 | 159 | gen_new_q->ans[1] = (gen_new_q->num1 + (rand() % (10 + 1 - 1) + 1)) * gen_new_q->num2; |
rushib1 | 3:6e41a5ce16c2 | 160 | gen_new_q->ans[2] = (gen_new_q->num1 * gen_new_q->num2) + (rand() % (20 + 1 - 1) + 1); |
rushib1 | 3:6e41a5ce16c2 | 161 | gen_new_q->ans[3] = (gen_new_q->num1 * gen_new_q->num2) + (rand() % (20 + 1 - 1) + 1); |
rushib1 | 2:acd4656312d8 | 162 | break; |
rushib1 | 2:acd4656312d8 | 163 | case 2: |
rushib1 | 3:6e41a5ce16c2 | 164 | gen_new_q->sign = '+'; |
rushib1 | 3:6e41a5ce16c2 | 165 | gen_new_q->ans[0] = gen_new_q->num1 + gen_new_q->num2; |
rushib1 | 3:6e41a5ce16c2 | 166 | gen_new_q->ans[1] = (gen_new_q->num1 + (rand() % (10 + 1 - 1) + 1)) + gen_new_q->num2; |
rushib1 | 3:6e41a5ce16c2 | 167 | gen_new_q->ans[2] = (gen_new_q->num1 + gen_new_q->num2) - (rand() % ((gen_new_q->num1 + gen_new_q->num2) + 1 - 1) + 1); |
rushib1 | 3:6e41a5ce16c2 | 168 | gen_new_q->ans[3] = (gen_new_q->num1 * gen_new_q->num2) + (rand() % (10 + 1 - 1) + 1); |
rushib1 | 2:acd4656312d8 | 169 | break; |
rushib1 | 2:acd4656312d8 | 170 | case 3: |
rushib1 | 3:6e41a5ce16c2 | 171 | gen_new_q->sign = '-'; |
rushib1 | 3:6e41a5ce16c2 | 172 | while (gen_new_q->num1 == gen_new_q->num2) |
rushib1 | 2:acd4656312d8 | 173 | { |
rushib1 | 3:6e41a5ce16c2 | 174 | gen_new_q->num1 = (rand() % ((gen_new_q->num1 + 2) - 1 + 1) + 1); |
rushib1 | 0:5bb514318c64 | 175 | } |
rushib1 | 3:6e41a5ce16c2 | 176 | gen_new_q->ans[0] = gen_new_q->num1 - gen_new_q->num2; |
rushib1 | 3:6e41a5ce16c2 | 177 | gen_new_q->ans[1] = (gen_new_q->num1 - gen_new_q->num2) * -1 + (rand() % (10 + 1 - 1) + 1); |
rushib1 | 3:6e41a5ce16c2 | 178 | gen_new_q->ans[2] = gen_new_q->num1 + gen_new_q->num2 - (rand() % (10 + 1 - 1) + 1); |
rushib1 | 3:6e41a5ce16c2 | 179 | gen_new_q->ans[3] = gen_new_q->num1 * gen_new_q->num2 - (rand() % (20 + 1 - 1) + 1); |
rushib1 | 2:acd4656312d8 | 180 | break; |
rushib1 | 2:acd4656312d8 | 181 | } |
rushib1 | 0:5bb514318c64 | 182 | } |
rushib1 | 0:5bb514318c64 | 183 | |
rushib1 | 3:6e41a5ce16c2 | 184 | void game_questions(Gen_Question *gen_new_q) |
rushib1 | 0:5bb514318c64 | 185 | { |
rushib1 | 3:6e41a5ce16c2 | 186 | gen_ans(gen_new_q); |
rushib1 | 3:6e41a5ce16c2 | 187 | bool reroll = count_distinct(gen_new_q->ans, 4); |
rushib1 | 2:acd4656312d8 | 188 | while (reroll) |
rushib1 | 2:acd4656312d8 | 189 | { |
rushib1 | 3:6e41a5ce16c2 | 190 | gen_ans(gen_new_q); |
rushib1 | 3:6e41a5ce16c2 | 191 | reroll = count_distinct(gen_new_q->ans, 4); |
rushib1 | 2:acd4656312d8 | 192 | //pc.printf("reroll\r\n"); |
rushib1 | 0:5bb514318c64 | 193 | } |
rushib1 | 2:acd4656312d8 | 194 | |
rushib1 | 3:6e41a5ce16c2 | 195 | gen_new_q->corr_ans = gen_new_q->ans[0]; |
rushib1 | 3:6e41a5ce16c2 | 196 | //pc.printf("%i\r\n", gen_new_q->ans[0]); |
rushib1 | 3:6e41a5ce16c2 | 197 | //pc.printf("%i\r\n", gen_new_q->corr_ans); |
rushib1 | 3:6e41a5ce16c2 | 198 | random_shuffle(&(gen_new_q->ans[0]), &(gen_new_q->ans[3])); |
rushib1 | 0:5bb514318c64 | 199 | uLCD.cls(); |
rushib1 | 0:5bb514318c64 | 200 | uLCD.locate(2, 1); |
rushib1 | 0:5bb514318c64 | 201 | uLCD.text_height(2); |
rushib1 | 0:5bb514318c64 | 202 | uLCD.text_width(2); |
rushib1 | 0:5bb514318c64 | 203 | uLCD.color(0xFC766A); |
rushib1 | 3:6e41a5ce16c2 | 204 | uLCD.printf("Q%i",new_game.q_on); |
rushib1 | 0:5bb514318c64 | 205 | uLCD.text_height(1); |
rushib1 | 0:5bb514318c64 | 206 | uLCD.text_width(1); |
rushib1 | 0:5bb514318c64 | 207 | |
rushib1 | 2:acd4656312d8 | 208 | uLCD.locate(9, 1); |
rushib1 | 2:acd4656312d8 | 209 | uLCD.printf("TIME:"); |
rushib1 | 2:acd4656312d8 | 210 | uLCD.line(55, 0, 55, 27, 0xA89C94); |
rushib1 | 2:acd4656312d8 | 211 | |
rushib1 | 0:5bb514318c64 | 212 | uLCD.rectangle(0, 0, 127, 127, 0xA89C94); |
rushib1 | 0:5bb514318c64 | 213 | uLCD.line(0, 27, 127, 27, 0xA89C94); |
rushib1 | 2:acd4656312d8 | 214 | uLCD.line(0, 50, 127, 50, 0xA89C94); |
rushib1 | 0:5bb514318c64 | 215 | |
rushib1 | 0:5bb514318c64 | 216 | uLCD.color(0x669DB2); |
rushib1 | 0:5bb514318c64 | 217 | uLCD.locate(2, 4); |
rushib1 | 0:5bb514318c64 | 218 | uLCD.text_height(2); |
rushib1 | 0:5bb514318c64 | 219 | uLCD.text_width(2); |
rushib1 | 3:6e41a5ce16c2 | 220 | uLCD.printf("%i%c%i=", gen_new_q->num1, gen_new_q->sign, gen_new_q->num2); |
rushib1 | 0:5bb514318c64 | 221 | uLCD.text_height(1); |
rushib1 | 0:5bb514318c64 | 222 | uLCD.text_width(1); |
rushib1 | 0:5bb514318c64 | 223 | |
rushib1 | 0:5bb514318c64 | 224 | uLCD.color(0xFC766A); |
rushib1 | 2:acd4656312d8 | 225 | uLCD.locate(2, 7); |
rushib1 | 0:5bb514318c64 | 226 | uLCD.printf("1)"); |
rushib1 | 0:5bb514318c64 | 227 | |
rushib1 | 0:5bb514318c64 | 228 | uLCD.color(0x669DB2); |
rushib1 | 2:acd4656312d8 | 229 | uLCD.locate(8, 7); |
rushib1 | 3:6e41a5ce16c2 | 230 | uLCD.printf("%i", gen_new_q->ans[0]); |
rushib1 | 0:5bb514318c64 | 231 | |
rushib1 | 0:5bb514318c64 | 232 | uLCD.color(0xFC766A); |
rushib1 | 2:acd4656312d8 | 233 | uLCD.locate(2, 9); |
rushib1 | 0:5bb514318c64 | 234 | uLCD.printf("2)"); |
rushib1 | 0:5bb514318c64 | 235 | |
rushib1 | 0:5bb514318c64 | 236 | uLCD.color(0x669DB2); |
rushib1 | 2:acd4656312d8 | 237 | uLCD.locate(8, 9); |
rushib1 | 3:6e41a5ce16c2 | 238 | uLCD.printf("%i", gen_new_q->ans[1]); |
rushib1 | 0:5bb514318c64 | 239 | |
rushib1 | 0:5bb514318c64 | 240 | uLCD.color(0xFC766A); |
rushib1 | 2:acd4656312d8 | 241 | uLCD.locate(2, 11); |
rushib1 | 0:5bb514318c64 | 242 | uLCD.printf("3)"); |
rushib1 | 0:5bb514318c64 | 243 | |
rushib1 | 0:5bb514318c64 | 244 | uLCD.color(0x669DB2); |
rushib1 | 2:acd4656312d8 | 245 | uLCD.locate(8, 11); |
rushib1 | 3:6e41a5ce16c2 | 246 | uLCD.printf("%i", gen_new_q->ans[2]); |
rushib1 | 0:5bb514318c64 | 247 | |
rushib1 | 0:5bb514318c64 | 248 | uLCD.color(0xFC766A); |
rushib1 | 2:acd4656312d8 | 249 | uLCD.locate(2, 13); |
rushib1 | 0:5bb514318c64 | 250 | uLCD.printf("4)"); |
rushib1 | 0:5bb514318c64 | 251 | |
rushib1 | 0:5bb514318c64 | 252 | uLCD.color(0x669DB2); |
rushib1 | 2:acd4656312d8 | 253 | uLCD.locate(8, 13); |
rushib1 | 3:6e41a5ce16c2 | 254 | uLCD.printf("%i", gen_new_q->ans[3]); |
rushib1 | 0:5bb514318c64 | 255 | |
rushib1 | 2:acd4656312d8 | 256 | uLCD.line(0, 115, 127, 115, 0xA89C94); |
rushib1 | 2:acd4656312d8 | 257 | } |
rushib1 | 3:6e41a5ce16c2 | 258 | |
rushib1 | 2:acd4656312d8 | 259 | void game_over() |
rushib1 | 2:acd4656312d8 | 260 | { |
rushib1 | 2:acd4656312d8 | 261 | uLCD.cls(); |
rushib1 | 2:acd4656312d8 | 262 | uLCD.locate(0, 7); |
rushib1 | 2:acd4656312d8 | 263 | uLCD.text_height(2); |
rushib1 | 2:acd4656312d8 | 264 | uLCD.text_width(2); |
rushib1 | 2:acd4656312d8 | 265 | uLCD.color(0xFC776A); |
rushib1 | 2:acd4656312d8 | 266 | uLCD.printf("GAME OVER"); |
rushib1 | 3:6e41a5ce16c2 | 267 | uLCD.rectangle(0, 0, 127, 127, 0xA89C94); |
rushib1 | 3:6e41a5ce16c2 | 268 | } |
rushib1 | 3:6e41a5ce16c2 | 269 | |
rushib1 | 3:6e41a5ce16c2 | 270 | void win_game() |
rushib1 | 3:6e41a5ce16c2 | 271 | { |
rushib1 | 3:6e41a5ce16c2 | 272 | uLCD.cls(); |
rushib1 | 3:6e41a5ce16c2 | 273 | uLCD.locate(2, 7); |
rushib1 | 3:6e41a5ce16c2 | 274 | uLCD.text_height(2); |
rushib1 | 3:6e41a5ce16c2 | 275 | uLCD.text_width(2); |
rushib1 | 3:6e41a5ce16c2 | 276 | uLCD.color(GREEN); |
rushib1 | 3:6e41a5ce16c2 | 277 | uLCD.printf("YOU WIN"); |
rushib1 | 3:6e41a5ce16c2 | 278 | uLCD.rectangle(0, 0, 127, 127, 0xA89C94); |
rushib1 | 3:6e41a5ce16c2 | 279 | |
rushib1 | 3:6e41a5ce16c2 | 280 | } |
rushib1 | 3:6e41a5ce16c2 | 281 | |
rushib1 | 3:6e41a5ce16c2 | 282 | void score_game() |
rushib1 | 3:6e41a5ce16c2 | 283 | { |
rushib1 | 3:6e41a5ce16c2 | 284 | uLCD.cls(); |
rushib1 | 3:6e41a5ce16c2 | 285 | uLCD.locate(1, 3); |
rushib1 | 3:6e41a5ce16c2 | 286 | uLCD.text_height(2); |
rushib1 | 3:6e41a5ce16c2 | 287 | uLCD.text_width(2); |
rushib1 | 3:6e41a5ce16c2 | 288 | uLCD.color(GREEN); |
rushib1 | 3:6e41a5ce16c2 | 289 | uLCD.printf("SCORE"); |
rushib1 | 3:6e41a5ce16c2 | 290 | uLCD.rectangle(0, 0, 127, 127, 0xA89C94); |
rushib1 | 3:6e41a5ce16c2 | 291 | uLCD.text_height(1); |
rushib1 | 3:6e41a5ce16c2 | 292 | uLCD.text_width(1); |
rushib1 | 3:6e41a5ce16c2 | 293 | uLCD.locate(7, 7); |
rushib1 | 3:6e41a5ce16c2 | 294 | uLCD.printf("%i",new_game.score); |
rushib1 | 2:acd4656312d8 | 295 | } |
rushib1 | 2:acd4656312d8 | 296 | |
rushib1 | 2:acd4656312d8 | 297 | void life_count_check() |
rushib1 | 2:acd4656312d8 | 298 | { |
rushib1 | 2:acd4656312d8 | 299 | life[0] = 0; |
rushib1 | 2:acd4656312d8 | 300 | life[1] = 0; |
rushib1 | 2:acd4656312d8 | 301 | life[2] = 0; |
rushib1 | 2:acd4656312d8 | 302 | |
rushib1 | 3:6e41a5ce16c2 | 303 | for (int i = 0; i < new_game.live_left; i++) |
rushib1 | 2:acd4656312d8 | 304 | { |
rushib1 | 2:acd4656312d8 | 305 | life[i] = 1; |
rushib1 | 2:acd4656312d8 | 306 | } |
rushib1 | 3:6e41a5ce16c2 | 307 | if (new_game.live_left == 0) |
rushib1 | 2:acd4656312d8 | 308 | { |
rushib1 | 3:6e41a5ce16c2 | 309 | new_game.is_lose = true; |
rushib1 | 3:6e41a5ce16c2 | 310 | |
rushib1 | 2:acd4656312d8 | 311 | } |
rushib1 | 0:5bb514318c64 | 312 | } |
rushib1 | 0:5bb514318c64 | 313 | |
rushib1 | 3:6e41a5ce16c2 | 314 | void check_correct_ans(Gen_Question check_new_q) |
rushib1 | 0:5bb514318c64 | 315 | { |
rushib1 | 3:6e41a5ce16c2 | 316 | if (new_game.is_timeout) |
rushib1 | 0:5bb514318c64 | 317 | { |
rushib1 | 2:acd4656312d8 | 318 | //pc.printf("TIMEOUT\r\n"); |
rushib1 | 2:acd4656312d8 | 319 | uLCD.cls(); |
rushib1 | 2:acd4656312d8 | 320 | uLCD.locate(5, 7); |
rushib1 | 2:acd4656312d8 | 321 | uLCD.text_height(2); |
rushib1 | 2:acd4656312d8 | 322 | uLCD.text_width(2); |
rushib1 | 2:acd4656312d8 | 323 | uLCD.color(0xF0F6F7); |
rushib1 | 2:acd4656312d8 | 324 | uLCD.printf("TIME"); |
rushib1 | 3:6e41a5ce16c2 | 325 | new_game.live_left--; |
rushib1 | 2:acd4656312d8 | 326 | //wait(2); |
rushib1 | 2:acd4656312d8 | 327 | } |
rushib1 | 2:acd4656312d8 | 328 | else |
rushib1 | 2:acd4656312d8 | 329 | { |
rushib1 | 2:acd4656312d8 | 330 | //pc.printf("%i\r\n", corr_ans); |
rushib1 | 2:acd4656312d8 | 331 | //pc.printf("%i\r\n", ans[(bnum-'0' -1)]); |
rushib1 | 2:acd4656312d8 | 332 | |
rushib1 | 3:6e41a5ce16c2 | 333 | if (check_new_q.corr_ans == check_new_q.ans[(bnum - '0') - 1]) |
rushib1 | 0:5bb514318c64 | 334 | { |
rushib1 | 0:5bb514318c64 | 335 | |
rushib1 | 2:acd4656312d8 | 336 | uLCD.cls(); |
rushib1 | 2:acd4656312d8 | 337 | uLCD.locate(2, 7); |
rushib1 | 2:acd4656312d8 | 338 | uLCD.text_height(2); |
rushib1 | 2:acd4656312d8 | 339 | uLCD.text_width(2); |
rushib1 | 2:acd4656312d8 | 340 | uLCD.color(GREEN); |
rushib1 | 2:acd4656312d8 | 341 | uLCD.printf("CORRECT"); |
rushib1 | 3:6e41a5ce16c2 | 342 | new_game.score = new_game.score + new_game.new_diff.score_mult; |
rushib1 | 2:acd4656312d8 | 343 | //wait(2); |
rushib1 | 2:acd4656312d8 | 344 | //pc.printf("CORRECT\r\n"); |
rushib1 | 2:acd4656312d8 | 345 | } |
rushib1 | 2:acd4656312d8 | 346 | else |
rushib1 | 2:acd4656312d8 | 347 | { |
rushib1 | 2:acd4656312d8 | 348 | //pc.printf("INCORRECT\r\n"); |
rushib1 | 2:acd4656312d8 | 349 | uLCD.cls(); |
rushib1 | 2:acd4656312d8 | 350 | uLCD.locate(0, 7); |
rushib1 | 2:acd4656312d8 | 351 | uLCD.text_height(2); |
rushib1 | 2:acd4656312d8 | 352 | uLCD.text_width(2); |
rushib1 | 2:acd4656312d8 | 353 | uLCD.color(RED); |
rushib1 | 2:acd4656312d8 | 354 | uLCD.printf("INCORRECT"); |
rushib1 | 3:6e41a5ce16c2 | 355 | new_game.live_left--; |
rushib1 | 2:acd4656312d8 | 356 | //wait(2); |
rushib1 | 2:acd4656312d8 | 357 | } |
rushib1 | 2:acd4656312d8 | 358 | } |
rushib1 | 2:acd4656312d8 | 359 | } |
rushib1 | 2:acd4656312d8 | 360 | |
rushib1 | 2:acd4656312d8 | 361 | |
rushib1 | 2:acd4656312d8 | 362 | bool get_bluetooth_button() |
rushib1 | 2:acd4656312d8 | 363 | { |
rushib1 | 3:6e41a5ce16c2 | 364 | //pc.printf("BLUETOOTH\r\n"); |
rushib1 | 3:6e41a5ce16c2 | 365 | bnum = '0'; |
rushib1 | 3:6e41a5ce16c2 | 366 | //blue_mutex.lock(); |
rushib1 | 2:acd4656312d8 | 367 | if (bluemod.getc() == '!') |
rushib1 | 2:acd4656312d8 | 368 | { |
rushib1 | 2:acd4656312d8 | 369 | if (bluemod.getc() == 'B') |
rushib1 | 2:acd4656312d8 | 370 | { |
rushib1 | 2:acd4656312d8 | 371 | //button number |
rushib1 | 2:acd4656312d8 | 372 | bnum = bluemod.getc(); |
rushib1 | 2:acd4656312d8 | 373 | //button data |
rushib1 | 2:acd4656312d8 | 374 | char bhit = bluemod.getc(); |
rushib1 | 2:acd4656312d8 | 375 | if (bluemod.getc() == char(~('!' + 'B' + bnum + bhit))) |
rushib1 | 0:5bb514318c64 | 376 | { |
rushib1 | 2:acd4656312d8 | 377 | if (bhit == '1') |
rushib1 | 0:5bb514318c64 | 378 | { |
rushib1 | 3:6e41a5ce16c2 | 379 | //pc.printf("%c\r\n", bnum); |
rushib1 | 2:acd4656312d8 | 380 | blue_mutex.unlock(); |
rushib1 | 2:acd4656312d8 | 381 | return false; |
rushib1 | 0:5bb514318c64 | 382 | } |
rushib1 | 2:acd4656312d8 | 383 | } |
rushib1 | 2:acd4656312d8 | 384 | } |
rushib1 | 2:acd4656312d8 | 385 | } |
rushib1 | 3:6e41a5ce16c2 | 386 | //blue_mutex.unlock(); |
rushib1 | 2:acd4656312d8 | 387 | return true; |
rushib1 | 2:acd4656312d8 | 388 | } |
rushib1 | 2:acd4656312d8 | 389 | |
rushib1 | 2:acd4656312d8 | 390 | void get_button() |
rushib1 | 2:acd4656312d8 | 391 | { |
rushib1 | 3:6e41a5ce16c2 | 392 | int timer = new_game.new_diff.ans_time; |
rushib1 | 3:6e41a5ce16c2 | 393 | new_game.is_timeout = true; |
rushib1 | 2:acd4656312d8 | 394 | while (timer != 0) |
rushib1 | 2:acd4656312d8 | 395 | { |
rushib1 | 2:acd4656312d8 | 396 | uLCD.locate(15, 1); |
rushib1 | 2:acd4656312d8 | 397 | uLCD.color(0xF0F6F7); |
rushib1 | 2:acd4656312d8 | 398 | uLCD.printf("%i", timer); |
rushib1 | 2:acd4656312d8 | 399 | if (bluemod.readable()) |
rushib1 | 2:acd4656312d8 | 400 | { |
rushib1 | 3:6e41a5ce16c2 | 401 | new_game.is_timeout = get_bluetooth_button(); |
rushib1 | 3:6e41a5ce16c2 | 402 | if(new_game.is_timeout == false){ |
rushib1 | 2:acd4656312d8 | 403 | break; |
rushib1 | 0:5bb514318c64 | 404 | } |
rushib1 | 0:5bb514318c64 | 405 | } |
rushib1 | 2:acd4656312d8 | 406 | wait(1); |
rushib1 | 2:acd4656312d8 | 407 | uLCD.locate(15, 1); |
rushib1 | 2:acd4656312d8 | 408 | uLCD.color(BLACK); |
rushib1 | 2:acd4656312d8 | 409 | uLCD.printf("%i", timer); |
rushib1 | 2:acd4656312d8 | 410 | timer = timer - 1; |
rushib1 | 3:6e41a5ce16c2 | 411 | |
rushib1 | 2:acd4656312d8 | 412 | } |
rushib1 | 2:acd4656312d8 | 413 | } |
rushib1 | 2:acd4656312d8 | 414 | |
rushib1 | 2:acd4656312d8 | 415 | void bluetooth_thread() |
rushib1 | 2:acd4656312d8 | 416 | { |
rushib1 | 2:acd4656312d8 | 417 | while (true) |
rushib1 | 2:acd4656312d8 | 418 | { |
rushib1 | 2:acd4656312d8 | 419 | if (bluemod.readable()) |
rushib1 | 2:acd4656312d8 | 420 | { |
rushib1 | 2:acd4656312d8 | 421 | bool n_timeout = get_bluetooth_button(); |
rushib1 | 2:acd4656312d8 | 422 | } |
rushib1 | 2:acd4656312d8 | 423 | else |
rushib1 | 2:acd4656312d8 | 424 | { |
rushib1 | 2:acd4656312d8 | 425 | Thread::yield(); |
rushib1 | 2:acd4656312d8 | 426 | } |
rushib1 | 2:acd4656312d8 | 427 | Thread::wait(100); |
rushib1 | 0:5bb514318c64 | 428 | } |
rushib1 | 0:5bb514318c64 | 429 | } |
rushib1 | 0:5bb514318c64 | 430 | |
rushib1 | 0:5bb514318c64 | 431 | void rgb_led_difficulty() |
rushib1 | 0:5bb514318c64 | 432 | { |
rushib1 | 3:6e41a5ce16c2 | 433 | //pc.printf("%i\r\n",bnum - 48); |
rushib1 | 3:6e41a5ce16c2 | 434 | new_game.new_diff.level = static_cast<DIFF_LEVEL>(bnum - 48); |
rushib1 | 3:6e41a5ce16c2 | 435 | //pc.printf("%i\r\n",new_game.new_diff.level); |
rushib1 | 3:6e41a5ce16c2 | 436 | if (new_game.new_diff.level == EASY) |
rushib1 | 0:5bb514318c64 | 437 | { |
rushib1 | 0:5bb514318c64 | 438 | myRGBled.write(0.0, 1.0, 0.0); //green |
rushib1 | 3:6e41a5ce16c2 | 439 | new_game.new_diff.is_selected = true; |
rushib1 | 3:6e41a5ce16c2 | 440 | new_game.new_diff.ans_time = 20; |
rushib1 | 3:6e41a5ce16c2 | 441 | new_game.new_diff.max_num = 10; |
rushib1 | 3:6e41a5ce16c2 | 442 | new_game.new_diff.num_of_q = 7; // 7 |
rushib1 | 3:6e41a5ce16c2 | 443 | new_game.score = 50; |
rushib1 | 3:6e41a5ce16c2 | 444 | new_game.new_diff.score_mult = 10; |
rushib1 | 0:5bb514318c64 | 445 | } |
rushib1 | 3:6e41a5ce16c2 | 446 | else if (new_game.new_diff.level == MED) |
rushib1 | 0:5bb514318c64 | 447 | { |
rushib1 | 0:5bb514318c64 | 448 | myRGBled.write(1.0, 0.2, 0.0); //yellow = red + some green |
rushib1 | 3:6e41a5ce16c2 | 449 | new_game.new_diff.is_selected = true; |
rushib1 | 3:6e41a5ce16c2 | 450 | new_game.new_diff.ans_time = 15; |
rushib1 | 3:6e41a5ce16c2 | 451 | new_game.new_diff.max_num = 15; |
rushib1 | 3:6e41a5ce16c2 | 452 | new_game.new_diff.num_of_q = 10; |
rushib1 | 3:6e41a5ce16c2 | 453 | new_game.score = 200; |
rushib1 | 3:6e41a5ce16c2 | 454 | new_game.new_diff.score_mult = 50; |
rushib1 | 0:5bb514318c64 | 455 | } |
rushib1 | 3:6e41a5ce16c2 | 456 | else if (new_game.new_diff.level == HARD) |
rushib1 | 0:5bb514318c64 | 457 | { |
rushib1 | 0:5bb514318c64 | 458 | myRGBled.write(1.0, 0.0, 0.0); //red |
rushib1 | 3:6e41a5ce16c2 | 459 | new_game.new_diff.is_selected = true; |
rushib1 | 3:6e41a5ce16c2 | 460 | new_game.new_diff.ans_time = 10; |
rushib1 | 3:6e41a5ce16c2 | 461 | new_game.new_diff.max_num = 10; |
rushib1 | 3:6e41a5ce16c2 | 462 | new_game.new_diff.num_of_q = 15; |
rushib1 | 3:6e41a5ce16c2 | 463 | new_game.score = 300; |
rushib1 | 3:6e41a5ce16c2 | 464 | new_game.new_diff.score_mult = 100; |
rushib1 | 3:6e41a5ce16c2 | 465 | } |
rushib1 | 3:6e41a5ce16c2 | 466 | else if (new_game.new_diff.level == SCORE) |
rushib1 | 3:6e41a5ce16c2 | 467 | { |
rushib1 | 3:6e41a5ce16c2 | 468 | myRGBled.write(0.5, 0.5, 0.5); |
rushib1 | 3:6e41a5ce16c2 | 469 | new_game.new_diff.is_selected = true; |
rushib1 | 3:6e41a5ce16c2 | 470 | print_high_score(); |
rushib1 | 0:5bb514318c64 | 471 | } |
rushib1 | 0:5bb514318c64 | 472 | } |
rushib1 | 0:5bb514318c64 | 473 | |
rushib1 | 0:5bb514318c64 | 474 | void wav_thread() |
rushib1 | 0:5bb514318c64 | 475 | { |
rushib1 | 0:5bb514318c64 | 476 | while (true) |
rushib1 | 0:5bb514318c64 | 477 | { |
rushib1 | 3:6e41a5ce16c2 | 478 | //pc.printf("AUDIO\r\n"); |
rushib1 | 0:5bb514318c64 | 479 | wave_file = fopen("/sd/audio/intro.wav", "r"); |
rushib1 | 0:5bb514318c64 | 480 | waver.play(wave_file); |
rushib1 | 0:5bb514318c64 | 481 | fclose(wave_file); |
rushib1 | 0:5bb514318c64 | 482 | } |
rushib1 | 0:5bb514318c64 | 483 | } |
rushib1 | 0:5bb514318c64 | 484 | |
rushib1 | 0:5bb514318c64 | 485 | void boot_video_thread() |
rushib1 | 0:5bb514318c64 | 486 | { |
rushib1 | 0:5bb514318c64 | 487 | while (true) |
rushib1 | 0:5bb514318c64 | 488 | { |
rushib1 | 2:acd4656312d8 | 489 | //pc.printf("BootVID\r\n"); |
rushib1 | 0:5bb514318c64 | 490 | //PLAY VIDEO BOOT |
rushib1 | 0:5bb514318c64 | 491 | if (boot_vid) |
rushib1 | 0:5bb514318c64 | 492 | { |
rushib1 | 0:5bb514318c64 | 493 | //lcd_mutex.lock(); |
rushib1 | 0:5bb514318c64 | 494 | uLCD.media_init(); |
rushib1 | 0:5bb514318c64 | 495 | uLCD.set_sector_address(0x0, 0x0); |
rushib1 | 0:5bb514318c64 | 496 | uLCD.display_video(0, 0); |
rushib1 | 0:5bb514318c64 | 497 | boot_vid = false; |
rushib1 | 0:5bb514318c64 | 498 | //lcd_mutex.unlock(); |
rushib1 | 0:5bb514318c64 | 499 | } |
rushib1 | 0:5bb514318c64 | 500 | else |
rushib1 | 0:5bb514318c64 | 501 | { |
rushib1 | 0:5bb514318c64 | 502 | Thread::yield(); |
rushib1 | 0:5bb514318c64 | 503 | } |
rushib1 | 0:5bb514318c64 | 504 | } |
rushib1 | 0:5bb514318c64 | 505 | } |
rushib1 | 0:5bb514318c64 | 506 | |
rushib1 | 3:6e41a5ce16c2 | 507 | void write_high_score(int* score_arr){ |
rushib1 | 3:6e41a5ce16c2 | 508 | std::ofstream score_file; |
rushib1 | 3:6e41a5ce16c2 | 509 | score_file.open("/sd/score/score.txt"); |
rushib1 | 3:6e41a5ce16c2 | 510 | if (score_file.is_open()) |
rushib1 | 3:6e41a5ce16c2 | 511 | { |
rushib1 | 3:6e41a5ce16c2 | 512 | //score_file << "300\n200\n100\n"; |
rushib1 | 3:6e41a5ce16c2 | 513 | score_file << score_arr[0] << "\n" << score_arr[1] << "\n" << score_arr[2] << "\n"; |
rushib1 | 3:6e41a5ce16c2 | 514 | score_file.close(); |
rushib1 | 3:6e41a5ce16c2 | 515 | } |
rushib1 | 3:6e41a5ce16c2 | 516 | } |
rushib1 | 3:6e41a5ce16c2 | 517 | |
rushib1 | 3:6e41a5ce16c2 | 518 | |
rushib1 | 3:6e41a5ce16c2 | 519 | int* read_high_score() |
rushib1 | 3:6e41a5ce16c2 | 520 | { |
rushib1 | 3:6e41a5ce16c2 | 521 | int* score_val = new int[3]; |
rushib1 | 3:6e41a5ce16c2 | 522 | //printf("read_high_score\n\r"); |
rushib1 | 3:6e41a5ce16c2 | 523 | std::ifstream infile("/sd/score/score.txt"); |
rushib1 | 3:6e41a5ce16c2 | 524 | wait(0.2); |
rushib1 | 3:6e41a5ce16c2 | 525 | if (infile.is_open()) |
rushib1 | 3:6e41a5ce16c2 | 526 | { |
rushib1 | 3:6e41a5ce16c2 | 527 | std::string line; |
rushib1 | 3:6e41a5ce16c2 | 528 | int i = 0; |
rushib1 | 3:6e41a5ce16c2 | 529 | while (std::getline(infile, line)) { |
rushib1 | 3:6e41a5ce16c2 | 530 | // using printf() in all tests for consistency |
rushib1 | 3:6e41a5ce16c2 | 531 | //printf("%s", line.c_str()); |
rushib1 | 3:6e41a5ce16c2 | 532 | score_val[i] = atoi(line.c_str()); |
rushib1 | 3:6e41a5ce16c2 | 533 | i++; |
rushib1 | 3:6e41a5ce16c2 | 534 | } |
rushib1 | 3:6e41a5ce16c2 | 535 | infile.close(); |
rushib1 | 3:6e41a5ce16c2 | 536 | } |
rushib1 | 3:6e41a5ce16c2 | 537 | pc.printf("%i \n\r", score_val[0]); |
rushib1 | 3:6e41a5ce16c2 | 538 | pc.printf("%i \n\r", score_val[1]); |
rushib1 | 3:6e41a5ce16c2 | 539 | pc.printf("%i \n\r", score_val[2]); |
rushib1 | 3:6e41a5ce16c2 | 540 | |
rushib1 | 3:6e41a5ce16c2 | 541 | return score_val; |
rushib1 | 3:6e41a5ce16c2 | 542 | } |
rushib1 | 3:6e41a5ce16c2 | 543 | |
rushib1 | 3:6e41a5ce16c2 | 544 | void print_high_score(){ |
rushib1 | 3:6e41a5ce16c2 | 545 | |
rushib1 | 3:6e41a5ce16c2 | 546 | int* score_arr= read_high_score(); |
rushib1 | 3:6e41a5ce16c2 | 547 | |
rushib1 | 3:6e41a5ce16c2 | 548 | uLCD.cls(); |
rushib1 | 3:6e41a5ce16c2 | 549 | uLCD.text_height(1); |
rushib1 | 3:6e41a5ce16c2 | 550 | uLCD.text_width(1); |
rushib1 | 3:6e41a5ce16c2 | 551 | uLCD.color(0xF0F6F7); |
rushib1 | 3:6e41a5ce16c2 | 552 | uLCD.locate(4, 1); |
rushib1 | 3:6e41a5ce16c2 | 553 | uLCD.printf("HIGH SCORES"); |
rushib1 | 3:6e41a5ce16c2 | 554 | uLCD.locate(3, 6); |
rushib1 | 3:6e41a5ce16c2 | 555 | uLCD.color(0xFC776A); |
rushib1 | 3:6e41a5ce16c2 | 556 | uLCD.printf("1) %i", score_arr[0]); |
rushib1 | 3:6e41a5ce16c2 | 557 | uLCD.locate(3, 8); |
rushib1 | 3:6e41a5ce16c2 | 558 | uLCD.color(0x669DB2); |
rushib1 | 3:6e41a5ce16c2 | 559 | uLCD.printf("2) %i", score_arr[1]); |
rushib1 | 3:6e41a5ce16c2 | 560 | uLCD.locate(3, 10); |
rushib1 | 3:6e41a5ce16c2 | 561 | uLCD.color(0xFC776A); |
rushib1 | 3:6e41a5ce16c2 | 562 | uLCD.printf("3) %i", score_arr[2]); |
rushib1 | 3:6e41a5ce16c2 | 563 | uLCD.rectangle(0, 0, 127, 127, 0xA89C94); |
rushib1 | 3:6e41a5ce16c2 | 564 | delete[] score_arr; |
rushib1 | 3:6e41a5ce16c2 | 565 | } |
rushib1 | 3:6e41a5ce16c2 | 566 | |
rushib1 | 3:6e41a5ce16c2 | 567 | void check_new_highscore(){ |
rushib1 | 3:6e41a5ce16c2 | 568 | int* new_score_arr = read_high_score(); |
rushib1 | 3:6e41a5ce16c2 | 569 | for (int i = 0; i < 3; i++) |
rushib1 | 3:6e41a5ce16c2 | 570 | { |
rushib1 | 3:6e41a5ce16c2 | 571 | if (new_score_arr[i]< new_game.score){ |
rushib1 | 4:c1da839b41b1 | 572 | int j = 1; |
rushib1 | 4:c1da839b41b1 | 573 | while(i<=j){ |
rushib1 | 3:6e41a5ce16c2 | 574 | new_score_arr[j+1] = new_score_arr[j]; |
rushib1 | 4:c1da839b41b1 | 575 | j--; |
rushib1 | 3:6e41a5ce16c2 | 576 | } |
rushib1 | 3:6e41a5ce16c2 | 577 | new_score_arr[i] = new_game.score; |
rushib1 | 3:6e41a5ce16c2 | 578 | pc.printf("high score found"); |
rushib1 | 3:6e41a5ce16c2 | 579 | write_high_score(new_score_arr); |
rushib1 | 3:6e41a5ce16c2 | 580 | break; |
rushib1 | 3:6e41a5ce16c2 | 581 | } |
rushib1 | 3:6e41a5ce16c2 | 582 | } |
rushib1 | 3:6e41a5ce16c2 | 583 | delete[] new_score_arr; |
rushib1 | 3:6e41a5ce16c2 | 584 | } |
rushib1 | 3:6e41a5ce16c2 | 585 | |
rushib1 | 3:6e41a5ce16c2 | 586 | void reset_scores(){ |
rushib1 | 3:6e41a5ce16c2 | 587 | mkdir("/sd/score", 0777); |
rushib1 | 3:6e41a5ce16c2 | 588 | std::ofstream score_file; |
rushib1 | 3:6e41a5ce16c2 | 589 | score_file.open("/sd/score/score.txt"); |
rushib1 | 3:6e41a5ce16c2 | 590 | if (score_file.is_open()) |
rushib1 | 3:6e41a5ce16c2 | 591 | { |
rushib1 | 3:6e41a5ce16c2 | 592 | score_file << "0\n0\n0\n"; |
rushib1 | 3:6e41a5ce16c2 | 593 | score_file.close(); |
rushib1 | 3:6e41a5ce16c2 | 594 | } |
rushib1 | 3:6e41a5ce16c2 | 595 | } |
rushib1 | 3:6e41a5ce16c2 | 596 | |
rushib1 | 2:acd4656312d8 | 597 | void init() |
rushib1 | 2:acd4656312d8 | 598 | { |
rushib1 | 3:6e41a5ce16c2 | 599 | // while(1){ |
rushib1 | 3:6e41a5ce16c2 | 600 | // reset_scores(); |
rushib1 | 3:6e41a5ce16c2 | 601 | // wait(2); |
rushib1 | 3:6e41a5ce16c2 | 602 | // } |
rushib1 | 2:acd4656312d8 | 603 | uLCD.baudrate(3000000); |
rushib1 | 2:acd4656312d8 | 604 | srand(time(NULL)); |
rushib1 | 2:acd4656312d8 | 605 | life[0] = 1; |
rushib1 | 2:acd4656312d8 | 606 | life[1] = 1; |
rushib1 | 2:acd4656312d8 | 607 | life[2] = 1; |
rushib1 | 3:6e41a5ce16c2 | 608 | //thread1.start(boot_video_thread); |
rushib1 | 3:6e41a5ce16c2 | 609 | boot_vid = false; |
rushib1 | 2:acd4656312d8 | 610 | } |
rushib1 | 2:acd4656312d8 | 611 | |
rushib1 | 3:6e41a5ce16c2 | 612 | |
rushib1 | 0:5bb514318c64 | 613 | int main() |
rushib1 | 0:5bb514318c64 | 614 | { |
rushib1 | 2:acd4656312d8 | 615 | init(); |
rushib1 | 3:6e41a5ce16c2 | 616 | // pc.printf("MAIN_INIT\r\n\n"); |
rushib1 | 0:5bb514318c64 | 617 | thread2.start(wav_thread); |
rushib1 | 0:5bb514318c64 | 618 | while (true) |
rushib1 | 0:5bb514318c64 | 619 | { |
rushib1 | 0:5bb514318c64 | 620 | //pc.printf("MAIN_LOOP\r\n"); |
rushib1 | 0:5bb514318c64 | 621 | //ONCE VIDEO STOPS PLAYING |
rushib1 | 0:5bb514318c64 | 622 | if (boot_vid == false) |
rushib1 | 0:5bb514318c64 | 623 | { |
rushib1 | 0:5bb514318c64 | 624 | thread1.terminate(); |
rushib1 | 0:5bb514318c64 | 625 | //IF HOMESCREEN PRINTED ONCE DONT PRINT AGAIN |
rushib1 | 0:5bb514318c64 | 626 | if (homescreen) |
rushib1 | 0:5bb514318c64 | 627 | { |
rushib1 | 0:5bb514318c64 | 628 | main_screen(); |
rushib1 | 0:5bb514318c64 | 629 | } |
rushib1 | 0:5bb514318c64 | 630 | //pc.printf("MAIN_PRINT\r\n"); |
rushib1 | 3:6e41a5ce16c2 | 631 | if (new_game.new_diff.is_selected == false) |
rushib1 | 0:5bb514318c64 | 632 | { |
rushib1 | 2:acd4656312d8 | 633 | thread3.start(bluetooth_thread); |
rushib1 | 0:5bb514318c64 | 634 | rgb_led_difficulty(); |
rushib1 | 0:5bb514318c64 | 635 | } |
rushib1 | 2:acd4656312d8 | 636 | else |
rushib1 | 2:acd4656312d8 | 637 | { |
rushib1 | 0:5bb514318c64 | 638 | thread3.terminate(); |
rushib1 | 2:acd4656312d8 | 639 | break; |
rushib1 | 0:5bb514318c64 | 640 | } |
rushib1 | 0:5bb514318c64 | 641 | } |
rushib1 | 3:6e41a5ce16c2 | 642 | Thread::wait(100); |
rushib1 | 0:5bb514318c64 | 643 | } |
rushib1 | 3:6e41a5ce16c2 | 644 | if(new_game.new_diff.level != SCORE){ |
rushib1 | 3:6e41a5ce16c2 | 645 | while (new_game.q_on <= new_game.new_diff.num_of_q) |
rushib1 | 3:6e41a5ce16c2 | 646 | { |
rushib1 | 3:6e41a5ce16c2 | 647 | thread3.terminate(); |
rushib1 | 3:6e41a5ce16c2 | 648 | Gen_Question new_q; |
rushib1 | 3:6e41a5ce16c2 | 649 | game_questions(&new_q); |
rushib1 | 3:6e41a5ce16c2 | 650 | get_button(); |
rushib1 | 3:6e41a5ce16c2 | 651 | check_correct_ans(new_q); |
rushib1 | 3:6e41a5ce16c2 | 652 | new_game.q_on++; |
rushib1 | 3:6e41a5ce16c2 | 653 | wait(2.2); |
rushib1 | 3:6e41a5ce16c2 | 654 | life_count_check(); |
rushib1 | 3:6e41a5ce16c2 | 655 | if(new_game.is_lose == true){ |
rushib1 | 3:6e41a5ce16c2 | 656 | game_over(); |
rushib1 | 3:6e41a5ce16c2 | 657 | break; |
rushib1 | 3:6e41a5ce16c2 | 658 | } |
rushib1 | 3:6e41a5ce16c2 | 659 | } |
rushib1 | 3:6e41a5ce16c2 | 660 | if(new_game.is_lose == false){ |
rushib1 | 3:6e41a5ce16c2 | 661 | win_game(); |
rushib1 | 3:6e41a5ce16c2 | 662 | } |
rushib1 | 3:6e41a5ce16c2 | 663 | wait(2.5); |
rushib1 | 3:6e41a5ce16c2 | 664 | new_game.score = new_game.score + new_game.live_left * 100; |
rushib1 | 3:6e41a5ce16c2 | 665 | score_game(); |
rushib1 | 2:acd4656312d8 | 666 | wait(2); |
rushib1 | 3:6e41a5ce16c2 | 667 | check_new_highscore(); |
rushib1 | 3:6e41a5ce16c2 | 668 | wait(0.5); |
rushib1 | 3:6e41a5ce16c2 | 669 | print_high_score(); |
rushib1 | 2:acd4656312d8 | 670 | } |
rushib1 | 2:acd4656312d8 | 671 | } |