Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

MenuClasses/Settings/Settings.cpp

Committer:
AhmedPlaymaker
Date:
2019-05-05
Revision:
76:7fa91122907f
Parent:
64:540aa1602372
Child:
83:329da564799a

File content as of revision 76:7fa91122907f:

#include "Settings.h"

Settings::Settings()
{

}

Settings::~Settings()
{

}

int naviL[13][8] = {
    {0,0,0,0,0,0,1,1},
    {0,0,0,0,0,1,1,0},
    {0,0,0,0,1,1,0,0},
    {0,0,0,1,1,0,0,0},
    {0,0,1,1,0,0,0,0},
    {0,1,1,0,0,0,0,0},
    {1,1,1,1,1,1,1,1},
    {0,1,1,0,0,0,0,0},
    {0,0,1,1,0,0,0,0},
    {0,0,0,1,1,0,0,0},
    {0,0,0,0,1,1,0,0},
    {0,0,0,0,0,1,1,0},
    {0,0,0,0,0,0,1,1},
};

int naviR[13][8] = {
    {1,1,0,0,0,0,0,0},
    {0,1,1,0,0,0,0,0},
    {0,0,1,1,0,0,0,0},
    {0,0,0,1,1,0,0,0},
    {0,0,0,0,1,1,0,0},
    {0,0,0,0,0,1,1,0},
    {1,1,1,1,1,1,1,1},
    {0,0,0,0,0,1,1,0},
    {0,0,0,0,1,1,0,0},
    {0,0,0,1,1,0,0,0},
    {0,0,1,1,0,0,0,0},
    {0,1,1,0,0,0,0,0},
    {1,1,0,0,0,0,0,0},
};

int screenContrast[13][13] = {
    {0,0,0,0,1,1,1,1,1,0,0,0,0},
    {0,0,0,1,0,0,0,0,0,1,0,0,0},
    {0,0,1,0,0,1,1,1,0,0,1,0,0},
    {0,1,0,1,1,0,0,1,1,1,0,1,0},
    {1,0,0,1,0,0,0,1,1,1,0,0,1},
    {1,0,1,1,0,0,0,1,1,1,1,0,1},
    {1,0,1,0,0,0,0,1,1,1,1,0,1},
    {1,0,1,0,0,0,0,1,1,1,1,0,1},
    {1,0,0,1,0,0,0,1,1,1,0,0,1},
    {0,1,0,1,1,0,0,1,1,1,0,1,0},
    {0,0,1,0,0,1,1,1,0,0,1,0,0},
    {0,0,0,1,0,0,0,0,0,1,0,0,0},
    {0,0,0,0,1,1,1,1,1,0,0,0,0},
};

int brightness[15][15] = {
    {0,0,0,1,0,0,0,1,0,0,0,1,0,0,0},
    {0,1,0,0,1,0,0,1,0,0,1,0,0,1,0},
    {0,0,1,0,0,1,0,1,0,1,0,0,1,0,0},
    {1,0,0,1,0,0,1,1,1,0,0,1,0,0,1},
    {0,1,0,0,1,1,0,0,0,1,1,0,0,1,0},
    {0,0,1,0,1,0,0,0,0,0,1,0,1,0,0},
    {0,0,0,1,0,0,0,0,0,0,0,1,0,0,0},
    {1,1,1,1,0,0,0,0,0,0,0,1,1,1,1},
    {0,0,0,1,0,0,0,0,0,0,0,1,0,0,0},
    {0,0,1,0,1,0,0,0,0,0,1,0,1,0,0},
    {0,1,0,0,1,1,0,0,0,1,1,0,0,1,0},
    {1,0,0,1,0,0,1,1,1,0,0,1,0,0,1},
    {0,0,1,0,0,1,0,1,0,1,0,0,1,0,0},
    {0,1,0,0,1,0,0,1,0,0,1,0,0,1,0},
    {0,0,0,1,0,0,0,1,0,0,0,1,0,0,0},
};

float * Settings::Implement(N5110 &lcd, Gamepad &pad, float cs)
{
    Settings::info(lcd, pad);
    cs_sc[0] = 4; //to initialise the control speeds
    cs_sc[1] = 1; //to set show credits to a default of 1.
    int st = 1; //an index for settings
    wait(1/cs); //to avoid a race condition of the following while loop being skipped.
    //pad.init();
    while (pad.check_event(Gamepad::BACK_PRESSED) == false) {  //if button pressed.
        Direction d = pad.get_direction();
        wait(1/cs);
        lcd.clear();

        if((d==E)&&(st==4))  {
            st=1;
        }

        else if((d==W)&&(st==1))  {
            st=4;
        }

        else if((d==E)&&(1<=st<=3))  {
            st=st+1;
        }

        else if((d==W)&&(2<=st<=4))  {
            st=st-1;
        }

        Settings::CallFunctions(lcd, pad, st);
    }
    pad.tone(1000.0,0.1);
    return cs_sc;
}

void Settings::info(N5110 &lcd, Gamepad &pad)
{
    lcd.clear();
    pad.leds_on();
    lcd.printString("For selecting",0,0);//Function used to promt the user to how to use settings.
    lcd.printString("from settings",0,1);
    lcd.printString("available, use",0,2);
    lcd.printString("Joystick in <>",0,3);
    lcd.printString("directions",0,4);
    lcd.refresh();
    wait(2);
    lcd.clear();
    lcd.printString("For adjusting",0,0);
    lcd.printString("the parameters,",0,1);
    lcd.printString("use the pot",0,2);
    lcd.printString("by rotating",0,3);
    lcd.printString("Press Back",0,4);
    lcd.printString("to confirm",0,5);
    lcd.refresh();
    wait(2);
    pad.leds_off();
}

void Settings::CallFunctions(N5110 &lcd, Gamepad &pad, int st)
{
    lcd.clear();
    lcd.drawSprite(5,22,13,8,(int *)naviL); //Function used to draw the sprite.
    lcd.drawSprite(71,22,13,8,(int *)naviR); //Function used to draw the sprite.
    switch (st) {
        case 1:
            Settings::controlSensitivity(lcd, pad);
            break;
        case 2:
            Settings::brigntness(lcd, pad);
            break;
        case 3:
            Settings::contrast(lcd, pad);
            break;
        case 4:
            Settings::showCredits(lcd, pad);
            break;
    }
    lcd.refresh();
}

void Settings::controlSensitivity(N5110 &lcd, Gamepad &pad)
{
    lcd.printString("Control Speeds",0,0);
    cs_sc[0] = pad.read_pot()*5+1;
    lcd.drawRect(15,22,54,13,FILL_TRANSPARENT);
    lcd.drawRect(15,22,pad.read_pot()*54,13,FILL_BLACK);
    pad.leds_on();
}

void Settings::brigntness(N5110 &lcd, Gamepad &pad)
{
    lcd.drawSprite(35,2,15,15,(int *)brightness); //Function used to draw the sprite.
    float pot;
    pot = pad.read_pot();
    lcd.drawRect(15,22,54,13,FILL_TRANSPARENT);
    lcd.drawRect(15,22,pad.read_pot()*54,13,FILL_BLACK);
    lcd.setBrightness(pot);
    pad.leds_on();
}

void Settings::contrast(N5110 &lcd, Gamepad &pad)
{
    lcd.drawSprite(36,3,13,13,(int *)screenContrast); //Function used to draw the sprite.
    float pot;
    pot = ((pad.read_pot()+3.8)/8);
    lcd.drawRect(15,22,54,13,FILL_TRANSPARENT);
    lcd.drawRect(15,22,pad.read_pot()*54,13,FILL_BLACK);
    lcd.setContrast(pot);
    pad.leds_on();
}

void Settings::showCredits(N5110 &lcd, Gamepad &pad)
{
    lcd.printString("Show Credits?",5,0);
    float pot;
    pot = pad.read_pot();

    if(((0.1<=pot)&&(pot<=0.2))||((0.3<=pot)&&(pot<=0.4))||((0.5<=pot)&&(pot<=0.6))||((0.7<=pot)&&(pot<=0.8))||((0.9<=pot)&&(pot<=1)))  {
        lcd.printString("NO",36,3);
        cs_sc[1] = 0;
    }

    else  {
        lcd.printString("YES",33,3);
        cs_sc[1] = 1;
    }

    pad.leds_on();
}