Ben Evans University Second Year Project. Game Called Defender.

Dependencies:   mbed

https://os.mbed.com/media/uploads/evanso/84bc1a30759fd6a1e3f1fd1fae3e97c2.png

Hello, soldier, you have been specially selected as the defender of planet earth.

Your mission, if you choose to accept it. Fly around the planet and pulverise invading alien ships for as long as you can. Stop the aliens abducting the innocent people on the ground. Be warned if an alien ship manages to abduct a person and take them to top of the screen, they will no longer move randomly and will begin to hunt you down. This sounds like a challenge you were trained for.

But don’t worry soldier you’re not going into battle empty-handed. Your ship is equipped with a state of the art laser beam that has unlimited ammo and four smart bombs that will destroy anything on the screen. The ship also has three lives so use them wisely.

As time goes on more alien ships will arrive on planet earth increasing the difficulty of your mission. And remember the landscape bellow loops around so if you continually fly in the same direction you go to your original position. Good luck soldier.

Committer:
evanso
Date:
Thu Apr 23 18:17:28 2020 +0000
Revision:
11:ab578a151f67
Parent:
10:aca793aa7abc
Child:
12:1c0b6796aaca
Added test files and ran a spaceship unit test, which it passed! Also cleaned up code and comments.

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
evanso 1:1f2ae263248e 7 Name:Benjamin Evans
evanso 1:1f2ae263248e 8 Username:el18bpe
evanso 1:1f2ae263248e 9 Student ID Number:201216635
evanso 1:1f2ae263248e 10 Date:23/02/2020
eencae 0:b7f1f47bb26a 11 */
eencae 0:b7f1f47bb26a 12
evanso 11:ab578a151f67 13 /////////////// pre-processor directives ///////////////
eencae 0:b7f1f47bb26a 14 #include "mbed.h"
eencae 0:b7f1f47bb26a 15 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 16 #include "N5110.h"
evanso 11:ab578a151f67 17 #include "GameEngine.h"
evanso 3:dee187b8b30c 18 #include "Spaceship.h"
evanso 6:12e8433382b3 19 #include "Map.h"
evanso 11:ab578a151f67 20
evanso 11:ab578a151f67 21 #ifdef SPACESHIP_TEST
evanso 11:ab578a151f67 22 # include "test.h"
evanso 11:ab578a151f67 23 #endif
evanso 11:ab578a151f67 24
eencae 0:b7f1f47bb26a 25
evanso 9:1ddb8dc93e48 26 // to do
evanso 11:ab578a151f67 27 // sort of objects out
evanso 9:1ddb8dc93e48 28 // add debug functions for variables
evanso 10:aca793aa7abc 29 // add test files
evanso 9:1ddb8dc93e48 30
eencae 0:b7f1f47bb26a 31
evanso 11:ab578a151f67 32 /////////////// Objects ///////////////
eencae 0:b7f1f47bb26a 33 Gamepad pad;
eencae 0:b7f1f47bb26a 34 N5110 lcd;
evanso 3:dee187b8b30c 35 Ticker ticker;
evanso 8:dd1037c5435b 36 GameEngine engine;
evanso 4:0df2b85e47f1 37 AnalogIn pot_1(PTB2);
evanso 8:dd1037c5435b 38 Spaceship spaceship;
evanso 6:12e8433382b3 39 Map map;
evanso 11:ab578a151f67 40 Serial usb(USBTX, USBRX);
evanso 8:dd1037c5435b 41 AnalogIn adc(PTD5);
evanso 11:ab578a151f67 42
evanso 3:dee187b8b30c 43
evanso 11:ab578a151f67 44 ///////////// Global variables /////////////
evanso 7:0af4ced868f5 45 volatile int g_lcd_frame_time_flag = 0;
evanso 3:dee187b8b30c 46
evanso 11:ab578a151f67 47 ///////////// prototypes ///////////////
evanso 4:0df2b85e47f1 48 void lcd_frame_time_isr();
eencae 0:b7f1f47bb26a 49
evanso 11:ab578a151f67 50 ///////////// functions ////////////////
eencae 0:b7f1f47bb26a 51 int main()
evanso 3:dee187b8b30c 52 {
evanso 3:dee187b8b30c 53 // Sets fram rate of lcd by using time-triggered tasks
evanso 7:0af4ced868f5 54 ticker.attach(&lcd_frame_time_isr,0.03);
evanso 8:dd1037c5435b 55 engine.init(lcd, spaceship, map, pad, adc);
eencae 0:b7f1f47bb26a 56
evanso 11:ab578a151f67 57 // Compile with tests
evanso 11:ab578a151f67 58 #ifdef SPACESHIP_TEST
evanso 11:ab578a151f67 59 run_spaceship_tests();
evanso 11:ab578a151f67 60 #endif
evanso 11:ab578a151f67 61
evanso 3:dee187b8b30c 62 while (1) {
evanso 8:dd1037c5435b 63
evanso 3:dee187b8b30c 64 // Checks flag and prints spaceship on lcd then resets flag
evanso 3:dee187b8b30c 65 if (g_lcd_frame_time_flag) {
evanso 8:dd1037c5435b 66 g_lcd_frame_time_flag = 0; // resets flag
evanso 7:0af4ced868f5 67
evanso 8:dd1037c5435b 68 engine.gameplay_loop(lcd, spaceship, map, pad, pot_1);
evanso 3:dee187b8b30c 69 }
evanso 8:dd1037c5435b 70
evanso 3:dee187b8b30c 71 // MCU put to sleep between each frame to save power
evanso 3:dee187b8b30c 72 sleep();
evanso 3:dee187b8b30c 73 }
eencae 0:b7f1f47bb26a 74 }
eencae 0:b7f1f47bb26a 75
evanso 3:dee187b8b30c 76 // Time-triggered interrupt to wake MCU from sleep
evanso 4:0df2b85e47f1 77 void lcd_frame_time_isr()
evanso 3:dee187b8b30c 78 {
evanso 3:dee187b8b30c 79 g_lcd_frame_time_flag = 1; // set flag in ISR
evanso 3:dee187b8b30c 80 }