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 27 02:06:05 2020 +0000
Revision:
87:832ca78426b5
Parent:
85:87bc28b151d8
Final Submission. I have read and agreed with Statement of Academic Integrity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evanso 43:d43759dbddb9 1 #include "Settings.h"
evanso 44:2d957de3bce3 2
evanso 74:6827b43c689d 3 const char settings_part_names[4][9] = {
evanso 69:753ba27325ce 4 {"Contrast"},
evanso 69:753ba27325ce 5 {"Controls"},
evanso 69:753ba27325ce 6 {"Sound FX"},
evanso 74:6827b43c689d 7 {" Music "},
evanso 69:753ba27325ce 8 };
evanso 69:753ba27325ce 9
evanso 69:753ba27325ce 10 const char controls_part_names[2][4] = {
evanso 69:753ba27325ce 11 {"Joy"},
evanso 69:753ba27325ce 12 {"Acc"},
evanso 69:753ba27325ce 13 };
evanso 69:753ba27325ce 14
evanso 69:753ba27325ce 15 const char sound_part_names[2][4] = {
evanso 69:753ba27325ce 16 {"On"},
evanso 69:753ba27325ce 17 {"Off"},
evanso 69:753ba27325ce 18 };
evanso 69:753ba27325ce 19
evanso 74:6827b43c689d 20 const char music_part_names[2][4] = {
evanso 74:6827b43c689d 21 {"On"},
evanso 74:6827b43c689d 22 {"Off"},
evanso 74:6827b43c689d 23 };
evanso 74:6827b43c689d 24
evanso 69:753ba27325ce 25 // Defining scroll_order_settings states for scroll_order_settings FSM
evanso 74:6827b43c689d 26 scroll_order_setting settings_fsm[4] = {
evanso 74:6827b43c689d 27 {music, contrast, controls},
evanso 74:6827b43c689d 28 {contrast, controls, sound_fx},
evanso 74:6827b43c689d 29 {controls, sound_fx, music},
evanso 74:6827b43c689d 30 {sound_fx, music, contrast},
evanso 69:753ba27325ce 31 };
evanso 69:753ba27325ce 32
evanso 74:6827b43c689d 33 // Defining on_off_order states for _on_off FSM
evanso 69:753ba27325ce 34 on_off_order settings_on_off_fsm[2] = {
evanso 69:753ba27325ce 35 {off, on},
evanso 69:753ba27325ce 36 {on, off},
evanso 74:6827b43c689d 37 };
evanso 74:6827b43c689d 38
evanso 74:6827b43c689d 39 // Defining on_off_order states for music_on_off FSM
evanso 74:6827b43c689d 40 music_on_off_order music_on_off_fsm[2] = {
evanso 74:6827b43c689d 41 {music_off, music_on},
evanso 74:6827b43c689d 42 {music_on, music_off},
evanso 74:6827b43c689d 43 };
evanso 69:753ba27325ce 44
evanso 69:753ba27325ce 45 // Defining control_order states for settings_joy_acc FSM
evanso 69:753ba27325ce 46 control_order settings_joy_acc_fsm[2] = {
evanso 69:753ba27325ce 47 {acc, joy},
evanso 69:753ba27325ce 48 {joy, acc},
evanso 69:753ba27325ce 49 };
evanso 69:753ba27325ce 50
evanso 44:2d957de3bce3 51 Settings::Settings() {
evanso 44:2d957de3bce3 52
evanso 44:2d957de3bce3 53 }
evanso 44:2d957de3bce3 54
evanso 44:2d957de3bce3 55 Settings::~Settings() {
evanso 44:2d957de3bce3 56
evanso 44:2d957de3bce3 57 }
evanso 44:2d957de3bce3 58
evanso 82:3211b31e9421 59 void Settings::init() {
evanso 69:753ba27325ce 60 control_method_ = joy;
evanso 69:753ba27325ce 61 sound_method_ = on;
evanso 70:8c4572d17441 62 displayed_settings_part_ = controls;
evanso 74:6827b43c689d 63 music_method_ = music_on;
evanso 69:753ba27325ce 64 }
evanso 69:753ba27325ce 65
evanso 82:3211b31e9421 66 ControlsParts Settings::get_control_method() {
evanso 69:753ba27325ce 67 return control_method_;
evanso 69:753ba27325ce 68 }
evanso 69:753ba27325ce 69
evanso 70:8c4572d17441 70
evanso 82:3211b31e9421 71 SoundParts Settings::get_sound_method() {
evanso 73:d1aea9b8da92 72 return sound_method_;
evanso 73:d1aea9b8da92 73 }
evanso 73:d1aea9b8da92 74
evanso 82:3211b31e9421 75 MusicParts Settings::get_music_method() {
evanso 74:6827b43c689d 76 return music_method_;
evanso 74:6827b43c689d 77 }
evanso 74:6827b43c689d 78
evanso 82:3211b31e9421 79 SettingsParts Settings::get_displayed_settings_part() {
evanso 70:8c4572d17441 80 return displayed_settings_part_;
evanso 70:8c4572d17441 81 }
evanso 70:8c4572d17441 82
evanso 82:3211b31e9421 83 void Settings::display_settings_screen(N5110 &lcd, float pot_read) {
evanso 85:87bc28b151d8 84 // Prints different settings parts
evanso 82:3211b31e9421 85 if(displayed_settings_part_ == controls) {
evanso 69:753ba27325ce 86 lcd.printString(settings_part_names[displayed_settings_part_],6 ,3);
evanso 69:753ba27325ce 87 lcd.printString(controls_part_names[control_method_],60 ,3);
evanso 82:3211b31e9421 88 }else if(displayed_settings_part_ == sound_fx) {
evanso 69:753ba27325ce 89 lcd.printString(settings_part_names[displayed_settings_part_],6 ,3);
evanso 69:753ba27325ce 90 lcd.printString(sound_part_names[sound_method_],60 ,3);
evanso 82:3211b31e9421 91 }else if(displayed_settings_part_ == music) {
evanso 74:6827b43c689d 92 lcd.printString(settings_part_names[displayed_settings_part_],6 ,3);
evanso 74:6827b43c689d 93 lcd.printString(music_part_names[music_method_],60 ,3);
evanso 82:3211b31e9421 94 }else if(displayed_settings_part_ == contrast) {
evanso 69:753ba27325ce 95 lcd.printString(settings_part_names[displayed_settings_part_],6 ,3);
evanso 69:753ba27325ce 96 char buffer[2];
evanso 69:753ba27325ce 97 sprintf(buffer,"%.2f",pot_read);
evanso 69:753ba27325ce 98 lcd.printString(buffer,58,3);
evanso 69:753ba27325ce 99 }
evanso 69:753ba27325ce 100
evanso 82:3211b31e9421 101 // prints setting title and button instructions and arrows
evanso 69:753ba27325ce 102 lcd.printString("Settings",18,0);
evanso 69:753ba27325ce 103 lcd.drawSprite(39, 18, 3, 5, (int *)arrow_up);
evanso 69:753ba27325ce 104 lcd.drawSprite(39, 34, 3, 5, (int *)arrow_down);
evanso 69:753ba27325ce 105 lcd.printString("Back(B)Alt(A)",3,5);
evanso 69:753ba27325ce 106 }
evanso 69:753ba27325ce 107
evanso 69:753ba27325ce 108 void Settings::change_setting(bool pressed) {
evanso 69:753ba27325ce 109 // When a is pressed changes the settings for the displayed setting part
evanso 69:753ba27325ce 110 if (pressed) {
evanso 82:3211b31e9421 111 if (displayed_settings_part_ == sound_fx) {
evanso 69:753ba27325ce 112 sound_method_ = settings_on_off_fsm[sound_method_].part_next;
evanso 82:3211b31e9421 113 }else if(displayed_settings_part_ == controls) {
evanso 69:753ba27325ce 114 control_method_ = settings_joy_acc_fsm[control_method_].part_next;
evanso 82:3211b31e9421 115 }else if(displayed_settings_part_ == music) {
evanso 74:6827b43c689d 116 music_method_ = music_on_off_fsm[music_method_].part_next;
evanso 74:6827b43c689d 117 }
evanso 71:bcbac2cfe005 118 wait(0.3);
evanso 69:753ba27325ce 119 }
evanso 69:753ba27325ce 120
evanso 69:753ba27325ce 121 }
evanso 69:753ba27325ce 122
evanso 69:753ba27325ce 123 void Settings::settings_scroll(Direction d_) {
evanso 69:753ba27325ce 124 // Changes displayed settings part depending on joystick input
evanso 70:8c4572d17441 125 if (d_ == N || d_ == NE || d_ == NW ) {
evanso 82:3211b31e9421 126 // printf(" displayed_settings_part_ %d\n",displayed_settings_part_);
evanso 69:753ba27325ce 127 displayed_settings_part_ =
evanso 69:753ba27325ce 128 settings_fsm[displayed_settings_part_].part_next;
evanso 69:753ba27325ce 129 } else if (d_ == S || d_ == SW || d_ == SE) {
evanso 69:753ba27325ce 130 displayed_settings_part_=
evanso 74:6827b43c689d 131 settings_fsm[displayed_settings_part_].part_previous;
evanso 69:753ba27325ce 132 }
evanso 69:753ba27325ce 133 wait(0.15);
evanso 85:87bc28b151d8 134 }