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:
Wed May 06 12:15:16 2020 +0000
Revision:
23:cc44e26c08fa
Parent:
22:053c11a202e1
Child:
25:70b55f5bfc87
Added unit test for weapons class which it passed!

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 13:12276eed13ac 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 12:1c0b6796aaca 21 #ifdef GAME_TEST
evanso 11:ab578a151f67 22 # include "test.h"
evanso 11:ab578a151f67 23 #endif
evanso 11:ab578a151f67 24
evanso 15:90b6821bcf64 25 // TO DO
evanso 17:25d79cca203a 26 // change comment so nulti line
evanso 17:25d79cca203a 27 // seperate details comments
evanso 22:053c11a202e1 28 // do params on seperate line and have seperate detials for each one
evanso 22:053c11a202e1 29 // make code multi line seperate at and statments
evanso 22:053c11a202e1 30 // deffine headers porperly by commenting out and compiling
eencae 0:b7f1f47bb26a 31
evanso 13:12276eed13ac 32 // Objects ---------------------------------------------------------------------
evanso 13:12276eed13ac 33
evanso 13:12276eed13ac 34 // Ticker object for ISR
evanso 13:12276eed13ac 35 Ticker ticker;
evanso 13:12276eed13ac 36
evanso 13:12276eed13ac 37 //Game Engine object
evanso 8:dd1037c5435b 38 GameEngine engine;
evanso 11:ab578a151f67 39
evanso 13:12276eed13ac 40 // Global variables ------------------------------------------------------------
evanso 3:dee187b8b30c 41
evanso 13:12276eed13ac 42 // Volatile flag for ISR
evanso 7:0af4ced868f5 43 volatile int g_lcd_frame_time_flag = 0;
evanso 3:dee187b8b30c 44
evanso 13:12276eed13ac 45 // Function prototypes ---------------------------------------------------------
evanso 4:0df2b85e47f1 46 void lcd_frame_time_isr();
eencae 0:b7f1f47bb26a 47
evanso 13:12276eed13ac 48 // functions -------------------------------------------------------------------
eencae 0:b7f1f47bb26a 49 int main()
evanso 3:dee187b8b30c 50 {
evanso 3:dee187b8b30c 51 // Sets fram rate of lcd by using time-triggered tasks
evanso 17:25d79cca203a 52 ticker.attach(&lcd_frame_time_isr,0.04);
evanso 13:12276eed13ac 53 engine.init();
eencae 0:b7f1f47bb26a 54
evanso 11:ab578a151f67 55 // Compile with tests
evanso 12:1c0b6796aaca 56 #ifdef GAME_TEST
evanso 13:12276eed13ac 57 run_spaceship_movement_tests();
evanso 13:12276eed13ac 58 run_spaceship_draw_tests();
evanso 14:7419c680656f 59 run_map_draw_tests();
evanso 22:053c11a202e1 60 run_alien_movement_tests();
evanso 22:053c11a202e1 61 run_alien_collision_test();
evanso 23:cc44e26c08fa 62 run_weapons_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 8:dd1037c5435b 69 g_lcd_frame_time_flag = 0; // resets flag
evanso 7:0af4ced868f5 70
evanso 13:12276eed13ac 71 engine.gameplay_loop();
evanso 3:dee187b8b30c 72 }
evanso 8:dd1037c5435b 73
evanso 3:dee187b8b30c 74 // MCU put to sleep between each frame to save power
evanso 3:dee187b8b30c 75 sleep();
evanso 3:dee187b8b30c 76 }
eencae 0:b7f1f47bb26a 77 }
eencae 0:b7f1f47bb26a 78
evanso 3:dee187b8b30c 79 // Time-triggered interrupt to wake MCU from sleep
evanso 18:11068b98e261 80 void lcd_frame_time_isr(){
evanso 3:dee187b8b30c 81 g_lcd_frame_time_flag = 1; // set flag in ISR
evanso 3:dee187b8b30c 82 }