Falldown completed game

Dependencies:   mbed

Committer:
el17cr
Date:
Thu May 09 15:17:36 2019 +0000
Revision:
8:8d9c5a7e57d3
Parent:
7:cf469c3505a2
Finalised publish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17cr 0:adb2f501dd61 1 /*
el17cr 0:adb2f501dd61 2 ELEC2645 Embedded Systems Project
el17cr 0:adb2f501dd61 3 School of Electronic & Electrical Engineering
el17cr 0:adb2f501dd61 4 University of Leeds
el17cr 7:cf469c3505a2 5 Name: Connor Rainey
el17cr 7:cf469c3505a2 6 Username: el17cr
el17cr 7:cf469c3505a2 7 Student ID Number: 201125971
el17cr 7:cf469c3505a2 8 Date: 09/05/2019
el17cr 0:adb2f501dd61 9 */
el17cr 2:7f91a86b4dc0 10
el17cr 2:7f91a86b4dc0 11 #include "mbed.h"
el17cr 2:7f91a86b4dc0 12 #include "Gamepad.h"
el17cr 2:7f91a86b4dc0 13 #include "N5110.h"
el17cr 2:7f91a86b4dc0 14 #include "Falldown.h"
el17cr 2:7f91a86b4dc0 15
el17cr 7:cf469c3505a2 16 // These values cannot be changed
el17cr 2:7f91a86b4dc0 17 #define GROUND_HEIGHT 2
el17cr 3:5edefa83f8f0 18 #define BALL_SIZE 3
el17cr 3:5edefa83f8f0 19
el17cr 2:7f91a86b4dc0 20
el17cr 7:cf469c3505a2 21 // define initial ground width, ground speed and level
el17cr 6:85314a3d69cd 22 int ground_width = 40;
el17cr 7:cf469c3505a2 23 double ground_speed = 0.3;
el17cr 6:85314a3d69cd 24 int level = 1;
el17cr 2:7f91a86b4dc0 25
el17cr 7:cf469c3505a2 26 // struct holds data for reading joystick
el17cr 2:7f91a86b4dc0 27 struct UserInput {
el17cr 2:7f91a86b4dc0 28 Direction d;
el17cr 2:7f91a86b4dc0 29 float mag;
el17cr 2:7f91a86b4dc0 30 };
el17cr 2:7f91a86b4dc0 31
el17cr 2:7f91a86b4dc0 32 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // K64F - pwr from 3V3
el17cr 7:cf469c3505a2 33 Gamepad pad; //gamepad library
el17cr 7:cf469c3505a2 34 Falldown falldown; // falldown class
el17cr 2:7f91a86b4dc0 35
el17cr 2:7f91a86b4dc0 36 void init();
el17cr 2:7f91a86b4dc0 37 void update_game(UserInput input);
el17cr 2:7f91a86b4dc0 38 void render();
el17cr 6:85314a3d69cd 39 void welcome();
el17cr 7:cf469c3505a2 40 void game_over();
el17cr 7:cf469c3505a2 41 void game_complete();
el17cr 2:7f91a86b4dc0 42
el17cr 5:1a9d84df7207 43
el17cr 2:7f91a86b4dc0 44 int main()
el17cr 2:7f91a86b4dc0 45 {
el17cr 2:7f91a86b4dc0 46 init();
el17cr 6:85314a3d69cd 47 welcome();
el17cr 2:7f91a86b4dc0 48 render();
el17cr 7:cf469c3505a2 49 wait(0.1); //delay required before clearing the display and constructing the next frame
el17cr 7:cf469c3505a2 50
el17cr 7:cf469c3505a2 51 // start game loop
el17cr 7:cf469c3505a2 52 while(1) {
el17cr 2:7f91a86b4dc0 53 falldown.read_input(pad);
el17cr 2:7f91a86b4dc0 54 falldown.update(pad);
el17cr 2:7f91a86b4dc0 55 render();
el17cr 2:7f91a86b4dc0 56 wait(0.1);
el17cr 7:cf469c3505a2 57 // check goal funtion returns a 1 if ball reaches the bottom of the screen
el17cr 5:1a9d84df7207 58 if (falldown.check_goal() == 1) {
el17cr 7:cf469c3505a2 59 level = level++; // increment level if goal reached
el17cr 7:cf469c3505a2 60 ground_width = ground_width + 1; // increases ground width
el17cr 7:cf469c3505a2 61 ground_speed = ground_speed + 0.1; // increase ground speed
el17cr 7:cf469c3505a2 62 falldown.init(GROUND_HEIGHT,ground_width,BALL_SIZE,ground_speed); // re-initialise game with new values
el17cr 5:1a9d84df7207 63 wait(0.1);
el17cr 7:cf469c3505a2 64
el17cr 7:cf469c3505a2 65 // if on final level, and goal reached
el17cr 7:cf469c3505a2 66 } else if ((level == 5) && (falldown.check_complete() == 1)) {
el17cr 7:cf469c3505a2 67 game_complete(); // call game complete function
el17cr 7:cf469c3505a2 68 wait(0.5);
el17cr 7:cf469c3505a2 69 level = 1; // if game complete function is broken and player chooses to play again, re-set values for level, ground width and ground speed
el17cr 7:cf469c3505a2 70 ground_width = 40;
el17cr 7:cf469c3505a2 71 ground_speed = 0.5;
el17cr 7:cf469c3505a2 72 falldown.init(GROUND_HEIGHT,ground_width,BALL_SIZE,ground_speed); // re-initialise game with new values
el17cr 7:cf469c3505a2 73 wait(0.1);
el17cr 7:cf469c3505a2 74
el17cr 7:cf469c3505a2 75 //
el17cr 7:cf469c3505a2 76 } else if (falldown.check_end() == 1) {
el17cr 7:cf469c3505a2 77 game_over(); // call game over function
el17cr 7:cf469c3505a2 78 level = 1; // if game over function is broken and player chooses to play again, re-set values for level, ground width and ground speed
el17cr 7:cf469c3505a2 79 ground_width = 40;
el17cr 7:cf469c3505a2 80 ground_speed = 0.5;
el17cr 7:cf469c3505a2 81 falldown.init(GROUND_HEIGHT,ground_width,BALL_SIZE,ground_speed); // re-initialise game with new values
el17cr 7:cf469c3505a2 82 wait(0.1);
el17cr 5:1a9d84df7207 83 }
el17cr 2:7f91a86b4dc0 84 }
el17cr 7:cf469c3505a2 85 }
el17cr 5:1a9d84df7207 86
el17cr 7:cf469c3505a2 87 void init() // initialise lcd, gamepad and game
el17cr 2:7f91a86b4dc0 88 {
el17cr 2:7f91a86b4dc0 89 lcd.init();
el17cr 2:7f91a86b4dc0 90 pad.init();
el17cr 7:cf469c3505a2 91
el17cr 6:85314a3d69cd 92 falldown.init(GROUND_HEIGHT,ground_width,BALL_SIZE,ground_speed);
el17cr 2:7f91a86b4dc0 93 }
el17cr 2:7f91a86b4dc0 94
el17cr 7:cf469c3505a2 95 void render() // render game
el17cr 2:7f91a86b4dc0 96 {
el17cr 7:cf469c3505a2 97 lcd.clear(); //clear lcd
el17cr 7:cf469c3505a2 98 falldown.draw(lcd); //draws game
el17cr 7:cf469c3505a2 99 char buffer[1]; //displays level
el17cr 7:cf469c3505a2 100 sprintf(buffer,"%2d",level);
el17cr 7:cf469c3505a2 101 lcd.printString(buffer,0,1);
el17cr 7:cf469c3505a2 102 lcd.refresh();
el17cr 7:cf469c3505a2 103 }
el17cr 5:1a9d84df7207 104
el17cr 7:cf469c3505a2 105 void welcome() //Displays welcome screen
el17cr 7:cf469c3505a2 106 {
el17cr 7:cf469c3505a2 107 lcd.printString("*Falldown*",12,0);
el17cr 7:cf469c3505a2 108 lcd.printString("Get to",24,2);
el17cr 7:cf469c3505a2 109 lcd.printString("the bottom!",11,3);
el17cr 7:cf469c3505a2 110 lcd.printString("Press Start",11,5);
el17cr 7:cf469c3505a2 111
el17cr 2:7f91a86b4dc0 112 lcd.refresh();
el17cr 5:1a9d84df7207 113
el17cr 7:cf469c3505a2 114 // leds flash until start pressed
el17cr 6:85314a3d69cd 115 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
el17cr 6:85314a3d69cd 116 pad.leds_on();
el17cr 6:85314a3d69cd 117 wait(0.1);
el17cr 6:85314a3d69cd 118 pad.leds_off();
el17cr 6:85314a3d69cd 119 wait(0.1);
el17cr 6:85314a3d69cd 120 }
el17cr 6:85314a3d69cd 121 }
el17cr 7:cf469c3505a2 122
el17cr 7:cf469c3505a2 123 void game_over()
el17cr 7:cf469c3505a2 124 {
el17cr 7:cf469c3505a2 125 lcd.init(); //re initialise lcd
el17cr 7:cf469c3505a2 126 lcd.printString("Game Over! :-(",0,0);
el17cr 7:cf469c3505a2 127 lcd.printString("centre",25,2);
el17cr 7:cf469c3505a2 128 lcd.printString("joystick",20,3);
el17cr 7:cf469c3505a2 129 lcd.printString("Play again? A",0,5);
el17cr 7:cf469c3505a2 130 lcd.refresh();
el17cr 7:cf469c3505a2 131 while (pad.check_event(Gamepad::A_PRESSED) == false) {
el17cr 7:cf469c3505a2 132 pad.leds_on();
el17cr 7:cf469c3505a2 133 wait(0.1);
el17cr 7:cf469c3505a2 134 pad.leds_off();
el17cr 7:cf469c3505a2 135 wait(0.1);
el17cr 7:cf469c3505a2 136 if (pad.check_event(Gamepad::A_PRESSED) == true) {
el17cr 7:cf469c3505a2 137 break; // break while loop when button is pressed and continue main game loop
el17cr 7:cf469c3505a2 138 }
el17cr 7:cf469c3505a2 139 }
el17cr 7:cf469c3505a2 140 wait(0.5);
el17cr 7:cf469c3505a2 141 pad.init(); //bug fix, initialise pad ensures button does remain true from last time it was pressed
el17cr 7:cf469c3505a2 142 }
el17cr 7:cf469c3505a2 143
el17cr 7:cf469c3505a2 144 // Function adjusted for completion of the game
el17cr 7:cf469c3505a2 145 void game_complete()
el17cr 7:cf469c3505a2 146 {
el17cr 7:cf469c3505a2 147 lcd.init();
el17cr 7:cf469c3505a2 148 lcd.printString("Game Complete!",0,0);
el17cr 7:cf469c3505a2 149 lcd.printString(":-)",33,2);
el17cr 7:cf469c3505a2 150 lcd.printString("Play again? A",0,4);
el17cr 7:cf469c3505a2 151 lcd.refresh();
el17cr 7:cf469c3505a2 152 while (pad.check_event(Gamepad::A_PRESSED) == false) {
el17cr 7:cf469c3505a2 153 pad.leds_on();
el17cr 7:cf469c3505a2 154 wait(0.1);
el17cr 7:cf469c3505a2 155 pad.leds_off();
el17cr 7:cf469c3505a2 156 wait(0.1);
el17cr 7:cf469c3505a2 157 if (pad.check_event(Gamepad::A_PRESSED) == true) {
el17cr 7:cf469c3505a2 158 break;
el17cr 7:cf469c3505a2 159 }
el17cr 7:cf469c3505a2 160 }
el17cr 7:cf469c3505a2 161 wait(0.5);
el17cr 7:cf469c3505a2 162 pad.init();
el17cr 7:cf469c3505a2 163 }