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:
Sat May 16 16:16:43 2020 +0000
Revision:
37:a05eac7fcb4c
Parent:
33:7fedd8029473
Child:
38:75bd968daa31
Added unit test for people wich it passed!! Also changed alien unit test as added more code to the alien class.;

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
evanso 1:1f2ae263248e 5 Name:Benjamin Evans
evanso 1:1f2ae263248e 6 Username:el18bpe
evanso 1:1f2ae263248e 7 Student ID Number:201216635
evanso 1:1f2ae263248e 8 Date:23/02/2020
eencae 0:b7f1f47bb26a 9 */
eencae 0:b7f1f47bb26a 10
evanso 13:12276eed13ac 11 // pre-processor directives ----------------------------------------------------
eencae 0:b7f1f47bb26a 12 #include "mbed.h"
eencae 0:b7f1f47bb26a 13 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 14 #include "N5110.h"
evanso 11:ab578a151f67 15 #include "GameEngine.h"
evanso 3:dee187b8b30c 16 #include "Spaceship.h"
evanso 6:12e8433382b3 17 #include "Map.h"
evanso 11:ab578a151f67 18
evanso 12:1c0b6796aaca 19 #ifdef GAME_TEST
evanso 11:ab578a151f67 20 # include "test.h"
evanso 11:ab578a151f67 21 #endif
evanso 11:ab578a151f67 22
evanso 15:90b6821bcf64 23 // TO DO
evanso 25:70b55f5bfc87 24 // deffine headers porperly by commenting out and compiling
evanso 27:8bb2bd97c319 25 // fix alien test by doing random movement test
evanso 33:7fedd8029473 26 // move game engine functions and definietion in order
eencae 0:b7f1f47bb26a 27
evanso 13:12276eed13ac 28 // Objects ---------------------------------------------------------------------
evanso 13:12276eed13ac 29
evanso 27:8bb2bd97c319 30 /** Define Ticker object for ISR*/
evanso 13:12276eed13ac 31 Ticker ticker;
evanso 13:12276eed13ac 32
evanso 27:8bb2bd97c319 33 /** Define Game Engine object*/
evanso 8:dd1037c5435b 34 GameEngine engine;
evanso 11:ab578a151f67 35
evanso 13:12276eed13ac 36 // Global variables ------------------------------------------------------------
evanso 3:dee187b8b30c 37
evanso 27:8bb2bd97c319 38 /** Volatile flag for ISR */
evanso 7:0af4ced868f5 39 volatile int g_lcd_frame_time_flag = 0;
evanso 3:dee187b8b30c 40
evanso 13:12276eed13ac 41 // Function prototypes ---------------------------------------------------------
evanso 27:8bb2bd97c319 42
evanso 27:8bb2bd97c319 43 /** Time-triggered interrupt to wake MCU from sleep */
evanso 4:0df2b85e47f1 44 void lcd_frame_time_isr();
eencae 0:b7f1f47bb26a 45
evanso 13:12276eed13ac 46 // functions -------------------------------------------------------------------
eencae 0:b7f1f47bb26a 47 int main()
evanso 3:dee187b8b30c 48 {
evanso 3:dee187b8b30c 49 // Sets fram rate of lcd by using time-triggered tasks
evanso 17:25d79cca203a 50 ticker.attach(&lcd_frame_time_isr,0.04);
evanso 13:12276eed13ac 51 engine.init();
eencae 0:b7f1f47bb26a 52
evanso 11:ab578a151f67 53 // Compile with tests
evanso 12:1c0b6796aaca 54 #ifdef GAME_TEST
evanso 13:12276eed13ac 55 run_spaceship_movement_tests();
evanso 13:12276eed13ac 56 run_spaceship_draw_tests();
evanso 14:7419c680656f 57 run_map_draw_tests();
evanso 37:a05eac7fcb4c 58 run_alien_draw_tests();
evanso 22:053c11a202e1 59 run_alien_collision_test();
evanso 23:cc44e26c08fa 60 run_weapons_draw_tests();
evanso 26:1a7056eb3253 61 run_explosion_draw_tests();
evanso 37:a05eac7fcb4c 62 run_people_draw_tests();
evanso 11:ab578a151f67 63 #endif
evanso 11:ab578a151f67 64
evanso 3:dee187b8b30c 65 while (1) {
evanso 8:dd1037c5435b 66
evanso 3:dee187b8b30c 67 // Checks flag and prints spaceship on lcd then resets flag
evanso 3:dee187b8b30c 68 if (g_lcd_frame_time_flag) {
evanso 27:8bb2bd97c319 69 // resets ISR flag
evanso 27:8bb2bd97c319 70 g_lcd_frame_time_flag = 0;
evanso 7:0af4ced868f5 71
evanso 13:12276eed13ac 72 engine.gameplay_loop();
evanso 3:dee187b8b30c 73 }
evanso 8:dd1037c5435b 74
evanso 3:dee187b8b30c 75 // MCU put to sleep between each frame to save power
evanso 3:dee187b8b30c 76 sleep();
evanso 3:dee187b8b30c 77 }
eencae 0:b7f1f47bb26a 78 }
eencae 0:b7f1f47bb26a 79
evanso 18:11068b98e261 80 void lcd_frame_time_isr(){
evanso 27:8bb2bd97c319 81 // set ISR flag
evanso 27:8bb2bd97c319 82 g_lcd_frame_time_flag = 1;
evanso 3:dee187b8b30c 83 }