Breakout mbed

Dependencies:   TermControl

Committer:
gleydsonn
Date:
Sat Dec 10 13:51:24 2016 +0000
Revision:
0:aa30225d7ed5
Inicial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gleydsonn 0:aa30225d7ed5 1 #include "mbed.h"
gleydsonn 0:aa30225d7ed5 2 #include "string"
gleydsonn 0:aa30225d7ed5 3 #include "stdlib.h"
gleydsonn 0:aa30225d7ed5 4 #include "TermControl.h"
gleydsonn 0:aa30225d7ed5 5
gleydsonn 0:aa30225d7ed5 6 using namespace std;
gleydsonn 0:aa30225d7ed5 7
gleydsonn 0:aa30225d7ed5 8 DigitalOut led1(LED1);
gleydsonn 0:aa30225d7ed5 9 Serial pcEstagio(USBTX, USBRX);
gleydsonn 0:aa30225d7ed5 10 Serial pcBola(USBTX, USBRX);
gleydsonn 0:aa30225d7ed5 11 Serial pcPlataforma(USBTX, USBRX);
gleydsonn 0:aa30225d7ed5 12 AnalogIn controle(A0);
gleydsonn 0:aa30225d7ed5 13 AnalogIn controleY(A1);
gleydsonn 0:aa30225d7ed5 14
gleydsonn 0:aa30225d7ed5 15 const int linhas = 30;
gleydsonn 0:aa30225d7ed5 16 const int colunas = 70;
gleydsonn 0:aa30225d7ed5 17
gleydsonn 0:aa30225d7ed5 18 int NumBlocos = 18;
gleydsonn 0:aa30225d7ed5 19 int velocidade = 250;
gleydsonn 0:aa30225d7ed5 20
gleydsonn 0:aa30225d7ed5 21 int blocos[linhas][colunas];
gleydsonn 0:aa30225d7ed5 22
gleydsonn 0:aa30225d7ed5 23 int bolaY = linhas-3;
gleydsonn 0:aa30225d7ed5 24 int bolaX = colunas/2;
gleydsonn 0:aa30225d7ed5 25
gleydsonn 0:aa30225d7ed5 26 int direcaoX = 1;
gleydsonn 0:aa30225d7ed5 27 int direcaoY = -1;
gleydsonn 0:aa30225d7ed5 28
gleydsonn 0:aa30225d7ed5 29 int linhaPlataforma = linhas-2;
gleydsonn 0:aa30225d7ed5 30 int colunaPlataforma = (colunas/2)-4;
gleydsonn 0:aa30225d7ed5 31
gleydsonn 0:aa30225d7ed5 32 void desenhaBlocos(){
gleydsonn 0:aa30225d7ed5 33 TermControl ctrl;
gleydsonn 0:aa30225d7ed5 34
gleydsonn 0:aa30225d7ed5 35 ctrl.SetTerminal(&pcEstagio);
gleydsonn 0:aa30225d7ed5 36 for(int i=5;i<=11;i+=3){
gleydsonn 0:aa30225d7ed5 37 for(int j=5;j<=70;j+=11)
gleydsonn 0:aa30225d7ed5 38 {
gleydsonn 0:aa30225d7ed5 39 for(int k = 0;k<6;k++){
gleydsonn 0:aa30225d7ed5 40 ctrl.PrintAt(j+k, i,"\x1B[31m▒");
gleydsonn 0:aa30225d7ed5 41 blocos[i][j+k]=1;
gleydsonn 0:aa30225d7ed5 42 }
gleydsonn 0:aa30225d7ed5 43 }
gleydsonn 0:aa30225d7ed5 44 }
gleydsonn 0:aa30225d7ed5 45 NumBlocos = 18;
gleydsonn 0:aa30225d7ed5 46 }
gleydsonn 0:aa30225d7ed5 47
gleydsonn 0:aa30225d7ed5 48
gleydsonn 0:aa30225d7ed5 49 void desenhaEstagio(){
gleydsonn 0:aa30225d7ed5 50 TermControl ctrl;
gleydsonn 0:aa30225d7ed5 51 ctrl.SetTerminal(&pcEstagio);
gleydsonn 0:aa30225d7ed5 52 ctrl.Reset();
gleydsonn 0:aa30225d7ed5 53 ctrl.Clear();
gleydsonn 0:aa30225d7ed5 54
gleydsonn 0:aa30225d7ed5 55
gleydsonn 0:aa30225d7ed5 56 string linhaSuperior = "┌";
gleydsonn 0:aa30225d7ed5 57
gleydsonn 0:aa30225d7ed5 58 for(int i=1;i<colunas-1;i++){
gleydsonn 0:aa30225d7ed5 59 linhaSuperior += "─";
gleydsonn 0:aa30225d7ed5 60 }
gleydsonn 0:aa30225d7ed5 61
gleydsonn 0:aa30225d7ed5 62 linhaSuperior+= "┐";
gleydsonn 0:aa30225d7ed5 63
gleydsonn 0:aa30225d7ed5 64 ctrl.PrintAt(0,0,linhaSuperior);
gleydsonn 0:aa30225d7ed5 65
gleydsonn 0:aa30225d7ed5 66 for(int i=2;i<linhas-1;i++){
gleydsonn 0:aa30225d7ed5 67 ctrl.PrintAt(0, i, "│");
gleydsonn 0:aa30225d7ed5 68 ctrl.PrintAt(colunas, i, "│");
gleydsonn 0:aa30225d7ed5 69 }
gleydsonn 0:aa30225d7ed5 70
gleydsonn 0:aa30225d7ed5 71 bolaY = linhas-3;
gleydsonn 0:aa30225d7ed5 72 bolaX = colunas/2;
gleydsonn 0:aa30225d7ed5 73
gleydsonn 0:aa30225d7ed5 74 ctrl.SetCursor(0, linhaPlataforma);
gleydsonn 0:aa30225d7ed5 75 ctrl.EraseLine ();
gleydsonn 0:aa30225d7ed5 76
gleydsonn 0:aa30225d7ed5 77 ctrl.PrintAt(colunaPlataforma, linhaPlataforma,"┌──────┐");
gleydsonn 0:aa30225d7ed5 78 desenhaBlocos();
gleydsonn 0:aa30225d7ed5 79 }
gleydsonn 0:aa30225d7ed5 80
gleydsonn 0:aa30225d7ed5 81 void moverBola(){
gleydsonn 0:aa30225d7ed5 82 Thread::wait(velocidade);
gleydsonn 0:aa30225d7ed5 83
gleydsonn 0:aa30225d7ed5 84 TermControl ctrl;
gleydsonn 0:aa30225d7ed5 85 ctrl.SetTerminal(&pcBola);
gleydsonn 0:aa30225d7ed5 86
gleydsonn 0:aa30225d7ed5 87
gleydsonn 0:aa30225d7ed5 88 ctrl.PrintAt(bolaX, bolaY, " ");
gleydsonn 0:aa30225d7ed5 89
gleydsonn 0:aa30225d7ed5 90 if(bolaY==2)
gleydsonn 0:aa30225d7ed5 91 direcaoY*=-1;
gleydsonn 0:aa30225d7ed5 92 if(bolaX==2 || bolaX==colunas-2)
gleydsonn 0:aa30225d7ed5 93 direcaoX*=-1;
gleydsonn 0:aa30225d7ed5 94
gleydsonn 0:aa30225d7ed5 95 if(bolaY==linhas-3)
gleydsonn 0:aa30225d7ed5 96 if(bolaX>=colunaPlataforma && bolaX<=colunaPlataforma+8){
gleydsonn 0:aa30225d7ed5 97 direcaoY=-1;
gleydsonn 0:aa30225d7ed5 98 }
gleydsonn 0:aa30225d7ed5 99
gleydsonn 0:aa30225d7ed5 100 if(bolaY==linhas-2){
gleydsonn 0:aa30225d7ed5 101 direcaoY=-1;
gleydsonn 0:aa30225d7ed5 102 direcaoX=1;
gleydsonn 0:aa30225d7ed5 103 bolaY = linhas-3;
gleydsonn 0:aa30225d7ed5 104 bolaX = colunas/2;
gleydsonn 0:aa30225d7ed5 105
gleydsonn 0:aa30225d7ed5 106 }
gleydsonn 0:aa30225d7ed5 107 else{
gleydsonn 0:aa30225d7ed5 108 if(blocos[bolaY+direcaoY][bolaX+direcaoX] == 1){
gleydsonn 0:aa30225d7ed5 109 NumBlocos--;
gleydsonn 0:aa30225d7ed5 110 int i;
gleydsonn 0:aa30225d7ed5 111
gleydsonn 0:aa30225d7ed5 112 for(i=0;blocos[bolaY+direcaoY][bolaX+direcaoX+i]!=0;i++){
gleydsonn 0:aa30225d7ed5 113 ctrl.PrintAt(bolaX+direcaoX+i,bolaY+direcaoY," ");
gleydsonn 0:aa30225d7ed5 114 blocos[bolaY+direcaoY][bolaX+direcaoX+i]=0;
gleydsonn 0:aa30225d7ed5 115 }
gleydsonn 0:aa30225d7ed5 116
gleydsonn 0:aa30225d7ed5 117 for(i=-1;blocos[bolaY+direcaoY][bolaX+direcaoX+i]!=0;i--){
gleydsonn 0:aa30225d7ed5 118 ctrl.PrintAt(bolaX+direcaoX+i,bolaY+direcaoY," ");
gleydsonn 0:aa30225d7ed5 119 blocos[bolaY+direcaoY][bolaX+direcaoX+i]=0;
gleydsonn 0:aa30225d7ed5 120 }
gleydsonn 0:aa30225d7ed5 121
gleydsonn 0:aa30225d7ed5 122 direcaoY*=-1;
gleydsonn 0:aa30225d7ed5 123 }
gleydsonn 0:aa30225d7ed5 124
gleydsonn 0:aa30225d7ed5 125 bolaY += direcaoY;
gleydsonn 0:aa30225d7ed5 126 bolaX += direcaoX;
gleydsonn 0:aa30225d7ed5 127 }
gleydsonn 0:aa30225d7ed5 128
gleydsonn 0:aa30225d7ed5 129 ctrl.PrintAt(bolaX, bolaY, "O");
gleydsonn 0:aa30225d7ed5 130 }
gleydsonn 0:aa30225d7ed5 131
gleydsonn 0:aa30225d7ed5 132 static void moverPlataforma(){
gleydsonn 0:aa30225d7ed5 133
gleydsonn 0:aa30225d7ed5 134 int direcao;
gleydsonn 0:aa30225d7ed5 135 float seta;
gleydsonn 0:aa30225d7ed5 136 float setaY;
gleydsonn 0:aa30225d7ed5 137
gleydsonn 0:aa30225d7ed5 138 TermControl ctrl;
gleydsonn 0:aa30225d7ed5 139 ctrl.SetTerminal(&pcPlataforma);
gleydsonn 0:aa30225d7ed5 140
gleydsonn 0:aa30225d7ed5 141
gleydsonn 0:aa30225d7ed5 142 while(true){
gleydsonn 0:aa30225d7ed5 143 direcao=0;
gleydsonn 0:aa30225d7ed5 144 Thread::wait(50);
gleydsonn 0:aa30225d7ed5 145 seta = controle.read();
gleydsonn 0:aa30225d7ed5 146
gleydsonn 0:aa30225d7ed5 147
gleydsonn 0:aa30225d7ed5 148 if(seta < 0.2f) {
gleydsonn 0:aa30225d7ed5 149 direcao=-1;
gleydsonn 0:aa30225d7ed5 150 } else
gleydsonn 0:aa30225d7ed5 151 if(seta > 0.8f){
gleydsonn 0:aa30225d7ed5 152 direcao=1;
gleydsonn 0:aa30225d7ed5 153 }
gleydsonn 0:aa30225d7ed5 154
gleydsonn 0:aa30225d7ed5 155 /*
gleydsonn 0:aa30225d7ed5 156 if(seta=='a'){
gleydsonn 0:aa30225d7ed5 157 direcao=-1;
gleydsonn 0:aa30225d7ed5 158 }else if(seta=='d'){
gleydsonn 0:aa30225d7ed5 159 direcao=1;
gleydsonn 0:aa30225d7ed5 160 }*/
gleydsonn 0:aa30225d7ed5 161
gleydsonn 0:aa30225d7ed5 162 if(direcao!=0){
gleydsonn 0:aa30225d7ed5 163 if((colunaPlataforma+direcao)<colunas-7 && (colunaPlataforma+direcao)>1){
gleydsonn 0:aa30225d7ed5 164 ctrl.SetCursor(0, linhaPlataforma);
gleydsonn 0:aa30225d7ed5 165 ctrl.EraseLine ();
gleydsonn 0:aa30225d7ed5 166 colunaPlataforma+=direcao;
gleydsonn 0:aa30225d7ed5 167 ctrl.PrintAt(colunaPlataforma, linhaPlataforma,"┌──────┐");
gleydsonn 0:aa30225d7ed5 168 }
gleydsonn 0:aa30225d7ed5 169 }
gleydsonn 0:aa30225d7ed5 170 }
gleydsonn 0:aa30225d7ed5 171
gleydsonn 0:aa30225d7ed5 172 }
gleydsonn 0:aa30225d7ed5 173
gleydsonn 0:aa30225d7ed5 174
gleydsonn 0:aa30225d7ed5 175 int main() {
gleydsonn 0:aa30225d7ed5 176 memset(blocos, 0, sizeof(int)*linhas*colunas);
gleydsonn 0:aa30225d7ed5 177
gleydsonn 0:aa30225d7ed5 178 pcEstagio.baud(115200);
gleydsonn 0:aa30225d7ed5 179 desenhaEstagio();
gleydsonn 0:aa30225d7ed5 180 Thread t2(moverPlataforma);
gleydsonn 0:aa30225d7ed5 181
gleydsonn 0:aa30225d7ed5 182 while(true){
gleydsonn 0:aa30225d7ed5 183 if(NumBlocos==0){
gleydsonn 0:aa30225d7ed5 184 desenhaEstagio();
gleydsonn 0:aa30225d7ed5 185 velocidade = 250*0.5;
gleydsonn 0:aa30225d7ed5 186 }
gleydsonn 0:aa30225d7ed5 187 moverBola();
gleydsonn 0:aa30225d7ed5 188 }
gleydsonn 0:aa30225d7ed5 189
gleydsonn 0:aa30225d7ed5 190 }