finished p2-2
Dependencies: mbed wave_player 4DGL-uLCD-SE MMA8452
main.cpp@2:7abebe259d59, 2021-04-26 (annotated)
- Committer:
- levelsnake3
- Date:
- Mon Apr 26 00:30:47 2021 +0000
- Revision:
- 2:7abebe259d59
- Parent:
- 1:05e3f86df6d5
finalAdv;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DCchico |
0:95264f964374 | 1 | //================================================================= |
DCchico |
0:95264f964374 | 2 | // The main program file. |
DCchico |
0:95264f964374 | 3 | // |
DCchico |
0:95264f964374 | 4 | // Copyright 2020 Georgia Tech. All rights reserved. |
DCchico |
0:95264f964374 | 5 | // The materials provided by the instructor in this course are for |
DCchico |
0:95264f964374 | 6 | // the use of the students currently enrolled in the course. |
DCchico |
0:95264f964374 | 7 | // Copyrighted course materials may not be further disseminated. |
DCchico |
0:95264f964374 | 8 | // This file must not be made publicly available anywhere. |
DCchico |
0:95264f964374 | 9 | //================================================================== |
DCchico |
0:95264f964374 | 10 | |
DCchico |
0:95264f964374 | 11 | // External libs |
DCchico |
0:95264f964374 | 12 | #include <stdlib.h> |
DCchico |
0:95264f964374 | 13 | |
DCchico |
0:95264f964374 | 14 | // Project includes |
DCchico |
0:95264f964374 | 15 | #include "globals.h" |
DCchico |
0:95264f964374 | 16 | #include "hardware.h" |
DCchico |
0:95264f964374 | 17 | #include "compost_pile_public.h" |
DCchico |
0:95264f964374 | 18 | #include "fruit_public.h" |
DCchico |
0:95264f964374 | 19 | #include "player_public.h" |
DCchico |
0:95264f964374 | 20 | //SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sck, cs |
DCchico |
0:95264f964374 | 21 | |
DCchico |
0:95264f964374 | 22 | |
DCchico |
0:95264f964374 | 23 | // ===User implementations start=== |
DCchico |
0:95264f964374 | 24 | int fruit_contact(void); // iterate through fruits and see if any collided |
DCchico |
0:95264f964374 | 25 | void compost_pile_update(void); |
DCchico |
0:95264f964374 | 26 | void set_random_seed(Timer); |
levelsnake3 | 1:05e3f86df6d5 | 27 | int gameOver(int); |
levelsnake3 | 2:7abebe259d59 | 28 | void pause(PLAYER ply); |
levelsnake3 | 2:7abebe259d59 | 29 | bool paused = false; |
levelsnake3 | 1:05e3f86df6d5 | 30 | int end = 0; |
levelsnake3 | 2:7abebe259d59 | 31 | int pMode = 0; |
DCchico |
0:95264f964374 | 32 | |
DCchico |
0:95264f964374 | 33 | int main() |
DCchico |
0:95264f964374 | 34 | { |
DCchico |
0:95264f964374 | 35 | GameInputs inputs; |
DCchico |
0:95264f964374 | 36 | // First things first: initialize hardware |
DCchico |
0:95264f964374 | 37 | ASSERT_P(hardware_init() == ERROR_NONE, "Hardware init failed!"); |
DCchico |
0:95264f964374 | 38 | pc.printf("Program Starting\n"); |
levelsnake3 | 1:05e3f86df6d5 | 39 | |
DCchico |
0:95264f964374 | 40 | // ===User implementations start=== |
DCchico |
0:95264f964374 | 41 | // Game state variables |
levelsnake3 | 1:05e3f86df6d5 | 42 | /* |
levelsnake3 | 1:05e3f86df6d5 | 43 | struct GameInputs { |
levelsnake3 | 1:05e3f86df6d5 | 44 | int b1, b2, b3; // Button presses |
levelsnake3 | 1:05e3f86df6d5 | 45 | double ax, ay, az; // Accelerometer readings |
levelsnake3 | 1:05e3f86df6d5 | 46 | }; |
levelsnake3 | 1:05e3f86df6d5 | 47 | */ |
DCchico |
0:95264f964374 | 48 | // Timer to measure game update speed (secondarily used to generate random seed) |
DCchico |
0:95264f964374 | 49 | Timer t; |
DCchico |
0:95264f964374 | 50 | int dt; // delta time |
DCchico |
0:95264f964374 | 51 | set_random_seed(t); |
DCchico |
0:95264f964374 | 52 | |
levelsnake3 | 1:05e3f86df6d5 | 53 | |
DCchico |
0:95264f964374 | 54 | //initialize functions |
DCchico |
0:95264f964374 | 55 | compost_pile_init(); |
DCchico |
0:95264f964374 | 56 | fruit_init(); |
levelsnake3 | 2:7abebe259d59 | 57 | player_init(); |
levelsnake3 | 2:7abebe259d59 | 58 | |
levelsnake3 | 2:7abebe259d59 | 59 | PLAYER ply = player_get_info(); |
levelsnake3 | 2:7abebe259d59 | 60 | |
DCchico |
0:95264f964374 | 61 | pc.printf("Initialization complete\n"); |
levelsnake3 | 2:7abebe259d59 | 62 | |
levelsnake3 | 1:05e3f86df6d5 | 63 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 64 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 65 | draw_scoreMisses(ply.misses); |
levelsnake3 | 2:7abebe259d59 | 66 | int getMiss = returnMiss(); |
DCchico |
0:95264f964374 | 67 | while(1) |
DCchico |
0:95264f964374 | 68 | { |
levelsnake3 | 2:7abebe259d59 | 69 | |
DCchico |
0:95264f964374 | 70 | t.start(); |
levelsnake3 | 2:7abebe259d59 | 71 | ply = player_get_info(); |
DCchico |
0:95264f964374 | 72 | // Draw fruits first |
DCchico |
0:95264f964374 | 73 | //pc.printf("fruit_generator\n"); |
DCchico |
0:95264f964374 | 74 | fruit_generator(); |
DCchico |
0:95264f964374 | 75 | //Put score on screen |
DCchico |
0:95264f964374 | 76 | // NOTE: Text is 8 pixels tall |
DCchico |
0:95264f964374 | 77 | |
levelsnake3 | 1:05e3f86df6d5 | 78 | pc.printf("player_fruit_draw\n"); |
DCchico |
0:95264f964374 | 79 | |
DCchico |
0:95264f964374 | 80 | |
DCchico |
0:95264f964374 | 81 | |
DCchico |
0:95264f964374 | 82 | //pc.printf("Reading inputs\n"); |
DCchico |
0:95264f964374 | 83 | inputs = read_inputs(); |
levelsnake3 | 1:05e3f86df6d5 | 84 | |
DCchico |
0:95264f964374 | 85 | |
DCchico |
0:95264f964374 | 86 | //pc.printf("player motions\n"); |
levelsnake3 | 1:05e3f86df6d5 | 87 | if (!inputs.b1 || inputs.ay >=0.4) player_moveUp(); |
levelsnake3 | 1:05e3f86df6d5 | 88 | else if (!inputs.b2 || inputs.ay <= -0.4) |
levelsnake3 | 2:7abebe259d59 | 89 | { |
levelsnake3 | 2:7abebe259d59 | 90 | player_moveDown(); |
levelsnake3 | 2:7abebe259d59 | 91 | } |
levelsnake3 | 2:7abebe259d59 | 92 | else if (!inputs.b3) |
levelsnake3 | 2:7abebe259d59 | 93 | { |
levelsnake3 | 2:7abebe259d59 | 94 | player_throw(); |
levelsnake3 | 2:7abebe259d59 | 95 | } |
levelsnake3 | 2:7abebe259d59 | 96 | else if((!paused)&&(!inputs.b4)) |
levelsnake3 | 2:7abebe259d59 | 97 | { |
levelsnake3 | 2:7abebe259d59 | 98 | pause(ply); |
levelsnake3 | 1:05e3f86df6d5 | 99 | } |
levelsnake3 | 2:7abebe259d59 | 100 | while(paused){ |
levelsnake3 | 2:7abebe259d59 | 101 | inputs = read_inputs(); |
levelsnake3 | 2:7abebe259d59 | 102 | if(!inputs.b1){ |
levelsnake3 | 2:7abebe259d59 | 103 | |
levelsnake3 | 2:7abebe259d59 | 104 | pause(ply); |
levelsnake3 | 2:7abebe259d59 | 105 | } |
levelsnake3 | 2:7abebe259d59 | 106 | } |
levelsnake3 | 2:7abebe259d59 | 107 | if(ply.misses != getMiss){ |
levelsnake3 | 2:7abebe259d59 | 108 | ply = player_get_info(); |
levelsnake3 | 2:7abebe259d59 | 109 | draw_scoreMisses(ply.misses); |
levelsnake3 | 2:7abebe259d59 | 110 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 111 | getMiss = ply.misses; |
levelsnake3 | 2:7abebe259d59 | 112 | } |
levelsnake3 | 2:7abebe259d59 | 113 | |
levelsnake3 | 1:05e3f86df6d5 | 114 | player_knife_draw(); |
DCchico |
0:95264f964374 | 115 | //pc.printf("compost_pile_update\n"); |
DCchico |
0:95264f964374 | 116 | |
DCchico |
0:95264f964374 | 117 | //pc.printf("fruit_contact\n"); |
DCchico |
0:95264f964374 | 118 | int is_bomb = fruit_contact(); |
DCchico |
0:95264f964374 | 119 | |
DCchico |
0:95264f964374 | 120 | // TODO: Check end of the game |
DCchico |
0:95264f964374 | 121 | //pc.printf("check endgame\n"); |
DCchico |
0:95264f964374 | 122 | |
DCchico |
0:95264f964374 | 123 | // TODO: Check if game won |
DCchico |
0:95264f964374 | 124 | // Compute update time |
DCchico |
0:95264f964374 | 125 | t.stop(); |
DCchico |
0:95264f964374 | 126 | dt = t.read_ms(); |
DCchico |
0:95264f964374 | 127 | |
DCchico |
0:95264f964374 | 128 | if (dt < 100) wait_ms(100 - dt); |
levelsnake3 | 1:05e3f86df6d5 | 129 | if(gameOver(3)) break; |
levelsnake3 | 1:05e3f86df6d5 | 130 | |
DCchico |
0:95264f964374 | 131 | } |
DCchico |
0:95264f964374 | 132 | pc.printf("out of main loop\n"); |
DCchico |
0:95264f964374 | 133 | destroyList(get_fruit_list()); |
levelsnake3 | 1:05e3f86df6d5 | 134 | |
DCchico |
0:95264f964374 | 135 | return 0; |
DCchico |
0:95264f964374 | 136 | // ===User implementations end=== |
DCchico |
0:95264f964374 | 137 | } |
DCchico |
0:95264f964374 | 138 | |
DCchico |
0:95264f964374 | 139 | // ===User implementations start=== |
DCchico |
0:95264f964374 | 140 | |
DCchico |
0:95264f964374 | 141 | /* This function iterate through the fruit list, checking if anyone one of them is contacting |
DCchico |
0:95264f964374 | 142 | * with the player's knife. Don't forget to check if the "fruit" is the bomb, since we |
DCchico |
0:95264f964374 | 143 | * generated bombs using the fruit_generator. |
DCchico |
0:95264f964374 | 144 | */ |
levelsnake3 | 2:7abebe259d59 | 145 | void pause(PLAYER ply){ |
levelsnake3 | 2:7abebe259d59 | 146 | if(paused){ |
levelsnake3 | 2:7abebe259d59 | 147 | paused = false; |
levelsnake3 | 2:7abebe259d59 | 148 | draw_ground(); |
levelsnake3 | 2:7abebe259d59 | 149 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 150 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 151 | draw_scoreMisses(ply.misses); |
levelsnake3 | 2:7abebe259d59 | 152 | } |
levelsnake3 | 2:7abebe259d59 | 153 | else{ |
levelsnake3 | 2:7abebe259d59 | 154 | paused = true; |
levelsnake3 | 2:7abebe259d59 | 155 | draw_ground(); |
levelsnake3 | 2:7abebe259d59 | 156 | drawPause(); |
levelsnake3 | 2:7abebe259d59 | 157 | |
levelsnake3 | 2:7abebe259d59 | 158 | } |
levelsnake3 | 2:7abebe259d59 | 159 | |
levelsnake3 | 2:7abebe259d59 | 160 | } |
DCchico |
0:95264f964374 | 161 | int fruit_contact(void) { |
levelsnake3 | 1:05e3f86df6d5 | 162 | PLAYER ply = player_get_info(); |
levelsnake3 | 1:05e3f86df6d5 | 163 | |
levelsnake3 | 1:05e3f86df6d5 | 164 | /* newFruit->box.topLeft.x |
levelsnake3 | 1:05e3f86df6d5 | 165 | newFruit->box.topLeft.y |
levelsnake3 | 1:05e3f86df6d5 | 166 | newFruit->box.bottomRight.x |
levelsnake3 | 1:05e3f86df6d5 | 167 | newFruit->box.bottomRight.y |
levelsnake3 | 1:05e3f86df6d5 | 168 | |
levelsnake3 | 1:05e3f86df6d5 | 169 | player.knife_boundingBox.topLeft.x; |
levelsnake3 | 1:05e3f86df6d5 | 170 | player.knife_boundingBox.bottomRight.x ; |
levelsnake3 | 1:05e3f86df6d5 | 171 | |
levelsnake3 | 1:05e3f86df6d5 | 172 | player.knife_boundingBox.topLeft.y; |
levelsnake3 | 1:05e3f86df6d5 | 173 | player.knife_boundingBox.bottomRight.y ; |
levelsnake3 | 1:05e3f86df6d5 | 174 | */ |
levelsnake3 | 1:05e3f86df6d5 | 175 | DLinkedList* fruitDLL = get_fruit_list(); |
levelsnake3 | 1:05e3f86df6d5 | 176 | LLNode* current = fruitDLL->head; |
levelsnake3 | 1:05e3f86df6d5 | 177 | FRUIT* newFruit; |
levelsnake3 | 1:05e3f86df6d5 | 178 | //iterate over all fruits |
levelsnake3 | 1:05e3f86df6d5 | 179 | while(current) |
levelsnake3 | 1:05e3f86df6d5 | 180 | { |
levelsnake3 | 1:05e3f86df6d5 | 181 | newFruit = (FRUIT*) current->data; |
levelsnake3 | 2:7abebe259d59 | 182 | |
levelsnake3 | 2:7abebe259d59 | 183 | KNIFE knife1 = getKnifeInfo(0); |
levelsnake3 | 2:7abebe259d59 | 184 | KNIFE knife2 = getKnifeInfo(1); |
levelsnake3 | 2:7abebe259d59 | 185 | boundingBox knifePos1 = knife1.kbb; |
levelsnake3 | 2:7abebe259d59 | 186 | boundingBox knifePos2 = knife2.kbb; |
levelsnake3 | 2:7abebe259d59 | 187 | |
levelsnake3 | 1:05e3f86df6d5 | 188 | //need to check if each corner is inside the fruit |
levelsnake3 | 1:05e3f86df6d5 | 189 | |
levelsnake3 | 1:05e3f86df6d5 | 190 | /*pc.printf("\n\n\n\n\n\n\n\n %p %p\n topleft x %d %d\ntopleft y %d %d\n bottem right x %d %d\nbottem right y %d %d\n\n\n\n\n\n\n",current,current->next, |
levelsnake3 | 1:05e3f86df6d5 | 191 | newFruit->box.topLeft.x ,knifePos.topLeft.x, |
levelsnake3 | 1:05e3f86df6d5 | 192 | newFruit->box.bottomRight.y ,knifePos.topLeft.y, |
levelsnake3 | 1:05e3f86df6d5 | 193 | newFruit->box.bottomRight.x, knifePos.bottomRight.x, |
levelsnake3 | 1:05e3f86df6d5 | 194 | newFruit->box.topLeft.y, knifePos.bottomRight.y );*/ |
levelsnake3 | 1:05e3f86df6d5 | 195 | //if(ply.player_has_knife == 0){ |
levelsnake3 | 1:05e3f86df6d5 | 196 | |
levelsnake3 | 2:7abebe259d59 | 197 | if((newFruit->box.topLeft.x <= knifePos1.topLeft.x) && (newFruit->box.bottomRight.x >= knifePos1.topLeft.x) && (newFruit->box.bottomRight.y >= knifePos1.topLeft.y) && (newFruit->box.topLeft.y <= knifePos1.topLeft.y)){ |
levelsnake3 | 1:05e3f86df6d5 | 198 | newFruit->status = FRUIT_SLICED; |
levelsnake3 | 1:05e3f86df6d5 | 199 | if(newFruit->type == 0){ |
levelsnake3 | 2:7abebe259d59 | 200 | hurt(); |
levelsnake3 | 2:7abebe259d59 | 201 | } |
levelsnake3 | 2:7abebe259d59 | 202 | else if(newFruit->type ==3){ |
levelsnake3 | 2:7abebe259d59 | 203 | removeTop(); |
levelsnake3 | 2:7abebe259d59 | 204 | } |
levelsnake3 | 2:7abebe259d59 | 205 | else if(newFruit->type ==4){ |
levelsnake3 | 2:7abebe259d59 | 206 | player_score_inc(0); |
levelsnake3 | 2:7abebe259d59 | 207 | |
levelsnake3 | 2:7abebe259d59 | 208 | } |
levelsnake3 | 2:7abebe259d59 | 209 | else{ |
levelsnake3 | 2:7abebe259d59 | 210 | player_score_inc(1); |
levelsnake3 | 2:7abebe259d59 | 211 | ply = player_get_info(); |
levelsnake3 | 2:7abebe259d59 | 212 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 213 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 214 | } |
levelsnake3 | 2:7abebe259d59 | 215 | doReturnK(0,0); |
levelsnake3 | 2:7abebe259d59 | 216 | } |
levelsnake3 | 2:7abebe259d59 | 217 | else if((newFruit->box.topLeft.x <= knifePos1.bottomRight.x) && (newFruit->box.bottomRight.x >= knifePos1.bottomRight.x) && (newFruit->box.bottomRight.y >= knifePos1.bottomRight.y) && (newFruit->box.topLeft.y <= knifePos1.bottomRight.y)){ |
levelsnake3 | 2:7abebe259d59 | 218 | newFruit->status = FRUIT_SLICED; |
levelsnake3 | 2:7abebe259d59 | 219 | if(newFruit->type == 0){ |
levelsnake3 | 2:7abebe259d59 | 220 | hurt(); |
levelsnake3 | 2:7abebe259d59 | 221 | } |
levelsnake3 | 2:7abebe259d59 | 222 | else if(newFruit->type ==3){ |
levelsnake3 | 2:7abebe259d59 | 223 | removeTop(); |
levelsnake3 | 2:7abebe259d59 | 224 | } |
levelsnake3 | 2:7abebe259d59 | 225 | else if(newFruit->type ==4){ |
levelsnake3 | 2:7abebe259d59 | 226 | player_score_inc(0); |
levelsnake3 | 2:7abebe259d59 | 227 | |
levelsnake3 | 1:05e3f86df6d5 | 228 | } |
levelsnake3 | 1:05e3f86df6d5 | 229 | else{ |
levelsnake3 | 2:7abebe259d59 | 230 | |
levelsnake3 | 2:7abebe259d59 | 231 | player_score_inc(1); |
levelsnake3 | 2:7abebe259d59 | 232 | ply = player_get_info(); |
levelsnake3 | 2:7abebe259d59 | 233 | |
levelsnake3 | 1:05e3f86df6d5 | 234 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 235 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 236 | } |
levelsnake3 | 2:7abebe259d59 | 237 | doReturnK(0,0); |
levelsnake3 | 1:05e3f86df6d5 | 238 | } |
levelsnake3 | 2:7abebe259d59 | 239 | else if((newFruit->box.topLeft.x <= knifePos1.topLeft.x) && (newFruit->box.bottomRight.x >= knifePos1.topLeft.x) && (newFruit->box.bottomRight.y >= knifePos1.bottomRight.y) && (newFruit->box.topLeft.y <= knifePos1.bottomRight.y)){ |
levelsnake3 | 1:05e3f86df6d5 | 240 | newFruit->status = FRUIT_SLICED; |
levelsnake3 | 2:7abebe259d59 | 241 | if(newFruit->type == 0){ |
levelsnake3 | 2:7abebe259d59 | 242 | hurt(); |
levelsnake3 | 2:7abebe259d59 | 243 | } |
levelsnake3 | 2:7abebe259d59 | 244 | else if(newFruit->type ==3){ |
levelsnake3 | 2:7abebe259d59 | 245 | removeTop(); |
levelsnake3 | 2:7abebe259d59 | 246 | } |
levelsnake3 | 2:7abebe259d59 | 247 | else if(newFruit->type ==4){ |
levelsnake3 | 2:7abebe259d59 | 248 | player_score_inc(0); |
levelsnake3 | 2:7abebe259d59 | 249 | |
levelsnake3 | 2:7abebe259d59 | 250 | } |
levelsnake3 | 2:7abebe259d59 | 251 | else{ |
levelsnake3 | 2:7abebe259d59 | 252 | player_score_inc(1); |
levelsnake3 | 2:7abebe259d59 | 253 | ply = player_get_info(); |
levelsnake3 | 2:7abebe259d59 | 254 | |
levelsnake3 | 2:7abebe259d59 | 255 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 256 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 257 | } |
levelsnake3 | 2:7abebe259d59 | 258 | doReturnK(0,0); |
levelsnake3 | 2:7abebe259d59 | 259 | } |
levelsnake3 | 2:7abebe259d59 | 260 | else if((newFruit->box.topLeft.x <= knifePos1.bottomRight.x) && (newFruit->box.bottomRight.x >= knifePos1.bottomRight.x) && (newFruit->box.bottomRight.y >= knifePos1.topLeft.y) && (newFruit->box.topLeft.y <= knifePos1.topLeft.y)){ |
levelsnake3 | 2:7abebe259d59 | 261 | newFruit->status = FRUIT_SLICED; |
levelsnake3 | 2:7abebe259d59 | 262 | if(newFruit->type == 0){ |
levelsnake3 | 2:7abebe259d59 | 263 | hurt(); |
levelsnake3 | 2:7abebe259d59 | 264 | } |
levelsnake3 | 2:7abebe259d59 | 265 | else if(newFruit->type ==3){ |
levelsnake3 | 2:7abebe259d59 | 266 | removeTop(); |
levelsnake3 | 2:7abebe259d59 | 267 | } |
levelsnake3 | 2:7abebe259d59 | 268 | else if(newFruit->type ==4){ |
levelsnake3 | 2:7abebe259d59 | 269 | player_score_inc(0); |
levelsnake3 | 2:7abebe259d59 | 270 | |
levelsnake3 | 1:05e3f86df6d5 | 271 | } |
levelsnake3 | 1:05e3f86df6d5 | 272 | else{ |
levelsnake3 | 2:7abebe259d59 | 273 | player_score_inc(1); |
levelsnake3 | 2:7abebe259d59 | 274 | ply = player_get_info(); |
levelsnake3 | 2:7abebe259d59 | 275 | |
levelsnake3 | 1:05e3f86df6d5 | 276 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 277 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 278 | } |
levelsnake3 | 2:7abebe259d59 | 279 | doReturnK(0,0); |
levelsnake3 | 2:7abebe259d59 | 280 | } |
levelsnake3 | 2:7abebe259d59 | 281 | |
levelsnake3 | 2:7abebe259d59 | 282 | if((newFruit->box.topLeft.x <= knifePos2.topLeft.x) && (newFruit->box.bottomRight.x >= knifePos2.topLeft.x) && (newFruit->box.bottomRight.y >= knifePos2.topLeft.y) && (newFruit->box.topLeft.y <= knifePos2.topLeft.y)){ |
levelsnake3 | 1:05e3f86df6d5 | 283 | newFruit->status = FRUIT_SLICED; |
levelsnake3 | 1:05e3f86df6d5 | 284 | if(newFruit->type == 0){ |
levelsnake3 | 2:7abebe259d59 | 285 | hurt(); |
levelsnake3 | 2:7abebe259d59 | 286 | } |
levelsnake3 | 2:7abebe259d59 | 287 | else if(newFruit->type ==3){ |
levelsnake3 | 2:7abebe259d59 | 288 | removeTop(); |
levelsnake3 | 2:7abebe259d59 | 289 | } |
levelsnake3 | 2:7abebe259d59 | 290 | else if(newFruit->type ==4){ |
levelsnake3 | 2:7abebe259d59 | 291 | player_score_inc(0); |
levelsnake3 | 2:7abebe259d59 | 292 | |
levelsnake3 | 2:7abebe259d59 | 293 | } |
levelsnake3 | 2:7abebe259d59 | 294 | else{ |
levelsnake3 | 2:7abebe259d59 | 295 | player_score_inc(1); |
levelsnake3 | 2:7abebe259d59 | 296 | ply = player_get_info(); |
levelsnake3 | 2:7abebe259d59 | 297 | |
levelsnake3 | 2:7abebe259d59 | 298 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 299 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 300 | } |
levelsnake3 | 2:7abebe259d59 | 301 | doReturnK(1,0); |
levelsnake3 | 2:7abebe259d59 | 302 | } |
levelsnake3 | 2:7abebe259d59 | 303 | else if((newFruit->box.topLeft.x <= knifePos2.bottomRight.x) && (newFruit->box.bottomRight.x >= knifePos2.bottomRight.x) && (newFruit->box.bottomRight.y >= knifePos2.bottomRight.y) && (newFruit->box.topLeft.y <= knifePos2.bottomRight.y)){ |
levelsnake3 | 2:7abebe259d59 | 304 | newFruit->status = FRUIT_SLICED; |
levelsnake3 | 2:7abebe259d59 | 305 | if(newFruit->type == 0){ |
levelsnake3 | 2:7abebe259d59 | 306 | hurt(); |
levelsnake3 | 2:7abebe259d59 | 307 | } |
levelsnake3 | 2:7abebe259d59 | 308 | else if(newFruit->type ==3){ |
levelsnake3 | 2:7abebe259d59 | 309 | removeTop(); |
levelsnake3 | 2:7abebe259d59 | 310 | } |
levelsnake3 | 2:7abebe259d59 | 311 | else if(newFruit->type ==4){ |
levelsnake3 | 2:7abebe259d59 | 312 | player_score_inc(0); |
levelsnake3 | 2:7abebe259d59 | 313 | |
levelsnake3 | 1:05e3f86df6d5 | 314 | } |
levelsnake3 | 1:05e3f86df6d5 | 315 | else{ |
levelsnake3 | 2:7abebe259d59 | 316 | player_score_inc(1); |
levelsnake3 | 2:7abebe259d59 | 317 | ply = player_get_info(); |
levelsnake3 | 2:7abebe259d59 | 318 | |
levelsnake3 | 1:05e3f86df6d5 | 319 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 320 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 321 | } |
levelsnake3 | 2:7abebe259d59 | 322 | doReturnK(1,0); |
levelsnake3 | 1:05e3f86df6d5 | 323 | } |
levelsnake3 | 2:7abebe259d59 | 324 | else if((newFruit->box.topLeft.x <= knifePos2.topLeft.x) && (newFruit->box.bottomRight.x >= knifePos2.topLeft.x) && (newFruit->box.bottomRight.y >= knifePos2.bottomRight.y) && (newFruit->box.topLeft.y <= knifePos2.bottomRight.y)){ |
levelsnake3 | 1:05e3f86df6d5 | 325 | newFruit->status = FRUIT_SLICED; |
levelsnake3 | 1:05e3f86df6d5 | 326 | if(newFruit->type == 0){ |
levelsnake3 | 2:7abebe259d59 | 327 | hurt(); |
levelsnake3 | 2:7abebe259d59 | 328 | } |
levelsnake3 | 2:7abebe259d59 | 329 | else if(newFruit->type ==3){ |
levelsnake3 | 2:7abebe259d59 | 330 | removeTop(); |
levelsnake3 | 2:7abebe259d59 | 331 | } |
levelsnake3 | 2:7abebe259d59 | 332 | else if(newFruit->type ==4){ |
levelsnake3 | 2:7abebe259d59 | 333 | player_score_inc(0); |
levelsnake3 | 2:7abebe259d59 | 334 | |
levelsnake3 | 1:05e3f86df6d5 | 335 | } |
levelsnake3 | 1:05e3f86df6d5 | 336 | else{ |
levelsnake3 | 2:7abebe259d59 | 337 | player_score_inc(1); |
levelsnake3 | 2:7abebe259d59 | 338 | ply = player_get_info(); |
levelsnake3 | 2:7abebe259d59 | 339 | |
levelsnake3 | 1:05e3f86df6d5 | 340 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 341 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 342 | } |
levelsnake3 | 2:7abebe259d59 | 343 | doReturnK(1,0); |
levelsnake3 | 2:7abebe259d59 | 344 | } |
levelsnake3 | 2:7abebe259d59 | 345 | else if((newFruit->box.topLeft.x <= knifePos2.bottomRight.x) && (newFruit->box.bottomRight.x >= knifePos2.bottomRight.x) && (newFruit->box.bottomRight.y >= knifePos2.topLeft.y) && (newFruit->box.topLeft.y <= knifePos2.topLeft.y)){ |
levelsnake3 | 2:7abebe259d59 | 346 | newFruit->status = FRUIT_SLICED; |
levelsnake3 | 2:7abebe259d59 | 347 | if(newFruit->type == 0){ |
levelsnake3 | 2:7abebe259d59 | 348 | hurt(); |
levelsnake3 | 1:05e3f86df6d5 | 349 | } |
levelsnake3 | 2:7abebe259d59 | 350 | else if(newFruit->type ==3){ |
levelsnake3 | 2:7abebe259d59 | 351 | removeTop(); |
levelsnake3 | 2:7abebe259d59 | 352 | } |
levelsnake3 | 2:7abebe259d59 | 353 | else if(newFruit->type ==4){ |
levelsnake3 | 2:7abebe259d59 | 354 | player_score_inc(0); |
levelsnake3 | 2:7abebe259d59 | 355 | |
levelsnake3 | 2:7abebe259d59 | 356 | } |
levelsnake3 | 2:7abebe259d59 | 357 | else{ |
levelsnake3 | 2:7abebe259d59 | 358 | player_score_inc(1); |
levelsnake3 | 2:7abebe259d59 | 359 | draw_scoreBoard(ply.score); |
levelsnake3 | 2:7abebe259d59 | 360 | draw_scoreCombo(ply.combo); |
levelsnake3 | 2:7abebe259d59 | 361 | } |
levelsnake3 | 2:7abebe259d59 | 362 | doReturnK(1,0); |
levelsnake3 | 2:7abebe259d59 | 363 | } |
levelsnake3 | 2:7abebe259d59 | 364 | if(dead(pMode)){ |
levelsnake3 | 2:7abebe259d59 | 365 | gameOver(0); |
levelsnake3 | 2:7abebe259d59 | 366 | } |
levelsnake3 | 2:7abebe259d59 | 367 | |
levelsnake3 | 1:05e3f86df6d5 | 368 | int index = (((newFruit->box.topLeft.x+5)/11)%11); |
levelsnake3 | 1:05e3f86df6d5 | 369 | COMPOST compIn = compost_get_info(index); |
levelsnake3 | 1:05e3f86df6d5 | 370 | if(newFruit->box.bottomRight.y >= (115 - compIn.height)){ |
levelsnake3 | 1:05e3f86df6d5 | 371 | newFruit-> status = FRUIT_SLICED; |
levelsnake3 | 2:7abebe259d59 | 372 | if((newFruit->type != 0)&&(newFruit->type != 3)&&(newFruit->type != 5)) { |
levelsnake3 | 1:05e3f86df6d5 | 373 | compost_add(index); |
levelsnake3 | 2:7abebe259d59 | 374 | if(newFruit->type == 4) compost_add(index); |
levelsnake3 | 2:7abebe259d59 | 375 | if(get_compost_tallest_height() >= 6) |
levelsnake3 | 1:05e3f86df6d5 | 376 | { |
levelsnake3 | 1:05e3f86df6d5 | 377 | gameOver(0); |
levelsnake3 | 1:05e3f86df6d5 | 378 | } |
levelsnake3 | 1:05e3f86df6d5 | 379 | } |
levelsnake3 | 1:05e3f86df6d5 | 380 | } |
levelsnake3 | 2:7abebe259d59 | 381 | if(ply.score >= 25 && pMode == 0)gameOver(1); |
levelsnake3 | 1:05e3f86df6d5 | 382 | current = current->next; |
levelsnake3 | 1:05e3f86df6d5 | 383 | } |
levelsnake3 | 1:05e3f86df6d5 | 384 | // } |
levelsnake3 | 1:05e3f86df6d5 | 385 | return; |
DCchico |
0:95264f964374 | 386 | |
DCchico |
0:95264f964374 | 387 | } |
DCchico |
0:95264f964374 | 388 | |
DCchico |
0:95264f964374 | 389 | /** Call compost_pile_update() repeatedly in your game-loop. ex: main() |
DCchico |
0:95264f964374 | 390 | This function iterate through the fruit list. Add fruits that reach the bottom of the screen |
DCchico |
0:95264f964374 | 391 | to the compost pile. |
DCchico |
0:95264f964374 | 392 | @return Number of remaining cities. You might end the game when all cities are demolished. |
DCchico |
0:95264f964374 | 393 | */ |
levelsnake3 | 1:05e3f86df6d5 | 394 | int gameOver(int con){ |
levelsnake3 | 1:05e3f86df6d5 | 395 | uLCD.locate(5, 7); |
levelsnake3 | 1:05e3f86df6d5 | 396 | if(con == 1){ |
levelsnake3 | 1:05e3f86df6d5 | 397 | uLCD.filled_rectangle(0, 0, 120, 120, GREEN); |
levelsnake3 | 1:05e3f86df6d5 | 398 | uLCD.filled_rectangle(10, 10, 110, 110, BLACK); |
levelsnake3 | 1:05e3f86df6d5 | 399 | uLCD.printf("WINNER"); |
levelsnake3 | 1:05e3f86df6d5 | 400 | end = 1; |
DCchico |
0:95264f964374 | 401 | } |
levelsnake3 | 1:05e3f86df6d5 | 402 | else if(con == 0){ |
DCchico |
0:95264f964374 | 403 | |
levelsnake3 | 1:05e3f86df6d5 | 404 | uLCD.filled_rectangle(0, 0, 120, 120, RED); |
levelsnake3 | 1:05e3f86df6d5 | 405 | uLCD.filled_rectangle(10, 10, 110, 110, BLACK); uLCD.printf("YOU LOSE"); |
levelsnake3 | 1:05e3f86df6d5 | 406 | end = 1; |
levelsnake3 | 1:05e3f86df6d5 | 407 | } |
levelsnake3 | 1:05e3f86df6d5 | 408 | return end; |
DCchico |
0:95264f964374 | 409 | } |
DCchico |
0:95264f964374 | 410 | void set_random_seed(Timer t) { |
DCchico |
0:95264f964374 | 411 | GameInputs inputs; |
DCchico |
0:95264f964374 | 412 | t.start(); |
levelsnake3 | 2:7abebe259d59 | 413 | uLCD.printf("Choose Difficulty to start\n\nB1.Easy\nB2.Normal\nB3.Hard\nB4.PractceMode\n"); |
DCchico |
0:95264f964374 | 414 | while(1){ |
levelsnake3 | 2:7abebe259d59 | 415 | inputs = read_inputs(); |
levelsnake3 | 2:7abebe259d59 | 416 | if (!inputs.b1){ |
levelsnake3 | 2:7abebe259d59 | 417 | pMode = 0; |
levelsnake3 | 2:7abebe259d59 | 418 | |
levelsnake3 | 2:7abebe259d59 | 419 | uLCD.baudrate(38400); |
levelsnake3 | 2:7abebe259d59 | 420 | difficultyMode(1); |
levelsnake3 | 2:7abebe259d59 | 421 | break; |
levelsnake3 | 2:7abebe259d59 | 422 | } |
levelsnake3 | 2:7abebe259d59 | 423 | else if(!inputs.b2){ |
levelsnake3 | 2:7abebe259d59 | 424 | pMode = 0; |
levelsnake3 | 2:7abebe259d59 | 425 | |
levelsnake3 | 2:7abebe259d59 | 426 | uLCD.baudrate(56000); |
levelsnake3 | 2:7abebe259d59 | 427 | difficultyMode(0); |
levelsnake3 | 2:7abebe259d59 | 428 | break; |
levelsnake3 | 2:7abebe259d59 | 429 | } |
levelsnake3 | 2:7abebe259d59 | 430 | else if(!inputs.b3){ |
levelsnake3 | 2:7abebe259d59 | 431 | pMode = 0; |
levelsnake3 | 2:7abebe259d59 | 432 | |
levelsnake3 | 2:7abebe259d59 | 433 | uLCD.baudrate(128000); |
levelsnake3 | 2:7abebe259d59 | 434 | difficultyMode(2); |
levelsnake3 | 2:7abebe259d59 | 435 | break; |
levelsnake3 | 2:7abebe259d59 | 436 | } |
levelsnake3 | 2:7abebe259d59 | 437 | else if(!inputs.b4){ |
levelsnake3 | 2:7abebe259d59 | 438 | uLCD.baudrate(56000); |
levelsnake3 | 2:7abebe259d59 | 439 | pMode = 1; |
levelsnake3 | 2:7abebe259d59 | 440 | difficultyMode(3); |
levelsnake3 | 2:7abebe259d59 | 441 | break; |
levelsnake3 | 2:7abebe259d59 | 442 | } |
levelsnake3 | 2:7abebe259d59 | 443 | } |
DCchico |
0:95264f964374 | 444 | uLCD.cls(); |
DCchico |
0:95264f964374 | 445 | t.stop(); |
DCchico |
0:95264f964374 | 446 | int seed = t.read_ms(); |
DCchico |
0:95264f964374 | 447 | srand(seed); |
DCchico |
0:95264f964374 | 448 | } |
DCchico |
0:95264f964374 | 449 | // ===User implementations end=== |