finished p2-2

Dependencies:   mbed wave_player 4DGL-uLCD-SE MMA8452

Committer:
levelsnake3
Date:
Mon Apr 26 00:30:47 2021 +0000
Revision:
2:7abebe259d59
Parent:
1:05e3f86df6d5
finalAdv;

Who changed what in which revision?

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