
yumaowei 201377547
Dependencies: mbed ELEC2645_Project_el17my
main.cpp@2:5e54476c518f, 2020-05-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |