Breakout mbed

Dependencies:   TermControl

main.cpp

Committer:
gleydsonn
Date:
2016-12-10
Revision:
0:aa30225d7ed5

File content as of revision 0:aa30225d7ed5:

#include "mbed.h"
#include "string"
#include "stdlib.h"
#include "TermControl.h"

using namespace std;

DigitalOut led1(LED1);
Serial pcEstagio(USBTX, USBRX);
Serial pcBola(USBTX, USBRX);
Serial pcPlataforma(USBTX, USBRX);
AnalogIn   controle(A0);
AnalogIn   controleY(A1);

const int linhas = 30;
const int colunas = 70;

int NumBlocos = 18;
int velocidade = 250;

int blocos[linhas][colunas];

int bolaY = linhas-3;
int bolaX = colunas/2;

int direcaoX = 1;
int direcaoY = -1;

int linhaPlataforma = linhas-2;
int colunaPlataforma = (colunas/2)-4;

void desenhaBlocos(){
    TermControl ctrl;
    
    ctrl.SetTerminal(&pcEstagio);
    for(int i=5;i<=11;i+=3){
        for(int j=5;j<=70;j+=11)
        {
            for(int k = 0;k<6;k++){
                ctrl.PrintAt(j+k, i,"\x1B[31m▒");
                blocos[i][j+k]=1;
            }
        }
    }
    NumBlocos = 18;
}


void desenhaEstagio(){
    TermControl ctrl;
    ctrl.SetTerminal(&pcEstagio);
    ctrl.Reset();
    ctrl.Clear();

    
    string linhaSuperior = "┌";
    
    for(int i=1;i<colunas-1;i++){
        linhaSuperior += "─"; 
    }
    
    linhaSuperior+= "┐";
    
    ctrl.PrintAt(0,0,linhaSuperior);
    
    for(int i=2;i<linhas-1;i++){
        ctrl.PrintAt(0, i, "│");
        ctrl.PrintAt(colunas, i, "│");
    }      
    
    bolaY = linhas-3;
    bolaX = colunas/2;

    ctrl.SetCursor(0, linhaPlataforma);
    ctrl.EraseLine ();
    
    ctrl.PrintAt(colunaPlataforma, linhaPlataforma,"┌──────┐");
    desenhaBlocos();
}

void moverBola(){
    Thread::wait(velocidade);
    
    TermControl ctrl;
    ctrl.SetTerminal(&pcBola);
    
    
    ctrl.PrintAt(bolaX, bolaY, " ");
    
    if(bolaY==2)
       direcaoY*=-1;
    if(bolaX==2 || bolaX==colunas-2)
       direcaoX*=-1;

    if(bolaY==linhas-3)
        if(bolaX>=colunaPlataforma && bolaX<=colunaPlataforma+8){
            direcaoY=-1;
        }
    
    if(bolaY==linhas-2){
            direcaoY=-1;
            direcaoX=1;
            bolaY = linhas-3;
            bolaX = colunas/2;

    }
    else{
        if(blocos[bolaY+direcaoY][bolaX+direcaoX] == 1){
            NumBlocos--;
            int i;
        
            for(i=0;blocos[bolaY+direcaoY][bolaX+direcaoX+i]!=0;i++){
                ctrl.PrintAt(bolaX+direcaoX+i,bolaY+direcaoY," ");
                blocos[bolaY+direcaoY][bolaX+direcaoX+i]=0;
            }
    
            for(i=-1;blocos[bolaY+direcaoY][bolaX+direcaoX+i]!=0;i--){
                ctrl.PrintAt(bolaX+direcaoX+i,bolaY+direcaoY," ");
                blocos[bolaY+direcaoY][bolaX+direcaoX+i]=0;
            }
        
            direcaoY*=-1;
        }
    
        bolaY += direcaoY;
        bolaX += direcaoX;
    }
    
    ctrl.PrintAt(bolaX, bolaY, "O");    
}

static void moverPlataforma(){

    int direcao;
    float seta;
    float setaY;
    
    TermControl ctrl;
    ctrl.SetTerminal(&pcPlataforma);
    
    
    while(true){
        direcao=0;
         Thread::wait(50);
        seta = controle.read();
       
            
        if(seta < 0.2f) {
            direcao=-1;
        } else 
        if(seta > 0.8f){
            direcao=1;
        }
        
        /*
        if(seta=='a'){
            direcao=-1;
        }else if(seta=='d'){
            direcao=1;
        }*/
        
        if(direcao!=0){
          if((colunaPlataforma+direcao)<colunas-7 && (colunaPlataforma+direcao)>1){
            ctrl.SetCursor(0, linhaPlataforma);
            ctrl.EraseLine ();
            colunaPlataforma+=direcao;
            ctrl.PrintAt(colunaPlataforma, linhaPlataforma,"┌──────┐");
          }
        }
    }
   
}


int main() {
    memset(blocos, 0, sizeof(int)*linhas*colunas);
    
    pcEstagio.baud(115200);
    desenhaEstagio();
    Thread t2(moverPlataforma);

    while(true){
        if(NumBlocos==0){
            desenhaEstagio();    
            velocidade = 250*0.5;            
        }
        moverBola();
    }    
    
}