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:
Tue May 19 18:32:18 2020 +0000
Revision:
54:d46459104dea
Parent:
53:01be7898c23f
Child:
55:c04568b25617
Added display_saved_games function and scroll_saved_games function to SavedGames class.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evanso 49:ed569eceeaa4 1 #include "SavedGames.h"
evanso 49:ed569eceeaa4 2
evanso 54:d46459104dea 3 const int arrow_up[3][5] = {
evanso 54:d46459104dea 4 { 0, 0, 1, 0, 0 },
evanso 54:d46459104dea 5 { 0, 1, 1, 1, 0 },
evanso 54:d46459104dea 6 { 1, 1, 1, 1, 1 },
evanso 54:d46459104dea 7 };
evanso 54:d46459104dea 8
evanso 54:d46459104dea 9 const int arrow_down[3][5] = {
evanso 54:d46459104dea 10 { 1, 1, 1, 1, 1 },
evanso 54:d46459104dea 11 { 0, 1, 1, 1, 0 },
evanso 54:d46459104dea 12 { 0, 0, 1, 0, 0 },
evanso 54:d46459104dea 13 };
evanso 54:d46459104dea 14
evanso 49:ed569eceeaa4 15 SavedGames::SavedGames() {
evanso 49:ed569eceeaa4 16
evanso 49:ed569eceeaa4 17 }
evanso 49:ed569eceeaa4 18
evanso 49:ed569eceeaa4 19 SavedGames::~SavedGames() {
evanso 49:ed569eceeaa4 20
evanso 49:ed569eceeaa4 21 }
evanso 49:ed569eceeaa4 22
evanso 50:13c8710985f4 23 void SavedGames::init(SDFileSystem &sd,N5110 &lcd){
evanso 50:13c8710985f4 24 error_ = false;
evanso 54:d46459104dea 25 check_sd_present(sd,lcd);
evanso 54:d46459104dea 26 read_saved_data(sd,lcd);
evanso 54:d46459104dea 27 display_data_number_ = 0;
evanso 50:13c8710985f4 28 }
evanso 49:ed569eceeaa4 29
evanso 50:13c8710985f4 30 void SavedGames::check_sd_present(SDFileSystem &sd,N5110 &lcd){
evanso 50:13c8710985f4 31 if(!sd.card_present()) {
evanso 50:13c8710985f4 32 error_ = true;
evanso 51:35cb8e604b72 33
evanso 51:35cb8e604b72 34 //print error screen
evanso 50:13c8710985f4 35 lcd.clear();
evanso 50:13c8710985f4 36 lcd.printString("SD card not ",9,3);
evanso 50:13c8710985f4 37 lcd.printString(" present ",9,4);
evanso 50:13c8710985f4 38 lcd.refresh();
evanso 50:13c8710985f4 39 wait(3);
evanso 50:13c8710985f4 40 }
evanso 50:13c8710985f4 41 }
evanso 50:13c8710985f4 42
evanso 53:01be7898c23f 43 void SavedGames::error_open_file(N5110 &lcd){
evanso 53:01be7898c23f 44 error_ = true;
evanso 51:35cb8e604b72 45
evanso 53:01be7898c23f 46 //print error screen
evanso 53:01be7898c23f 47 lcd.clear();
evanso 53:01be7898c23f 48 lcd.printString(" Unable to ",9,3);
evanso 53:01be7898c23f 49 lcd.printString(" open file ",9,4);
evanso 53:01be7898c23f 50 lcd.refresh();
evanso 53:01be7898c23f 51 wait(3);
evanso 51:35cb8e604b72 52 }
evanso 51:35cb8e604b72 53
evanso 53:01be7898c23f 54 void SavedGames::add_saved_data(SDFileSystem &sd, SavedGamesData data,
evanso 52:feb8cf28bcff 55 N5110 &lcd){
evanso 52:feb8cf28bcff 56 //opens file
evanso 53:01be7898c23f 57 FILE *fp = fopen("/sd/SavedGames.txt", "a");
evanso 52:feb8cf28bcff 58
evanso 53:01be7898c23f 59 if (fp == NULL) {
evanso 53:01be7898c23f 60 error_open_file(lcd);
evanso 53:01be7898c23f 61 return;
evanso 53:01be7898c23f 62 }else{
evanso 53:01be7898c23f 63 //Adda data to file if no error
evanso 52:feb8cf28bcff 64 fprintf(fp, "%d\n", data.score);
evanso 52:feb8cf28bcff 65 fprintf(fp, "%d\n", data.lives);
evanso 52:feb8cf28bcff 66 fprintf(fp, "%d\n", data.smart_bombs);
evanso 52:feb8cf28bcff 67 fprintf(fp, "%d\n", data.alien_number);
evanso 52:feb8cf28bcff 68 fclose(fp);
evanso 53:01be7898c23f 69 }
evanso 53:01be7898c23f 70 }
evanso 53:01be7898c23f 71
evanso 53:01be7898c23f 72 void SavedGames::read_saved_data(SDFileSystem &sd, N5110 &lcd){
evanso 53:01be7898c23f 73 //opens file
evanso 53:01be7898c23f 74 FILE *fp = fopen("/sd/SavedGames.txt", "r");
evanso 53:01be7898c23f 75
evanso 53:01be7898c23f 76 if (fp == NULL) {
evanso 53:01be7898c23f 77 error_open_file(lcd);
evanso 53:01be7898c23f 78 return;
evanso 53:01be7898c23f 79
evanso 53:01be7898c23f 80 //Reads saved data into vector
evanso 53:01be7898c23f 81 }else{
evanso 53:01be7898c23f 82 int line_number = 0;
evanso 53:01be7898c23f 83 int *data_array;
evanso 53:01be7898c23f 84
evanso 53:01be7898c23f 85 //count number of lines in files
evanso 53:01be7898c23f 86 while (fscanf(fp, "%*d") != EOF) {
evanso 53:01be7898c23f 87 line_number++;
evanso 53:01be7898c23f 88 }
evanso 51:35cb8e604b72 89
evanso 53:01be7898c23f 90 //creats data arrays
evanso 53:01be7898c23f 91 data_array = (int *)calloc(line_number, sizeof (int));
evanso 53:01be7898c23f 92
evanso 53:01be7898c23f 93 //Reads into arrays
evanso 53:01be7898c23f 94 int i = 0;
evanso 53:01be7898c23f 95 rewind(fp);
evanso 53:01be7898c23f 96 while (fscanf(fp, "%d",&data_array[i]) != EOF) {
evanso 53:01be7898c23f 97 i++;
evanso 53:01be7898c23f 98 }
evanso 53:01be7898c23f 99
evanso 53:01be7898c23f 100 // puts array data into structs and sotres structs in vector
evanso 53:01be7898c23f 101 for(int i = 0; i <= line_number; i+=4){
evanso 53:01be7898c23f 102 //creats objects
evanso 53:01be7898c23f 103 SavedGamesData data;
evanso 53:01be7898c23f 104
evanso 53:01be7898c23f 105 //sets data
evanso 53:01be7898c23f 106 data.score = data_array[i];
evanso 53:01be7898c23f 107 data.lives = data_array[i+1];
evanso 53:01be7898c23f 108 data.smart_bombs = data_array[i+2];
evanso 53:01be7898c23f 109 data.alien_number = data_array[i+3];
evanso 53:01be7898c23f 110
evanso 53:01be7898c23f 111 //store object in vector
evanso 53:01be7898c23f 112 saved_data_vector.push_back(data);
evanso 53:01be7898c23f 113 }
evanso 53:01be7898c23f 114
evanso 53:01be7898c23f 115 fclose(fp);
evanso 53:01be7898c23f 116 }
evanso 51:35cb8e604b72 117 }
evanso 51:35cb8e604b72 118
evanso 54:d46459104dea 119 void SavedGames::display_saved_games(N5110 &lcd){
evanso 54:d46459104dea 120 lcd.clear();
evanso 54:d46459104dea 121 //prints saved game screen
evanso 54:d46459104dea 122 lcd.printString("Saved Games",9,1);
evanso 54:d46459104dea 123 lcd.drawSprite(39, 16, 3, 5, (int *)arrow_up);
evanso 54:d46459104dea 124 lcd.drawSprite(39, 32, 3, 5, (int *)arrow_down);
evanso 54:d46459104dea 125
evanso 54:d46459104dea 126 //prints saved game that is displayed
evanso 54:d46459104dea 127 char buffer[9];
evanso 54:d46459104dea 128 sprintf(buffer,"Save = %2d",display_data_number_);
evanso 54:d46459104dea 129 lcd.printString(buffer,15,3);
evanso 54:d46459104dea 130
evanso 54:d46459104dea 131 lcd.refresh();
evanso 54:d46459104dea 132 }
evanso 50:13c8710985f4 133 bool SavedGames::get_error(){
evanso 50:13c8710985f4 134 return error_;
evanso 50:13c8710985f4 135 }
evanso 54:d46459104dea 136
evanso 54:d46459104dea 137 void SavedGames::saved_games_scroll(Gamepad &pad, Direction d_) {
evanso 54:d46459104dea 138 // Changes displayed manu part depending on joystick input
evanso 54:d46459104dea 139 if (d_ == N || d_ == NE || d_ == NW ) {
evanso 54:d46459104dea 140 display_data_number_++;
evanso 54:d46459104dea 141
evanso 54:d46459104dea 142 //loops back round when at end of saved game vecotr
evanso 54:d46459104dea 143 if(display_data_number_ == saved_data_vector.size()){
evanso 54:d46459104dea 144 display_data_number_ = 0;
evanso 54:d46459104dea 145 }
evanso 54:d46459104dea 146 } else if (d_ == S || d_ == SW || d_ == SE) {
evanso 54:d46459104dea 147 display_data_number_--;
evanso 54:d46459104dea 148 if(display_data_number_ < 0 ){
evanso 54:d46459104dea 149 display_data_number_ = saved_data_vector.size() - 1;
evanso 54:d46459104dea 150 }
evanso 54:d46459104dea 151 }
evanso 54:d46459104dea 152 wait(0.15);
evanso 54:d46459104dea 153 }
evanso 50:13c8710985f4 154