Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

SavedGames/SavedGames.cpp

Committer:
evanso
Date:
2020-05-20
Revision:
59:0b2e43312d6b
Parent:
55:c04568b25617
Child:
60:55fdc6bb29b9

File content as of revision 59:0b2e43312d6b:

#include "SavedGames.h"

const int arrow_up[3][5] = {
    { 0, 0, 1, 0, 0 },
    { 0, 1, 1, 1, 0 },
    { 1, 1, 1, 1, 1 },
};

const int arrow_down[3][5] = {
    { 1, 1, 1, 1, 1 },
    { 0, 1, 1, 1, 0 },
    { 0, 0, 1, 0, 0 },
};

SavedGames::SavedGames() {
    
}

SavedGames::~SavedGames() {
    
}

void SavedGames::init(SDFileSystem &sd,N5110 &lcd){
    SavedGamesData data;
    error_ = false;
    check_sd_present(sd,lcd);
    display_data_number_ = 0;
    add_saved_data(sd, data, lcd);
}

void SavedGames::check_sd_present(SDFileSystem &sd,N5110 &lcd){
    if(!sd.card_present()) {
        error_ = true;
        
        //print error screen
        lcd.clear();
        lcd.printString("SD card not ",9,3);
        lcd.printString("  present   ",9,4);
        lcd.refresh();
        wait(3);
    }
}

void SavedGames::error_open_file(N5110 &lcd){
    error_ = true;
        
    //print error screen
    lcd.clear();
    lcd.printString(" Unable to  ",9,3);
    lcd.printString(" open file  ",9,4);
    lcd.refresh();
    wait(3); 
}

void SavedGames::add_saved_data(SDFileSystem &sd,SavedGamesData data,
 N5110 &lcd){
    //opens file  
    FILE *fp = fopen("/sd/SavedGames.csv", "w");
    
    if (fp == NULL) {
        error_open_file(lcd);
        return;
    }else{
         //Adda data to file if no error
        fprintf(fp, "%d,%d,%d,%d\n", data.score, data.lives, data.smart_bombs,
        data.alien_number); 
        fclose(fp);
    }  
}

void SavedGames::read_saved_data(SDFileSystem &sd, N5110 &lcd){
    //opens file  
    FILE *fp = fopen("/sd/SavedGames.csv", "r");
    
    if (fp == NULL) {
        error_open_file(lcd);
        return;
   
    //Reads saved data into vector 
    }else{
        int lives;
        int score;
        int alien_number;
        int smart_bombs;
        
        while (fscanf(fp, "%d,%d,%d,%d",&score, &lives,&smart_bombs,
        &alien_number) != EOF) {
            //creats object
            SavedGamesData data;
          
            //sets data to object
            data.score = score;
            printf ("data.score = %d \n", data.score);
            data.lives = lives;
            printf ("data.lives = %d \n", data.lives);
            data.smart_bombs = smart_bombs;
            printf ("data.smart_bombs = %d \n", data.smart_bombs);
            data.alien_number = alien_number;
            printf ("data.alien_number = %d \n", data.lives);
            
            
            //Add object to vector
            saved_data_vector.push_back(data);       
        }
         //printf ("saved_data_vector_ 1%d \n", saved_data_vector.size());
        fclose(fp); 
                
    }
       
     
}

void SavedGames::display_saved_games(N5110 &lcd){
    lcd.clear();
    //prints saved game screen
    lcd.printString("Saved Games",9,0);
    lcd.drawSprite(39, 18, 3, 5, (int *)arrow_up);
    lcd.drawSprite(39, 34, 3, 5, (int *)arrow_down);
    
    //prints saved game that is displayed
    char buffer[9]; 
    sprintf(buffer,"Save %2d",display_data_number_);
    lcd.printString(buffer,21,3);
    lcd.printString("B To Go Back",6,5);
    
    lcd.refresh();
}

bool SavedGames::get_error(){
    return error_;   
}

int SavedGames::get_display_data_number(){
    return display_data_number_;
}

void SavedGames::saved_games_scroll(Direction d_) {
    
    // Changes displayed manu part depending on joystick input
    if (d_ == N || d_ == NE || d_ == NW ) {   
        display_data_number_++;
        
        //loops back round when at end of saved game vecotr
        if(display_data_number_ == saved_data_vector.size()){
          display_data_number_ = 0; 
        }        
    } else if (d_ == S || d_ == SW || d_ == SE) {
        display_data_number_--;
         if(display_data_number_ < 0 ){
          display_data_number_ = saved_data_vector.size() ; 
        }
    }
    wait(0.15);
}