Ben Evans University Second Year Project. Game Called Defender.
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.
SavedGames/SavedGames.cpp@63:4631447440cf, 2020-05-21 (annotated)
- Committer:
- evanso
- Date:
- Thu May 21 00:09:10 2020 +0000
- Revision:
- 63:4631447440cf
- Parent:
- 62:f0c86a854a9e
- Child:
- 64:e9dfc35a1738
Correct error screen show if save isn't present or sd card not inserted
Who changed what in which revision?
User | Revision | Line number | New 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 | 62:f0c86a854a9e | 26 | display_data_number_ = 1; |
evanso | 63:4631447440cf | 27 | |
evanso | 50:13c8710985f4 | 28 | } |
evanso | 49:ed569eceeaa4 | 29 | |
evanso | 63:4631447440cf | 30 | void SavedGames::check_sd_present(SDFileSystem &sd, N5110 &lcd){ |
evanso | 63:4631447440cf | 31 | if(sd.card_present()) { |
evanso | 51:35cb8e604b72 | 32 | //print error screen |
evanso | 50:13c8710985f4 | 33 | lcd.clear(); |
evanso | 50:13c8710985f4 | 34 | lcd.printString("SD card not ",9,3); |
evanso | 50:13c8710985f4 | 35 | lcd.printString(" present ",9,4); |
evanso | 50:13c8710985f4 | 36 | lcd.refresh(); |
evanso | 50:13c8710985f4 | 37 | wait(3); |
evanso | 50:13c8710985f4 | 38 | } |
evanso | 50:13c8710985f4 | 39 | } |
evanso | 50:13c8710985f4 | 40 | |
evanso | 53:01be7898c23f | 41 | void SavedGames::error_open_file(N5110 &lcd){ |
evanso | 53:01be7898c23f | 42 | error_ = true; |
evanso | 63:4631447440cf | 43 | |
evanso | 53:01be7898c23f | 44 | //print error screen |
evanso | 53:01be7898c23f | 45 | lcd.clear(); |
evanso | 53:01be7898c23f | 46 | lcd.printString(" Unable to ",9,3); |
evanso | 53:01be7898c23f | 47 | lcd.printString(" open file ",9,4); |
evanso | 53:01be7898c23f | 48 | lcd.refresh(); |
evanso | 53:01be7898c23f | 49 | wait(3); |
evanso | 51:35cb8e604b72 | 50 | } |
evanso | 51:35cb8e604b72 | 51 | |
evanso | 61:7c4ec680a428 | 52 | void SavedGames::no_saved_files(N5110 &lcd){ |
evanso | 61:7c4ec680a428 | 53 | error_ = true; |
evanso | 63:4631447440cf | 54 | |
evanso | 61:7c4ec680a428 | 55 | //print error screen |
evanso | 61:7c4ec680a428 | 56 | lcd.clear(); |
evanso | 61:7c4ec680a428 | 57 | lcd.printString("No saved Files",0,3); |
evanso | 61:7c4ec680a428 | 58 | lcd.refresh(); |
evanso | 61:7c4ec680a428 | 59 | wait(3); |
evanso | 61:7c4ec680a428 | 60 | } |
evanso | 61:7c4ec680a428 | 61 | |
evanso | 59:0b2e43312d6b | 62 | void SavedGames::add_saved_data(SDFileSystem &sd,SavedGamesData data, |
evanso | 59:0b2e43312d6b | 63 | N5110 &lcd){ |
evanso | 61:7c4ec680a428 | 64 | FILE *fp; |
evanso | 61:7c4ec680a428 | 65 | |
evanso | 61:7c4ec680a428 | 66 | //opens correct save file |
evanso | 61:7c4ec680a428 | 67 | if (display_data_number_ == 1){ |
evanso | 61:7c4ec680a428 | 68 | fp = fopen("/sd/SavedGamesOne.csv", "w"); |
evanso | 63:4631447440cf | 69 | // printf ("save1 \n"); |
evanso | 61:7c4ec680a428 | 70 | }else if (display_data_number_ == 2){ |
evanso | 61:7c4ec680a428 | 71 | fp = fopen("/sd/SavedGamesTwo.csv", "w"); |
evanso | 63:4631447440cf | 72 | // printf ("save2\n" ); |
evanso | 61:7c4ec680a428 | 73 | }else{ |
evanso | 61:7c4ec680a428 | 74 | fp = fopen("/sd/SavedGamesThree.csv", "w"); |
evanso | 63:4631447440cf | 75 | // printf ("save2 \n"); |
evanso | 61:7c4ec680a428 | 76 | } |
evanso | 63:4631447440cf | 77 | |
evanso | 53:01be7898c23f | 78 | if (fp == NULL) { |
evanso | 53:01be7898c23f | 79 | error_open_file(lcd); |
evanso | 63:4631447440cf | 80 | |
evanso | 53:01be7898c23f | 81 | }else{ |
evanso | 63:4631447440cf | 82 | //printf ("add data.score = %d \n", data.score); |
evanso | 63:4631447440cf | 83 | //printf ("add data.lives = %d \n", data.lives); |
evanso | 63:4631447440cf | 84 | //printf ("adddata.smart_bombs = %d \n", data.smart_bombs); |
evanso | 63:4631447440cf | 85 | //printf ("add data.alien_number = %d \n", data.lives); |
evanso | 53:01be7898c23f | 86 | //Adda data to file if no error |
evanso | 59:0b2e43312d6b | 87 | fprintf(fp, "%d,%d,%d,%d\n", data.score, data.lives, data.smart_bombs, |
evanso | 59:0b2e43312d6b | 88 | data.alien_number); |
evanso | 52:feb8cf28bcff | 89 | fclose(fp); |
evanso | 53:01be7898c23f | 90 | } |
evanso | 53:01be7898c23f | 91 | } |
evanso | 53:01be7898c23f | 92 | |
evanso | 61:7c4ec680a428 | 93 | SavedGamesData SavedGames::read_saved_data(SDFileSystem &sd, N5110 &lcd){ |
evanso | 61:7c4ec680a428 | 94 | FILE *fp; |
evanso | 62:f0c86a854a9e | 95 | SavedGamesData data; |
evanso | 61:7c4ec680a428 | 96 | |
evanso | 61:7c4ec680a428 | 97 | //opens diplayed file |
evanso | 61:7c4ec680a428 | 98 | if (display_data_number_ == 1){ |
evanso | 62:f0c86a854a9e | 99 | fp = fopen("/sd/SavedGamesOne.csv", "r"); |
evanso | 63:4631447440cf | 100 | //printf ("open save1\n"); |
evanso | 61:7c4ec680a428 | 101 | }else if (display_data_number_ == 2){ |
evanso | 63:4631447440cf | 102 | //fp = fopen("/sd/SavedGamesTwo.csv", "r"); |
evanso | 62:f0c86a854a9e | 103 | printf ("open save2\n"); |
evanso | 61:7c4ec680a428 | 104 | }else{ |
evanso | 62:f0c86a854a9e | 105 | fp = fopen("/sd/SavedGamesThree.csv", "r"); |
evanso | 63:4631447440cf | 106 | // printf ("open save2\n"); |
evanso | 61:7c4ec680a428 | 107 | } |
evanso | 61:7c4ec680a428 | 108 | |
evanso | 53:01be7898c23f | 109 | if (fp == NULL) { |
evanso | 63:4631447440cf | 110 | no_saved_files(lcd); |
evanso | 63:4631447440cf | 111 | //Reads saved data into object |
evanso | 53:01be7898c23f | 112 | }else{ |
evanso | 59:0b2e43312d6b | 113 | int lives; |
evanso | 59:0b2e43312d6b | 114 | int score; |
evanso | 59:0b2e43312d6b | 115 | int alien_number; |
evanso | 59:0b2e43312d6b | 116 | int smart_bombs; |
evanso | 53:01be7898c23f | 117 | |
evanso | 61:7c4ec680a428 | 118 | //read save file |
evanso | 61:7c4ec680a428 | 119 | fscanf(fp, "%d,%d,%d,%d",&score, &lives,&smart_bombs,&alien_number); |
evanso | 59:0b2e43312d6b | 120 | |
evanso | 61:7c4ec680a428 | 121 | //sets data to object |
evanso | 61:7c4ec680a428 | 122 | data.score = score; |
evanso | 63:4631447440cf | 123 | // printf ("data.score = %d \n", data.score); |
evanso | 61:7c4ec680a428 | 124 | data.lives = lives; |
evanso | 63:4631447440cf | 125 | // printf ("data.lives = %d \n", data.lives); |
evanso | 61:7c4ec680a428 | 126 | data.smart_bombs = smart_bombs; |
evanso | 63:4631447440cf | 127 | //printf ("data.smart_bombs = %d \n", data.smart_bombs); |
evanso | 61:7c4ec680a428 | 128 | data.alien_number = alien_number; |
evanso | 63:4631447440cf | 129 | //printf ("data.alien_number = %d \n", data.lives); |
evanso | 63:4631447440cf | 130 | |
evanso | 63:4631447440cf | 131 | //printf ("saved_data_vector_ 1%d \n", saved_data_vector.size()); |
evanso | 63:4631447440cf | 132 | fclose(fp); |
evanso | 61:7c4ec680a428 | 133 | } |
evanso | 63:4631447440cf | 134 | |
evanso | 61:7c4ec680a428 | 135 | return data; |
evanso | 51:35cb8e604b72 | 136 | } |
evanso | 51:35cb8e604b72 | 137 | |
evanso | 54:d46459104dea | 138 | void SavedGames::display_saved_games(N5110 &lcd){ |
evanso | 54:d46459104dea | 139 | lcd.clear(); |
evanso | 54:d46459104dea | 140 | //prints saved game screen |
evanso | 59:0b2e43312d6b | 141 | lcd.printString("Saved Games",9,0); |
evanso | 59:0b2e43312d6b | 142 | lcd.drawSprite(39, 18, 3, 5, (int *)arrow_up); |
evanso | 59:0b2e43312d6b | 143 | lcd.drawSprite(39, 34, 3, 5, (int *)arrow_down); |
evanso | 54:d46459104dea | 144 | |
evanso | 54:d46459104dea | 145 | //prints saved game that is displayed |
evanso | 54:d46459104dea | 146 | char buffer[9]; |
evanso | 59:0b2e43312d6b | 147 | sprintf(buffer,"Save %2d",display_data_number_); |
evanso | 59:0b2e43312d6b | 148 | lcd.printString(buffer,21,3); |
evanso | 62:f0c86a854a9e | 149 | lcd.printString("B Back A Play",0,5); |
evanso | 54:d46459104dea | 150 | |
evanso | 54:d46459104dea | 151 | lcd.refresh(); |
evanso | 54:d46459104dea | 152 | } |
evanso | 59:0b2e43312d6b | 153 | |
evanso | 60:55fdc6bb29b9 | 154 | void SavedGames::save_game_screen(N5110 &lcd){ |
evanso | 60:55fdc6bb29b9 | 155 | lcd.clear(); |
evanso | 60:55fdc6bb29b9 | 156 | //prints saved game screen |
evanso | 61:7c4ec680a428 | 157 | lcd.printString("Select a save",3,0); |
evanso | 60:55fdc6bb29b9 | 158 | lcd.drawSprite(39, 18, 3, 5, (int *)arrow_up); |
evanso | 60:55fdc6bb29b9 | 159 | lcd.drawSprite(39, 34, 3, 5, (int *)arrow_down); |
evanso | 60:55fdc6bb29b9 | 160 | |
evanso | 60:55fdc6bb29b9 | 161 | //prints saved game that is displayed |
evanso | 60:55fdc6bb29b9 | 162 | char buffer[9]; |
evanso | 60:55fdc6bb29b9 | 163 | sprintf(buffer,"Save %2d",display_data_number_); |
evanso | 60:55fdc6bb29b9 | 164 | lcd.printString(buffer,21,3); |
evanso | 61:7c4ec680a428 | 165 | lcd.printString("A To save",15,5); |
evanso | 61:7c4ec680a428 | 166 | |
evanso | 60:55fdc6bb29b9 | 167 | lcd.refresh(); |
evanso | 60:55fdc6bb29b9 | 168 | } |
evanso | 60:55fdc6bb29b9 | 169 | |
evanso | 50:13c8710985f4 | 170 | bool SavedGames::get_error(){ |
evanso | 50:13c8710985f4 | 171 | return error_; |
evanso | 50:13c8710985f4 | 172 | } |
evanso | 54:d46459104dea | 173 | |
evanso | 63:4631447440cf | 174 | |
evanso | 63:4631447440cf | 175 | bool SavedGames::set_error(bool error){ |
evanso | 63:4631447440cf | 176 | error_ = error; |
evanso | 63:4631447440cf | 177 | } |
evanso | 63:4631447440cf | 178 | |
evanso | 63:4631447440cf | 179 | |
evanso | 59:0b2e43312d6b | 180 | int SavedGames::get_display_data_number(){ |
evanso | 59:0b2e43312d6b | 181 | return display_data_number_; |
evanso | 59:0b2e43312d6b | 182 | } |
evanso | 59:0b2e43312d6b | 183 | |
evanso | 59:0b2e43312d6b | 184 | void SavedGames::saved_games_scroll(Direction d_) { |
evanso | 59:0b2e43312d6b | 185 | |
evanso | 54:d46459104dea | 186 | // Changes displayed manu part depending on joystick input |
evanso | 54:d46459104dea | 187 | if (d_ == N || d_ == NE || d_ == NW ) { |
evanso | 54:d46459104dea | 188 | display_data_number_++; |
evanso | 54:d46459104dea | 189 | |
evanso | 54:d46459104dea | 190 | //loops back round when at end of saved game vecotr |
evanso | 61:7c4ec680a428 | 191 | if(display_data_number_ > 3){ |
evanso | 61:7c4ec680a428 | 192 | display_data_number_ = 1; |
evanso | 54:d46459104dea | 193 | } |
evanso | 54:d46459104dea | 194 | } else if (d_ == S || d_ == SW || d_ == SE) { |
evanso | 54:d46459104dea | 195 | display_data_number_--; |
evanso | 62:f0c86a854a9e | 196 | if(display_data_number_ < 1 ){ |
evanso | 61:7c4ec680a428 | 197 | display_data_number_ = 3; |
evanso | 54:d46459104dea | 198 | } |
evanso | 54:d46459104dea | 199 | } |
evanso | 54:d46459104dea | 200 | wait(0.15); |
evanso | 54:d46459104dea | 201 | } |
evanso | 55:c04568b25617 | 202 |