Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Interface/Interface.cpp

Committer:
el19zf
Date:
2020-05-14
Revision:
13:eb60628db8bf
Parent:
12:009895f6b6e4
Child:
14:42b8a91e463c

File content as of revision 13:eb60628db8bf:

#include  "Interface.h"

State fsm[3] = {
    {0,{2,1}},
    {1,{0,2}},
    {2,{1,0}},
};
const int pointer[3][2] = {
    {1,0},
    {1,1},
    {1,0}
};

Interface::Interface()
{
    
}

Interface::~Interface()
{
    
}

void Interface::init()
{
    _gameover_flag = 0;
    _sim_flag = 0;
    _victory_flag = 0;
}


void Interface::Welcome(N5110 &lcd,Gamepad &pad)
{
    while (!pad.start_pressed()) 
    {
        lcd.clear();
        lcd.printString("   Welcome!   ",0,1);
        lcd.printString("   Game by    ",0,2);
        lcd.printString("   Z. FENG    ",0,3);
        lcd.setContrast( pad.read_pot1());
        lcd.drawRect(0,44,int(pad.read_pot1()*WIDTH),2,FILL_BLACK);
        //printf("WIDTH of contrast = %d, contrast = %f\n",(int)pad.read_pot1()*WIDTH,pad.read_pot1());
        lcd.refresh();
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        wait(0.1);
    }
}

int Interface::menu(N5110 &lcd,Gamepad &pad,int option_flag)
{
    while (!pad.A_pressed())
    {
        lcd.clear();
        lcd.printString("    MENU",0,0);
        lcd.printString("        Start",0,2);
        lcd.printString("   Start(Hell)",0,3);
        lcd.printString("         Exit",0,4);
        _d = pad.get_direction();
        if(_d == N||_d ==NE||_d==NW){
            option_flag = fsm[option_flag].next_state[0];
        } else if(_d == S||_d==SE||_d==SW){
            option_flag = fsm[option_flag].next_state[1];
        }
    lcd.drawSprite(0,8*option_flag+18,3,2,(int*)pointer); 
    lcd.refresh();
    pad.leds_on();   
    wait(0.3);
    //printf("A_pressed\n");
    }  
    return option_flag;          
}

void Interface::game_over(N5110 &lcd,Gamepad &pad)
{
    lcd.clear();
    pad.init();
    while(!pad.B_pressed()){
        lcd.printString("  Game over   ",0,1);
        lcd.printString("  Press B to  ",0,2);
        lcd.printString("  try again?  ",0,3);
        lcd.refresh();
        wait(0.1);
        //printf("Not press B\n");
    }
    _gameover_flag = 1;
}

int Interface::check_pause(N5110 &lcd,Gamepad &pad,int paused_flag)
{
    if(pad.start_pressed())
        paused_flag = 1;
        //printf("start press\n");
    while(paused_flag == 1){
        _timer.stop();
        lcd.printString("Paused",23,2);
        lcd.refresh();
        if(pad.start_pressed())
            paused_flag = 0;
    }
    _timer.start();
    return paused_flag;
}

int Interface::count_down(N5110 &lcd,int count_flag)
{
    char buffer[6];
    sprintf(buffer,"%d",int(count_flag/6));
    lcd.printString(buffer,40,2);
    //printf("count: %d\n",count_flag);
    count_flag--;
    return count_flag;
}

void Interface::exit(N5110 &lcd,Gamepad &pad)
{
    lcd.clear();
    pad.init();
    pad.leds_off();
    while(!pad.B_pressed()){
        lcd.printString(" Press B back ",0,2);
        lcd.printString("   to menu   ",0,3);
        lcd.refresh();
        wait(0.1);
    }
}

void Interface::victory(N5110 &lcd,Gamepad &pad)
{
    lcd.clear();
    pad.init();
    while(!pad.B_pressed()){
        lcd.printString("   Victory!  ",0,1);
        lcd.printString(" Press B back ",0,2);
        lcd.printString("   to menu   ",0,3);
        lcd.refresh();
        wait(0.1);
    }
    _victory_flag = 1;
}

void Interface::simple_game(N5110 &lcd,Gamepad &pad)
{
    lcd.clear();
    pad.init();
    while(!pad.A_pressed()){
        lcd.printString("  DO YOU WANT ",0,1);
        lcd.printString(" MAKE IT EASY? ",0,2);
        lcd.printString("  PRESS A to",0,3);
        lcd.printString("  try again! ",0,4);
        lcd.refresh();
        wait(0.1); 
    }
    _sim_flag = 1;
}

int Interface::get_sim_flag()
{
    //printf("Get simple_flag %d\n",_sim_flag);
    return _sim_flag;
}

int Interface::get_gameover_flag()
{
     return _gameover_flag;
}

int Interface::get_victory_flag()
{
    return _victory_flag;
}