yumaowei 201377547

Dependencies:   mbed ELEC2645_Project_el17my

Committer:
yumaowei
Date:
Tue May 26 07:24:21 2020 +0000
Revision:
2:5e54476c518f
Parent:
1:df66be0b5b8b
Final Submission. I have read and agreed with Statement of Academic Integrity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:b7f1f47bb26a 1 /*
eencae 0:b7f1f47bb26a 2 ELEC2645 Embedded Systems Project
eencae 0:b7f1f47bb26a 3 School of Electronic & Electrical Engineering
eencae 0:b7f1f47bb26a 4 University of Leeds
eencae 0:b7f1f47bb26a 5 2019/20
eencae 0:b7f1f47bb26a 6
yumaowei 1:df66be0b5b8b 7 Name:yumaowei
yumaowei 2:5e54476c518f 8 Username:el19my
yumaowei 1:df66be0b5b8b 9 Student ID Number:201377547
eencae 0:b7f1f47bb26a 10 Date:
eencae 0:b7f1f47bb26a 11 */
eencae 0:b7f1f47bb26a 12
eencae 0:b7f1f47bb26a 13 // includes
eencae 0:b7f1f47bb26a 14 #include "mbed.h"
eencae 0:b7f1f47bb26a 15 #include "Gamepad.h"
yumaowei 2:5e54476c518f 16 #include "LCD.h"
yumaowei 2:5e54476c518f 17 #include "HuntEngine.h"
yumaowei 2:5e54476c518f 18 #include "Predator.h"
yumaowei 2:5e54476c518f 19
yumaowei 2:5e54476c518f 20 #ifdef WITH_TESTING
yumaowei 2:5e54476c518f 21 # include "tests.h"
yumaowei 2:5e54476c518f 22 #endif
yumaowei 2:5e54476c518f 23
yumaowei 2:5e54476c518f 24
yumaowei 2:5e54476c518f 25 #define PREDATOR_RADIUS 4
yumaowei 2:5e54476c518f 26 #define PREY_SIZE 2
yumaowei 2:5e54476c518f 27 #define PREY_SPEED 3
yumaowei 2:5e54476c518f 28
yumaowei 2:5e54476c518f 29 /////////////// structs /////////////////
yumaowei 2:5e54476c518f 30 struct Inputparam {
yumaowei 2:5e54476c518f 31 Direction predd;
yumaowei 2:5e54476c518f 32 float mag;
yumaowei 2:5e54476c518f 33 };
yumaowei 2:5e54476c518f 34 /////////////// objects ///////////////
yumaowei 2:5e54476c518f 35 LCD lcd;
yumaowei 2:5e54476c518f 36 Gamepad player;
yumaowei 2:5e54476c518f 37 HuntEngine hunt;
yumaowei 2:5e54476c518f 38 Timer timeout;
yumaowei 2:5e54476c518f 39 Predator predator;
yumaowei 2:5e54476c518f 40
yumaowei 2:5e54476c518f 41 ///////////// prototypes ///////////////
yumaowei 2:5e54476c518f 42 void init();
yumaowei 2:5e54476c518f 43 void update_game(Inputparam input);
yumaowei 2:5e54476c518f 44 void display();
yumaowei 2:5e54476c518f 45 void welcome();
yumaowei 2:5e54476c518f 46
yumaowei 2:5e54476c518f 47 ///////////// functions ////////////////
yumaowei 2:5e54476c518f 48 int main()
yumaowei 2:5e54476c518f 49 {
yumaowei 2:5e54476c518f 50 #ifdef WITH_TESTING
yumaowei 2:5e54476c518f 51 int number_of_failures = run_all_tests();
yumaowei 2:5e54476c518f 52
yumaowei 2:5e54476c518f 53 if(number_of_failures > 0) return number_of_failures;
yumaowei 2:5e54476c518f 54 #endif
yumaowei 2:5e54476c518f 55
yumaowei 2:5e54476c518f 56 int fps = 6; // frames per second
yumaowei 2:5e54476c518f 57
yumaowei 2:5e54476c518f 58 init(); // initialise and then display welcome screen...
yumaowei 2:5e54476c518f 59 welcome(); // waiting for the user to start
yumaowei 2:5e54476c518f 60
yumaowei 2:5e54476c518f 61 display(); // first draw the initial frame
yumaowei 2:5e54476c518f 62 wait(1.0f/fps); // and wait for one frame period
eencae 0:b7f1f47bb26a 63
eencae 0:b7f1f47bb26a 64
yumaowei 2:5e54476c518f 65 // game loop - read input, update the game state and render the display on LCD
yumaowei 2:5e54476c518f 66 while (1) {
yumaowei 2:5e54476c518f 67 hunt.read_input(player);
yumaowei 2:5e54476c518f 68 hunt.update(player);
yumaowei 2:5e54476c518f 69 display();
yumaowei 2:5e54476c518f 70 wait(1.0f/fps);
yumaowei 2:5e54476c518f 71 }
yumaowei 2:5e54476c518f 72 }
yumaowei 2:5e54476c518f 73 /*
yumaowei 2:5e54476c518f 74 * Function init:
yumaowei 2:5e54476c518f 75 * Description: initialies all classes and libraries
yumaowei 2:5e54476c518f 76 *
yumaowei 2:5e54476c518f 77 */
eencae 0:b7f1f47bb26a 78
yumaowei 2:5e54476c518f 79 void init()
eencae 0:b7f1f47bb26a 80 {
yumaowei 2:5e54476c518f 81 // The lcd and the gamepad needs to be intialized first
yumaowei 2:5e54476c518f 82 lcd.init();
yumaowei 2:5e54476c518f 83 player.init();
yumaowei 2:5e54476c518f 84
yumaowei 2:5e54476c518f 85 // Then,initialise the game with correct prey and predator parameters
yumaowei 2:5e54476c518f 86 hunt.init(PREDATOR_RADIUS,PREY_SIZE,PREY_SPEED);
yumaowei 2:5e54476c518f 87
eencae 0:b7f1f47bb26a 88 }
eencae 0:b7f1f47bb26a 89
yumaowei 2:5e54476c518f 90 /*
yumaowei 2:5e54476c518f 91 * Function display:
yumaowei 2:5e54476c518f 92 * Description: This function draws each frame and component on the LCD
yumaowei 2:5e54476c518f 93 * @Brief it also clears,re-draw and refreshes screen
yumaowei 2:5e54476c518f 94 */
yumaowei 2:5e54476c518f 95
yumaowei 2:5e54476c518f 96 void display()
yumaowei 2:5e54476c518f 97 {
yumaowei 2:5e54476c518f 98 timeout.start();
yumaowei 2:5e54476c518f 99 // clear screen, re-draw and refresh
yumaowei 2:5e54476c518f 100 lcd.clear();
yumaowei 2:5e54476c518f 101 hunt.draw(lcd);
yumaowei 2:5e54476c518f 102 lcd.refresh();
yumaowei 2:5e54476c518f 103 while ( player.start_pressed() == true) {
yumaowei 2:5e54476c518f 104 if (timeout.read() > 180000) {
yumaowei 2:5e54476c518f 105 timeout.reset();
yumaowei 2:5e54476c518f 106 if (predator.get_points() > 10) {
yumaowei 2:5e54476c518f 107 lcd.printString(" WIN Game Over! ",10,10);
yumaowei 2:5e54476c518f 108 lcd.printString(" SCORE ",10,8);
yumaowei 2:5e54476c518f 109 wait(2);
yumaowei 2:5e54476c518f 110 lcd.refresh();
yumaowei 2:5e54476c518f 111 }
yumaowei 2:5e54476c518f 112 else {
yumaowei 2:5e54476c518f 113 lcd.printString("FAILED! Game Over!",10,10);
yumaowei 2:5e54476c518f 114 lcd.printString(" SCORE ",10,8);
yumaowei 2:5e54476c518f 115 wait(2);
yumaowei 2:5e54476c518f 116 lcd.refresh();
yumaowei 2:5e54476c518f 117 }
yumaowei 2:5e54476c518f 118 player.start_pressed() == false;
yumaowei 2:5e54476c518f 119 }
yumaowei 2:5e54476c518f 120 }
yumaowei 2:5e54476c518f 121 }
yumaowei 2:5e54476c518f 122
yumaowei 2:5e54476c518f 123 // A default splash screen that is displayed upon start-up of the device
yumaowei 2:5e54476c518f 124 void welcome() {
yumaowei 2:5e54476c518f 125
yumaowei 2:5e54476c518f 126 lcd.printString(" Predator & Prey Game ",10,10);
yumaowei 2:5e54476c518f 127 lcd.printString(" Press Start ",10,4);
yumaowei 2:5e54476c518f 128 lcd.refresh();
yumaowei 2:5e54476c518f 129
yumaowei 2:5e54476c518f 130 // wait flashing LEDs until start button is pressed
yumaowei 2:5e54476c518f 131 while ( player.start_pressed() == false) {
yumaowei 2:5e54476c518f 132 lcd.setContrast( player.read_pot1());
yumaowei 2:5e54476c518f 133 player.leds_on();
yumaowei 2:5e54476c518f 134 wait(0.1);
yumaowei 2:5e54476c518f 135 player.leds_off();
yumaowei 2:5e54476c518f 136 wait(0.1);
yumaowei 2:5e54476c518f 137 }
yumaowei 2:5e54476c518f 138
yumaowei 2:5e54476c518f 139 }