Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: PokittoLib
Fork of Asterocks by
Revision 21:153974d672f8, committed 2018-07-01
- Comitter:
- Pokitto
- Date:
- Sun Jul 01 06:33:02 2018 +0000
- Parent:
- 20:31dc45425869
- Commit message:
- Highscore saving added
Changed in this revision
diff -r 31dc45425869 -r 153974d672f8 My_settings.h --- a/My_settings.h Wed May 02 06:19:23 2018 +0000 +++ b/My_settings.h Sun Jul 01 06:33:02 2018 +0000 @@ -3,5 +3,6 @@ #define PROJ_STREAMING_MUSIC 0 #define PROJ_GBSOUND 1 #define PROJ_HIRES 0 +#define PROJ_ENABLE_SOUND 1
diff -r 31dc45425869 -r 153974d672f8 PokittoLib.lib --- a/PokittoLib.lib Wed May 02 06:19:23 2018 +0000 +++ b/PokittoLib.lib Sun Jul 01 06:33:02 2018 +0000 @@ -1,1 +1,1 @@ -https://os.mbed.com/users/Pokitto/code/PokittoLib/#2b8560b11eab +https://os.mbed.com/users/Pokitto/code/PokittoLib/#c04087025cab
diff -r 31dc45425869 -r 153974d672f8 ageddon.cpp
--- a/ageddon.cpp Wed May 02 06:19:23 2018 +0000
+++ b/ageddon.cpp Sun Jul 01 06:33:02 2018 +0000
@@ -3,7 +3,30 @@
/* USE AT YOUR OWN RISK - NO GUARANTEES GIVEN OF 100% CORRECTNESS */
#include "PokittoCore.h"
-#include "PokittoEEPROM.h"
+#include "PokittoCookie.h"
+
+#define NUM_HIGHSCORES 5
+#define NAME_SIZE 10
+#define ENTRY_SIZE 15
+
+/* Writing directly to EEPROM is deprecated */
+/*
+uint32_t highscores[NUM_HIGHSCORES] = {10000,7000,5000,4000,2000};
+char names[NUM_HIGHSCORES][NAME_SIZE+1] = {"Crack Shot", "Defender", "Gunner", "We Tried", "No Hope"};
+*/
+
+/* This is how you do it with the PokittoCookie class !!!*/
+class gdata : public Pokitto::Cookie {
+ public:
+ uint32_t highscores[NUM_HIGHSCORES];
+ char names[NUM_HIGHSCORES][NAME_SIZE+1];
+ int check_number;
+ gdata() {
+ }
+};
+
+gdata gamedata;
+
/* Auto-generated function declarations */
void setup();
void nextStage();
@@ -34,7 +57,10 @@
void drawHighscores();
void initSound();
void playSound(uint8_t);
-Pokitto::Core gb;
+
+
+Pokitto::Core gb; // game object
+
int main() {
setup();
@@ -254,7 +280,7 @@
if( counter%8 == 0 ){
flash ^= 255;
}
-
+
if( flash ){
gb.display.setColor(4);
gb.display.cursorY = HEIGHT - TEXT_HEIGHT*2;
@@ -269,17 +295,19 @@
counter++;
if( gb.buttons.pressed(BTN_A) ){
gb.display.setColor(WHITE);
- break;
+ break;
}
- }
+ }
}
}
void setup() {
+ loadHighscores(); // do this before gb.begin !!
gb.begin();
- loadHighscores();
-
- //We need to do extra Gamebuino-formatting-specific initialization if we don't use the title screen
+
+
+
+ //We need to do extra Gamebuino-formatting-specific initialization if we don't use the title screen
gb.display.setFont(font5x7);
gb.display.fontSize = 1;
gb.display.textWrap = false;
@@ -287,7 +315,7 @@
gb.battery.show = false;
gb.display.setColor(BLACK);
gb.display.setColorDepth(1);
-
+
doTitle(0);
gb.pickRandomSeed();
}
@@ -439,7 +467,7 @@
gb.display.setColor(explosionColor+1);
if(counter%2 == 0){
explosionColor++;
- explosionColor%=7;
+ explosionColor%=7;
}
for(uint8_t i = 0; i < MAX_PMISSILES; i++){
if( pDetonations[i][0] <= WIDTH ){
@@ -494,7 +522,7 @@
for(uint8_t i = 0; i < MAX_EMISSILES; i++){
if( eDests[i] > WIDTH ){
etotal--;
- eDests[i] = random(7); //Target one of the 6 cities or 2 launch sites TODO: Come back later if random's behavior changes
+ eDests[i] = random(8); //Target one of the 6 cities or 2 launch sites TODO: Come back later if random's behavior changes
eMissiles[i][0] = random(WIDTH); //Screen width //TODO: if random is supposed to be inclusive, add a -1
eMissiles[i][1] = 0; //Top of screen
eMissiles[i][2] = eMissiles[i][0]; //Start and end are same
@@ -514,7 +542,7 @@
//Check for a valid destination without a current detonation
if( pDests[i][0] <= WIDTH && pDetonations[i][0] > WIDTH ){
//If the missile is close enough to the destination, detonate
- if( abs( pDests[i][0] - pMissiles[i][0] ) < PSPEED && abs( pDests[i][1] - pMissiles[i][1] ) < PSPEED ){
+ if( abs( int(pDests[i][0] - pMissiles[i][0]) ) < PSPEED && abs( int(pDests[i][1] - pMissiles[i][1]) ) < PSPEED ){
pDetonations[i][0] = pDests[i][0];
pDetonations[i][1] = pDests[i][1];
pDetonations[i][2] = 0; //Start detonation at radius of 0
@@ -533,7 +561,7 @@
//Check for a valid destination
if( eDests[i] <= WIDTH ){
//If enemy missile is close enough to the destination, detonate
- if( abs( (eDests[i]*14+6) - eMissiles[i][2] ) < PSPEED && abs( HEIGHT-4 - eMissiles[i][3] ) < PSPEED ){
+ if( abs( int((eDests[i]*14+6) - eMissiles[i][2]) ) < PSPEED && abs( int(HEIGHT-4 - eMissiles[i][3]) ) < PSPEED ){
cities[eDests[i]] = 0; //Destroy city/launcher
//If launcher, remove its ammo
@@ -831,14 +859,26 @@
counter++;
}
}
-#define NUM_HIGHSCORES 5
-#define NAME_SIZE 10
-#define ENTRY_SIZE 15
-uint32_t highscores[NUM_HIGHSCORES] = {10000,7000,5000,4000,2000};
-char names[NUM_HIGHSCORES][NAME_SIZE+1] = {"Crack Shot", "Defender", "Gunner", "We Tried", "No Hope"};
void loadHighscores(){
+
+ uint32_t defdata[] = {10000,7000,5000,4000,2000};
+ char defnames[NUM_HIGHSCORES][NAME_SIZE+1] = {"Crack Shot", "Defender", "Gunner", "We Tried", "No Hope"};
+ // Initialize the cookie
+ gamedata.begin("ArmageDD",gamedata);
+
+ uint32_t allscores=0;
+ for (int i=0;i<NUM_HIGHSCORES;i++) allscores += gamedata.highscores[i];
+
+ if (gamedata.check_number != 12345) {
+ //checknumber indicates that no highscores saved yet, so put in "defaults"
+ for (int i=0;i<NUM_HIGHSCORES;i++) gamedata.highscores[i]=defdata[i];
+ for (int i=0;i<NUM_HIGHSCORES;i++) strcpy(gamedata.names[i],defnames[i]);
+ gamedata.check_number = 12345; // put the checking number
+ gamedata.saveCookie();//save the default values
+ }
+ /*
for( uint8_t entry = 0; entry < NUM_HIGHSCORES; entry++ ){
for( uint8_t offset = 0; offset < ENTRY_SIZE; offset++ ){
if( offset < NAME_SIZE ){
@@ -850,10 +890,12 @@
}
}
}
+ */
+
}
uint8_t isHighscore(uint32_t score){
- if( score > highscores[NUM_HIGHSCORES-1] ){
+ if( score > gamedata.highscores[NUM_HIGHSCORES-1] ){
return 1;
}
return 0;
@@ -864,20 +906,22 @@
uint32_t tmp_score = 0;
char tmp_name[10];
for( uint8_t entry = 0; entry < NUM_HIGHSCORES; entry++ ){
- if( score > highscores[entry] ){
+ if( score > gamedata.highscores[entry] ){
found = 1;
}
if( found ){
- tmp_score = highscores[entry];
- strcpy(tmp_name,names[entry]);
+ tmp_score = gamedata.highscores[entry];
+ strcpy(tmp_name,gamedata.names[entry]);
- highscores[entry] = score;
- strcpy(names[entry], who);
+ gamedata.highscores[entry] = score;
+ strcpy(gamedata.names[entry], who);
score = tmp_score;
strcpy(who, tmp_name);
}
}
+ gamedata.saveCookie();
+/*Writing to EEPROM directly is deprecated and not necessary
for( uint8_t entry = 0; entry < NUM_HIGHSCORES; entry++ ){
for( uint8_t offset = 0; offset < ENTRY_SIZE; offset++ ){
if( offset < NAME_SIZE ){
@@ -889,6 +933,7 @@
}
}
}
+ */
}
void drawHighscores(){
@@ -901,24 +946,24 @@
for( uint8_t entry = 0; entry < NUM_HIGHSCORES; entry++ ){
gb.display.cursorX = 0;
gb.display.cursorY = TEXT_HEIGHT*3 + TEXT_HEIGHT*entry;
- gb.display.print(names[entry]);
+ gb.display.print(gamedata.names[entry]);
gb.display.cursorX = WIDTH - TEXT_WIDTH*6;
- if( highscores[entry] < 100000 ){
+ if( gamedata.highscores[entry] < 100000 ){
gb.display.print(0);
}
- if( highscores[entry] < 10000 ){
+ if( gamedata.highscores[entry] < 10000 ){
gb.display.print(0);
}
- if( highscores[entry] < 1000 ){
+ if( gamedata.highscores[entry] < 1000 ){
gb.display.print(0);
}
- if( highscores[entry] < 100 ){
+ if( gamedata.highscores[entry] < 100 ){
gb.display.print(0);
}
- if( highscores[entry] < 10 ){
+ if( gamedata.highscores[entry] < 10 ){
gb.display.print(0);
}
- gb.display.print(highscores[entry]);
+ gb.display.print(gamedata.highscores[entry]);
}
}
