diff --git a/PI_labirinto.depend b/PI_labirinto.depend index 237c095..ee65aa1 100644 --- a/PI_labirinto.depend +++ b/PI_labirinto.depend @@ -19,7 +19,16 @@ -1586107124 source:c:\users\rafae\desktop\pi3_labirinto\main.cpp +1587950912 source:c:\users\rafae\desktop\pi3_labirinto\main.cpp + + + + + + + + +1587251872 source:c:\users\vitoria\desktop\pi3_labirinto\main.cpp diff --git a/PI_labirinto.layout b/PI_labirinto.layout index 05e5d22..66d6cc7 100644 --- a/PI_labirinto.layout +++ b/PI_labirinto.layout @@ -2,9 +2,9 @@ - + - + diff --git a/bin/Debug/PI_labirinto.exe b/bin/Debug/PI_labirinto.exe index 274a917..b1a5add 100644 Binary files a/bin/Debug/PI_labirinto.exe and b/bin/Debug/PI_labirinto.exe differ diff --git a/main.cpp b/main.cpp index dbd9f5d..b4c0ea5 100644 --- a/main.cpp +++ b/main.cpp @@ -10,32 +10,42 @@ using namespace std; struct matrizGame { - char caractere; //0 = ' '; 1 = 'X'; 2 = 206; 3 = 220; - int indice = 0; + char caractere; + int indice; }; -const int tm1 = 21, tm2 = 26, tm3 = 31, tm4 = 36, tm5 = 41, tmax = tm5; - -int posLinha; -int posColuna; -int posicaoI = 40, posicaoJ = 21; -matrizGame matriz5[tmax][tmax]; -matrizGame matriz4[tmax][tmax]; -matrizGame matriz3[tmax][tmax]; -matrizGame matriz2[tmax][tmax]; -matrizGame matriz1[tmax][tmax]; - -void cabecalho(int tamanho); -void rodape(int tamanho); -void bandeira(matrizGame marMax[][tmax],int tamanho); -void printMatriz(matrizGame matMax[][tmax], int tamanho); -void tela5(matrizGame matriz5[][tmax]); -void tela4(matrizGame matriz4[][tmax]); -void tela3(matrizGame matriz3[][tmax]); -void tela2(matrizGame matriz2[][tmax]); -void tela1(matrizGame matriz1[][tmax]); -void alteraPosicao(bool subir,bool descer, bool direita, bool esquerda); -void selectMatriz(int matriz); -void movimento(); +const int tm1 = 21, tm2 = 26, tm3 = 31, tm4 = 36, tm5 = 41, tmax = tm5; //tamanho da matriz +const int cEspaco = 32, cXis = 88, cBoneco = 206, cBandeira = 220, cSaida = 178; //numero referente a tabela ascii referente ao struct +const int iEspaco = 0, iXis = 1, iBoneco = 2, iBandeira = 3, iSaida = 4; //indici do struct + +int pI = 0, pJ = 0; //PI=linha e PJ=coluna + +bool nextMatriz = false; // Passa para proxima fase +bool iniciarJogo(); + +void cabecalho(int tamanho); // responsavel por dar espaço e escrever os numero do lado da matriz +void rodape(int tamanho); //escrever os numero do lado da matriz +void bandeira(matrizGame marMax[][tmax],int tamanho); //print bandeira +void printMatriz(matrizGame mtx[][tmax], int tamanho); //printa matriz + +// manipulacao de dados das matrizes +void tela5(matrizGame mtx[][tmax], int pI, int pJ); +void tela4(matrizGame mtx[][tmax], int pI, int pJ); +void tela3(matrizGame mtx[][tmax], int pI, int pJ); +void tela2(matrizGame mtx[][tmax], int pI, int pJ); +void tela1(matrizGame mtx[][tmax], int pI, int pJ); +void tuto1(matrizGame mtx[][tmax], int pI, int pJ); + +void alteraPosicao(bool subir,bool descer, bool direita, bool esquerda, matrizGame mtx[][tmax]);//testar posiçoes e fazer movimento +void selectMatriz(matrizGame mtx[tmax][tmax], int matriz, int pI, int pJ); //seleciona a matriz +void selectMovimento(matrizGame mtx[tmax][tmax], int matriz); //chamada dentro do roteiro +void movimento(matrizGame mtx[][tmax], int nMatriz); +void roteiro(matrizGame mtx[][tmax]); +bool testeSaida(matrizGame mtx [][tmax], int matriz); +void ajuda(); +void ajudaTutorial(); +void roteiroTuto(matrizGame mtx[][tmax]); +void ajuda(matrizGame mtx[][tmax], int pI, int pJ); +void ajudafixa(); int main() { @@ -43,15 +53,8 @@ int main() keybd_event(VK_RETURN,0x1C,0,0); keybd_event(VK_RETURN,0x1C,KEYEVENTF_KEYUP,0); keybd_event(VK_MENU,0x38,KEYEVENTF_KEYUP,0);*/ + iniciarJogo(); - int resposta = 5; - selectMatriz(resposta); - - do - { - movimento(); - } - while(resposta !=0); } void cabecalho(int tamanho) @@ -77,25 +80,27 @@ void rodape(int tamanho) } } -void bandeira(matrizGame matMax[][tmax], int tamanho) +void bandeira(matrizGame mtx[][tmax], int tamanho) { for(int linha = 0; linha < tamanho; linha++) { for(int coluna = 0; coluna < tamanho; coluna++) { - if ((matMax[linha][coluna].caractere == ' ') && ((matMax[linha][coluna+1].caractere == ' ' && - (matMax[linha-1][coluna].caractere == ' ' || matMax[linha+1][coluna].caractere == ' ')) || - (matMax[linha][coluna-1].caractere == ' ' && (matMax[linha-1][coluna].caractere == ' ' || - matMax[linha+1][coluna].caractere == ' ')))) + //testa as posiicoes se tem caminhos alternativos + if ((mtx[linha][coluna].indice == iEspaco) && ((mtx[linha][coluna+1].indice == iEspaco && + (mtx[linha-1][coluna].indice == iEspaco || mtx[linha+1][coluna].indice == iEspaco)) || + (mtx[linha][coluna-1].indice == iEspaco && (mtx[linha-1][coluna].indice == iEspaco || + mtx[linha+1][coluna].indice == iEspaco)))) { - matMax[linha][coluna].caractere = 220; - matMax[linha][coluna].indice = 3; + mtx[linha][coluna].caractere = cBandeira;//caracter recebe o numero relacionado ao bandeira declarado + mtx[linha][coluna].indice = iBandeira;//indice recebe o iBandeira declarados no cabecalho para testes internos } + } } } -void printMatriz(matrizGame matMax[][tmax], int tamanho) +void printMatriz(matrizGame mtx[][tmax], int tamanho) //printa a matriz { cabecalho(tamanho); for(int linha = 0; linha < tamanho; linha++) @@ -106,7 +111,7 @@ void printMatriz(matrizGame matMax[][tmax], int tamanho) cout << " "; for(int coluna = 0; coluna < tamanho; coluna++) { - cout << matMax[linha][coluna].caractere; + cout << mtx[linha][coluna].caractere; cout << " "; } cout << "_" << linha; @@ -114,47 +119,56 @@ void printMatriz(matrizGame matMax[][tmax], int tamanho) rodape(tamanho); } -void alteraPosicao(bool subir,bool descer, bool direita, bool esquerda) +void alteraPosicao(bool subir,bool descer, bool direita, bool esquerda, matrizGame mtx[][tmax]) { if(subir == true) { - while((matriz5[posicaoI][posicaoJ].indice != 3)){ - if((matriz5[posicaoI-1][posicaoJ].indice == 1)){ + while((mtx[pI][pJ].indice != iBandeira) && (mtx[pI][pJ].indice != iSaida)) + { + if((mtx[pI-1][pJ].indice == iXis)) + { break; } - posicaoI--; + pI--; } } else if(descer == true) { - while((matriz5[posicaoI][posicaoJ].indice != 3)){ - if((matriz5[posicaoI+1][posicaoJ].indice == 1)){ + while((mtx[pI][pJ].indice != iBandeira) && (mtx[pI][pJ].indice != iSaida)) + { + if((mtx[pI+1][pJ].indice == iXis)) + { break; } - posicaoI++; + pI++; } } else if(direita == true) { - while((matriz5[posicaoI][posicaoJ].indice != 3)){ - if((matriz5[posicaoI][posicaoJ+1].indice == 1)){ + while((mtx[pI][pJ].indice != iBandeira) && (mtx[pI][pJ].indice != iSaida)) + { + + if((mtx[pI][pJ+1].indice == iXis)) + { break; } - posicaoJ++; + pJ++; } } else if(esquerda == true) { - while((matriz5[posicaoI][posicaoJ].indice != 3)){ - if((matriz5[posicaoI][posicaoJ-1].indice == 1)){ + while((mtx[pI][pJ].indice != iBandeira) && (mtx[pI][pJ].indice != iSaida)) + { + if((mtx[pI][pJ-1].indice == iXis)) + { break; } - posicaoJ--; + pJ--; } } } -void tela5(matrizGame matriz5[][tmax]) +void tela5(matrizGame mtx[][tmax], int pI, int pJ) { for(int linha = 0; linha < tm5; linha++) @@ -162,18 +176,18 @@ void tela5(matrizGame matriz5[][tmax]) for(int coluna = 0; coluna < tm5; coluna++) { //rota principal - if ((coluna == tm1 && linha > tm1)||(coluna == 10 && linha > 20 && linha < 30)|| + if ((coluna == 21 && linha > 21)||(coluna == 10 && linha > 20 && linha < 30)|| (coluna == 16 && linha > 30 && linha < 35)||(coluna == 5 && linha < 34 && linha > 14)|| - (coluna == 28 && linha > 15 && linha < 38)||(coluna == tm4 && linha < 38 && linha > 9)|| - (coluna == 11 && linha < 10 && linha > 4)||(coluna == tm1 && linha < 5) || - (linha == tm1 && coluna > 10 && coluna <= tm1)||(linha == 30 && coluna >= 10 && coluna <= 16)|| + (coluna == 28 && linha > 15 && linha < 38)||(coluna == 36 && linha < 38 && linha > 9)|| + (coluna == 11 && linha < 10 && linha > 4)||(coluna == 21 && linha < 5) || + (linha == 21 && coluna > 10 && coluna <= 21)||(linha == 30 && coluna >= 10 && coluna <= 16)|| (linha == 34 && coluna < 16 && coluna > 4)||(linha == 15 && coluna > 5 && coluna <29)|| - (linha == 37 && coluna > 28 && coluna < tm4)||(linha == 10 && coluna < tm4 && coluna > 10)|| + (linha == 37 && coluna > 28 && coluna < 36)||(linha == 10 && coluna < 36 && coluna > 10)|| (linha == 5 && coluna > 11 && coluna < 22)) { - matriz5[linha][coluna].caractere = ' '; - matriz5[linha][coluna].indice = 0; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } //rotas alternativas @@ -192,181 +206,565 @@ void tela5(matrizGame matriz5[][tmax]) (coluna == 3 && linha < 21 && linha > 10) || (linha == 27 && coluna > 11 && coluna < 20) || (linha == 19 && coluna > 11 && coluna < 25) || (linha == 23 && coluna > 14 && coluna < 25) || (coluna == 12 && linha < 27 && linha > 19) || (coluna == 24 && linha < 23 && linha > 19) ) { - matriz5[linha][coluna].caractere = ' '; - matriz5[linha][coluna].indice = 0; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } else { - matriz5[linha][coluna].caractere = 'X'; - matriz5[linha][coluna].indice = 1; + mtx[linha][coluna].caractere = cXis; + mtx[linha][coluna].indice = iXis; } } } - matriz5[posicaoI][posicaoJ].caractere = 206; - matriz5[posicaoI][posicaoJ].indice = 2; - bandeira(matriz5,tm5); - printMatriz(matriz5,tm5); - Sleep(1000); + mtx[pI][pJ].caractere = cBoneco; + mtx[pI][pJ].indice = iBoneco; + if (mtx[0][21].indice != iBoneco) //coloca o boneco no centro da matriz + { + mtx[0][21].caractere = cSaida; //caracter recebe o numero relacionado ao saido do labirinto declarado + mtx[0][21].indice = iSaida; //indice recebe o iSaida declarados no cabecalho para testes internos + } + bandeira(mtx,tm5); } -void tela4(matrizGame matriz4[][tmax]) +void tela4(matrizGame mtx[][tmax], int pI, int pJ) { for(int linha = 0; linha < tm4; linha++) { for(int coluna = 0; coluna < tm4; coluna++) { - if (1==0) + if ( (linha == 9 && coluna >= 0 && coluna <= 8 )||(coluna == 8 && linha >= 9 && linha <= 16 )||(linha == 16 && coluna >= 8 && coluna <= 16) + ||(coluna == 16 && linha >= 12 && linha <= 16 )||(linha == 12 && coluna >= 16 && coluna <= 27)||(coluna == 27 && linha >= 12 && linha <= 22) + ||(linha == 22 && coluna >= 13 && coluna <= 27)||(coluna == 13 && linha >= 22 && linha <= 30 )||(linha == 30 && coluna >= 13 && coluna<= 31) + ||(coluna == 31 && linha >= 9 && linha <= 30 )||(linha == 9 && coluna >= 32 && coluna <=35) ||(coluna == 13 && linha >= 31 && linha <= 34) + ||(linha == 34 && coluna >= 2 && coluna <= 13 )||(coluna == 2 && linha >= 19 && linha <= 34) || (linha == 19 && coluna >= 2 && coluna <= 10 ) + ||(coluna == 27 && linha >= 23 && linha <= 27) || (linha == 27 && coluna >= 17 && coluna <= 26)||(coluna == 17&& linha >= 24 && linha <= 27 ) + ||(coluna == 27 && linha >= 5 && linha <= 12) || (linha == 5 && coluna >= 27 && coluna <= 34 ) || (coluna == 34 && linha >= 2 && linha <= 5) + ||(linha == 2 && coluna >= 24 && coluna <= 33) ||(coluna == 24 && linha >= 2 && linha <= 7) || (linha == 7 && coluna >= 20 && coluna <= 24) + ||(coluna == 16 && linha >= 5 && linha <= 11) || (linha == 5 && coluna >= 9 && coluna <= 16 )||(coluna == 9 && linha >= 2 && linha <=5) + ||(coluna == 10 && linha >= 19 && linha <= 27) || (linha == 27 && coluna >= 5 && coluna <= 10)||(coluna == 5 && linha >= 27 && linha <=31) + ||(coluna == 31 && linha >= 30 && linha <= 33) || (linha == 33 && coluna >= 13 && coluna <= 31)||(coluna == 22 && linha >= 13 && linha <= 19) + ||(linha == 19 && coluna >=14 && coluna <= 22) + ) { - matriz4[linha][coluna].caractere = ' '; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } else if (1==0) { - matriz4[linha][coluna].caractere = ' '; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } else { - matriz4[linha][coluna].caractere = 'X'; + mtx[linha][coluna].caractere = cXis; + mtx[linha][coluna].indice = iXis; } } } - bandeira(matriz4,tm4); - printMatriz(matriz4,tm4); + mtx[pI][pJ].caractere = cBoneco; + mtx[pI][pJ].indice = iBoneco; + if (mtx[9][35].indice != iBoneco) //coloca o boneco no centro da matriz + { + mtx[9][35].caractere = cSaida; //caracter recebe o numero relacionado ao saido do labirinto declarado + mtx[9][35].indice = iSaida; //indice recebe o iSaida declarados no cabecalho para testes internos + } + bandeira(mtx,tm4); } -void tela3(matrizGame matriz3[][tmax]) +void tela3(matrizGame mtx[][tmax], int pI, int pJ) { for(int linha = 0; linha < tm3; linha++) { for(int coluna = 0; coluna < tm3; coluna++) { - if (1==0) + if ( (coluna >= 0 && coluna <= 7 && linha == 3 )||(coluna == 7 && linha >= 3 && linha <= 8 )||(coluna <= 7 && coluna >= 2 && linha == 8 ) + ||(coluna == 2 && linha >= 6 && linha <= 8 )||(coluna == 7 && linha >= 8 && linha <= 15 )||(coluna >= 2 && coluna <= 7 && linha == 15 ) + ||(coluna == 2 && linha >= 15 && linha <= 28 )||(linha == 28 && coluna >= 2 && coluna <= 13 )||(coluna == 13 && linha >= 18 && linha <= 28 ) + ||(linha == 18 && coluna >= 4 && coluna <= 12 )||(coluna == 4 && linha >= 18 && linha <= 25 )||(linha == 25 && coluna >= 4 && coluna <= 10 ) + ||(coluna == 10 && linha >= 21 && linha <= 25 )||(linha == 21 && coluna >= 10 && coluna <= 26 )||(coluna == 7 && linha >= 21 && linha <= 23 ) + ||(linha == 23 && coluna >= 7 && coluna <= 8 )||(linha == 21 && coluna >= 7 && coluna <= 10 )||(linha == 3 && coluna >= 7 && coluna <= 28 ) + ||(coluna == 28 && linha >= 3 && linha <= 5 )||(linha == 5 && coluna >= 11 && coluna <= 28 )||(coluna == 11 && linha >= 5 && linha <= 9 ) + ||(linha == 9 && coluna >= 11 && coluna <= 30 )||(linha == 12 && coluna >= 11 && coluna <= 27 )||(coluna == 11 && linha >= 9 && linha <= 12 ) + ||(coluna == 27 && linha >= 12 && linha <= 15 )||(linha == 15 && coluna >= 15 && coluna <= 27 )||(coluna == 15 && linha >= 15 && linha <= 20 ) + ||(coluna == 26 && linha >= 21 && linha <= 24 )||(linha == 24 && coluna >= 17 && coluna <= 26 )||(coluna == 11 && linha >= 10 && linha <= 15 ) + ||(linha == 15 && coluna >= 9 && coluna <= 11 )||(coluna == 9 && linha >= 13 && linha <=15 )||(coluna == 20 && linha >= 16 && linha <=18 ) + ||(linha == 18 && coluna >= 20 && coluna <= 26)||(coluna == 17 && linha >=25 && linha <= 30 ) + + ) { - matriz3[linha][coluna].caractere = ' '; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } else if (1==0) { - matriz3[linha][coluna].caractere = ' '; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } else { - matriz3[linha][coluna].caractere = 'X'; + mtx[linha][coluna].caractere = cXis; + mtx[linha][coluna].indice = iXis; } } } - bandeira(matriz4,tm4); - printMatriz(matriz3,tm3); + mtx[pI][pJ].caractere = cBoneco; + mtx[pI][pJ].indice = iBoneco; + if (mtx[9][30].indice != iBoneco) //coloca o boneco no centro da matriz + { + mtx[9][30].caractere = cSaida; //caracter recebe o numero relacionado ao saido do labirinto declarado + mtx[9][30].indice = iSaida; //indice recebe o iSaida declarados no cabecalho para testes internos + } + if (mtx[30][17].indice != iBoneco) //coloca o boneco no centro da matriz + { + mtx[30][17].caractere = cSaida; //caracter recebe o numero relacionado ao saido do labirinto declarado + mtx[30][17].indice = iSaida; //indice recebe o iSaida declarados no cabecalho para testes internos + } + bandeira(mtx,tm3); } -void tela2(matrizGame matriz2[][tmax]) +void tela2(matrizGame mtx[][tmax], int pI, int pJ) { for(int linha = 0; linha < tm2; linha++) { for(int coluna = 0; coluna < tm2; coluna++) { - if (1==0) + if ((coluna > 4 && coluna < 16 && linha == 20)||(coluna == 15 && linha > 20)|| + (coluna > 4 && coluna < 20 && linha == 16)||(coluna > 13 && coluna < 19 && linha == 11)|| + (coluna == 5 && linha < 20 && linha > 16)||(coluna == 19 && linha < 16 && linha > 10)|| + (coluna > 11 && coluna < 14 && linha == 14)||(coluna == 13 && linha < 14 && linha > 10)|| + (coluna < 14 && coluna > 1 && linha == 14)||(coluna < 5 && coluna > 1 && linha == 4)|| + (coluna < 20 && coluna > 9 && linha == 6)||(coluna == 4 && linha < 10 && linha > 3 )|| + (coluna < 20 && coluna > 9 && linha == 2)||(coluna == 2 && linha < 14 && linha > 4)|| + (coluna == 2 && linha > 3 && linha < 10)||(coluna == 10 && linha > 10 && linha < 6)|| + (coluna > 3 && coluna < 20 && linha == 9)||(coluna == 19 && linha < 10 && linha > 5)|| + (coluna == 10 && linha < 6 && linha > 2)||(coluna == 19 && linha < 2)) { - matriz2[linha][coluna].caractere = ' '; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } - else if (1==0) + else if ((coluna > 19 && coluna < 23 && linha == 14)||(coluna == 23 && linha > 13 && linha < 23)|| + (coluna < 24 && coluna > 19 && linha == 22)||(coluna == 20 && linha > 17 && linha < 23)|| + (coluna < 21 && coluna > 6 && linha == 18)||(coluna > 0 && coluna < 15 && linha == 23)|| + (coluna == 1 && linha > 16 && linha < 24)||(coluna > 2 && coluna < 12 && linha == 14)|| + (coluna < 7 && coluna > 1 && linha == 2)||(coluna == 7 && linha > 1 && linha < 9)|| + (coluna > 2 && coluna < 12 && linha == 12)||(coluna == 23 && linha < 14 && linha >3)|| + (coluna > 12 && coluna < 23 && linha == 4)) { - matriz2[linha][coluna].caractere = ' '; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } else { - matriz2[linha][coluna].caractere = 'X'; + mtx[linha][coluna].caractere = cXis; + mtx[linha][coluna].indice = iXis; } } } - bandeira(matriz4,tm4); - printMatriz(matriz2,tm2); + mtx[pI][pJ].caractere = cBoneco; + mtx[pI][pJ].indice = iBoneco; + if (mtx[0][19].indice != iBoneco) //coloca o boneco no centro da matriz + { + mtx[0][19].caractere = cSaida; //caracter recebe o numero relacionado ao saido do labirinto declarado + mtx[0][19].indice = iSaida; //indice recebe o iSaida declarados no cabecalho para testes internos + } + bandeira(mtx,tm2); } -void tela1(matrizGame matriz1[][tmax]) +void tela1(matrizGame mtx[][tmax], int pI, int pJ) { for(int linha = 0; linha < tm1; linha++) { for(int coluna = 0; coluna < tm1; coluna++) { - if (1==0) + if ((coluna == 10 && linha > 16)||(coluna >= 10 && coluna <=15 && linha == 16)|| + (coluna == 15 && linha > 9 && linha < 16)||(coluna > 4 && coluna < 15 && linha == 10)|| + (coluna == 5 && linha < 10 && linha > 3)||(coluna >= 5 && coluna < 17 && linha == 4)|| + (coluna == 16 && linha < 4)) { - matriz1[linha][coluna].caractere = ' '; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } - else if (1==0) + else if ((coluna <= 10 && coluna >= 2 && linha == 16)||(coluna == 2 && linha > 16 && linha <=10)|| + (coluna == 8 && linha > 4 && linha < 8)||(coluna >= 8 && coluna <= 18 && linha == 7)|| + (coluna == 2 && linha < 16 && linha > 4)||(coluna > 7 && coluna < 13 && linha == 13)|| + (coluna == 8 && linha > 10 && linha < 13)||(coluna == 13 && linha > 0 && linha < 4)|| + (coluna > 2 && coluna < 13 && linha == 1)||(coluna == 18 && linha > 7 &&linha < 19)|| + (coluna < 18 && coluna > 13 && linha == 18)) { - matriz1[linha][coluna].caractere = ' '; + mtx[linha][coluna].caractere = cEspaco; + mtx[linha][coluna].indice = iEspaco; } else { - matriz1[linha][coluna].caractere = 'X'; + mtx[linha][coluna].caractere = cXis; + mtx[linha][coluna].indice = iXis; } } } - bandeira(matriz4,tm4); - printMatriz(matriz1,tm1); + mtx[pI][pJ].caractere = cBoneco; + mtx[pI][pJ].indice = iBoneco; + if (mtx[0][16].indice != iBoneco) //coloca o boneco no centro da matriz + { + mtx[0][16].caractere = cSaida; //caracter recebe o numero relacionado ao saido do labirinto declarado + mtx[0][16].indice = iSaida; //indice recebe o iSaida declarados no cabecalho para testes internos + } + bandeira(mtx,tm1); } -void selectMatriz(int matriz) +void tuto1(matrizGame mtx[][tmax], int pI, int pJ) { + //desenho da trilha + for(int linha = 0; linha < tm1; linha++) + { + for(int coluna = 0; coluna < tm1; coluna++) + { + if ((linha > 17 && coluna == 10) || (linha == 18 && coluna > 0 && coluna < 10) || (coluna == 1 && linha > 0 && linha < 18) || + (linha == 1 && coluna > 0 && coluna < 20) || (coluna == 19 && linha > 0 && linha < 15) || (linha == 14 && coluna < 19 && coluna > 4) || + (coluna == 5 && linha > 4 && linha < 14) || (linha == 5 && coluna > 5 && coluna < 16) || (coluna == 15 && linha > 5 && linha < 11) || + ( linha == 10 && coluna > 9 && coluna < 15)) + { + mtx[linha][coluna].caractere = cEspaco; //caracter recebe o numero relacionado ao espaço declarado + mtx[linha][coluna].indice = iEspaco; //indice recebe o iEsoaco declarados no cabecalho para testes internos + } + else + { + mtx[linha][coluna].caractere = cXis; //caracter recebe o numero relacionado ao 'X' declarado + mtx[linha][coluna].indice = iXis; //indice recebe o iXis declarados no cabecalho para testes internos + } + } + } + mtx[pI][pJ].caractere = cBoneco; //caracter recebe o numero relacionado ao boneco declarado + mtx[pI][pJ].indice = iBoneco; //indice recebe o iBoneco declarados no cabecalho para testes internos + if (mtx[10][10].indice != iBoneco) //coloca o boneco no centro da matriz + { + mtx[10][10].caractere = cSaida; //caracter recebe o numero relacionado ao saido do labirinto declarado + mtx[10][10].indice = iSaida; //indice recebe o iSaida declarados no cabecalho para testes internos + } + bandeira(mtx,tm1); +} +void selectMatriz(matrizGame mtx[][tmax], int matriz, int pI, int pJ) +{ + //escolha da matriz switch(matriz) { case 1: - tela1(matriz1); + tela1(mtx, pI, pJ); + printMatriz(mtx,tm1); break; case 2: - tela2(matriz2); + tela2(mtx, pI, pJ); + printMatriz(mtx,tm2); break; case 3: - tela3(matriz3); + tela3(mtx, pI, pJ); + printMatriz(mtx,tm3); break; case 4: - tela4(matriz4); + tela4(mtx, pI, pJ); + printMatriz(mtx,tm4); break; case 5: - tela5(matriz5); + tela5(mtx, pI, pJ); + printMatriz(mtx,tm5); + break; + case 6: + ajudafixa(); + tuto1(mtx, pI, pJ); + printMatriz(mtx,tm1); + } + //Sleep(500); + nextMatriz = testeSaida(mtx,matriz); } -void movimento() +bool testeSaida(matrizGame mtx [][tmax], int matriz) { - char direcao[40]; - cout << "\n\nPara qual direcao deseja ir? "; + switch(matriz) + { + + case 1: + if (mtx[0][16].indice == iBoneco) + { + return true; + } + break; + case 2: + if (mtx[0][19].indice == iBoneco) // POSIÇAO DE SAIDA + { + return true; + } + break; + case 3: + if (mtx[9][30].indice == iBoneco || mtx[30][17].indice == iBoneco) // POSIÇAO DE SAIDA + { + return true; + } + break; + case 4: + if (mtx[9][35].indice == iBoneco) // POSIÇAO DE SAIDA + { + return true; + } + break; + case 5: + if (mtx[0][21].indice == iBoneco) // POSIÇAO DE SAIDA + { + return true; + } + break; + case 6: + if (mtx[10][10].indice == iBoneco) // POSIÇAO DE SAIDA + { + return true; + } + break; + } + return false; +} + +void selectMovimento(matrizGame mtx[][tmax], int matriz) +{ + + do + { + switch(matriz) + { + case 1: + movimento(mtx,1); + break; + case 2: + movimento(mtx,2); + break; + case 3: + movimento(mtx,3); + break; + case 4: + movimento(mtx,4); + break; + case 5: + movimento(mtx,5); + break; + case 6: + movimento(mtx,6); + break; + } + if (nextMatriz) + { + nextMatriz = false; + return; + } + } + while(matriz != -1); +} + +void movimento(matrizGame mtx[][tmax], int nMatriz) +{ + char direcao[40]; + cout << "\n\n\t\t Para qual direcao deseja ir? "; fflush(stdin); gets(direcao); - for(int i = 0; i < strlen(direcao); i++) + int n = strlen(direcao); + for(int i = 0; i < n; i++) { - if (direcao[i] == 119) //para cima + if (direcao[i] == 119) //para cima 'W' { system("CLS"); - alteraPosicao(1,0,0,0); - tela5(matriz5); + alteraPosicao(1,0,0,0, mtx); + selectMatriz(mtx, nMatriz,pI, pJ); } - else if (direcao[i] == 100) //para direita + else if (direcao[i] == 100) //para direita 'D' { system("CLS"); - alteraPosicao(0,0,1,0); - tela5(matriz5); + alteraPosicao(0,0,1,0, mtx); + selectMatriz(mtx, nMatriz,pI, pJ); } - else if (direcao[i] == 115) //para baixo + else if (direcao[i] == 115) //para baixo 'S' { system("CLS"); - alteraPosicao(0,1,0,0); - tela5(matriz5); + alteraPosicao(0,1,0,0, mtx); + selectMatriz(mtx, nMatriz,pI, pJ); } - else if (direcao[i] == 97) //para esqueda + else if (direcao[i] == 97) //para esqueda 'A' { system("CLS"); - alteraPosicao(0,0,0,1); - tela5(matriz5); + alteraPosicao(0,0,0,1, mtx); + selectMatriz(mtx, nMatriz,pI, pJ); + } + } +} + +void roteiro(matrizGame mtx[][tmax]) +{ + int matriz; + //trata-se de uma matriz + //inicio + matriz = 1; + pI = 20; + pJ = 10; + selectMatriz(mtx, matriz, pI, pJ); + selectMovimento(mtx, matriz); + cout << "\n\n"; + system("pause"); + system("CLS"); + //fim + matriz = 2; + pI = 25; + pJ = 15; + selectMatriz(mtx, matriz, pI, pJ); + selectMovimento(mtx, matriz); + cout << "\n\n"; + system("pause"); + system("CLS"); + matriz = 3; + pI = 3; + pJ = 0; + selectMatriz(mtx, matriz, pI, pJ); + selectMovimento(mtx, matriz); + cout << "\n\n"; + system("pause"); + system("CLS"); + matriz = 4; + pI = 9; + pJ = 0; + selectMatriz(mtx, matriz, pI, pJ); + selectMovimento(mtx, matriz); + cout << "\n\n"; + system("pause"); + system("CLS"); + matriz = 5; + pI = 40; + pJ = 21; + selectMatriz(mtx, matriz, pI, pJ); + selectMovimento(mtx, matriz); + cout << "\n\n"; + system("pause"); + system("CLS"); +} + +void ajuda() +{ + cout << "\n\n\n\t\tBem vindo ao Game do Labirinto.\n\n"; + system("pause"); + system("cls"); + cout << "\n\n\t\tVoce ira aprender como caminhar pelo nosso labirinto.\n\n"; + cout << "Voce deve usar as teclas W;A;S e D \npara se locomover respectivamente para cima,\nesquerda, baixo e direita.\n\n"; + cout << "Seu objetivo sera digitar uma sequencia de \nteclas que ajude o boneco a chegar ao centro do Labirinto.\n\n"; + cout << "Voce deve lembrar o boneco se locomove \nde ponto a ponto, so basta 1 comando \npara que ele chegue ate o proximo ponto.\nApos terminar de digitar a sequencia\nde movimentos desejada aperte enter para prosseguir.\n\n"; + system("pause"); + system("cls"); +} + +void ajudafixa() +{ + + cout << "\n\n\t\tVoce ira aprender como caminhar pelo nosso labirinto.\n"; + cout << "\n\tVoce deve usar as teclas W;A;S e D para se locomover respectivamente para cima,\n\tesquerda, baixo e direita."; + cout << "\n\tSeu objetivo sera digitar uma sequencia de teclas que ajude o boneco a chegar ao centro do Labirinto."; + cout << "\n\tVoce deve lembrar o boneco se locomove de ponto a ponto, so basta 1 comando \n\tpara que ele chegue ate o proximo ponto.\n\tApos terminar de digitar a sequencia\n\tde movimentos desejada aperte enter para prosseguir.\n"; + +} + +void roteiroTuto(matrizGame mtx[][tmax]) +{ + int matriz = 6; + pI = 20; + pJ = 10; + selectMatriz(mtx, matriz, pI, pJ); + selectMovimento(mtx, matriz); + cout << "\n\n"; + nextMatriz = testeSaida(mtx,matriz); + system("pause"); +} + +void ajuda(matrizGame mtx[][tmax], int pI, int pJ) +{ + while (1) + { + if(mtx[10][15].indice == iBoneco) + { + cout << "\n\n\n\t\t --------------------------------"; + cout << "\n\t\t | voce chegou muito perto!!! |"; + cout << "\n\t\t | Digite a sequencia completa: |"; + cout << "\n\t\t -------------------------------- \n\n"; + system("pause"); + break; + } + else if(mtx[14][19].indice == iBoneco) + { + cout << "\n\n\n\t\t --------------------------------"; + cout << "\n\t\t | voce esta na metade!!! |"; + cout << "\n\t\t | Digite a sequencia completa: |"; + cout << "\n\t\t --------------------------------\n\n"; + system("pause"); + break; } else { + cout << "\n\n\n\t\t ------------------------------------------"; + cout << "\n\t\t |O boneco nao conceguiu chegar ao centro:|"; + cout << "\n\t\t | Digite a sequencia completa: |"; + cout << "\n\t\t ------------------------------------------\n\n"; + system("pause"); + break; + } + } +} + +bool iniciarJogo() +{ + int op; + matrizGame mtx[tmax][tmax]; + + while (1) + { + cout << "\n\n\t 1-Iniciar jogo\n"; + cout << "\t 2-Tutorial\n"; + cout << "\t 3-Ajuda\n"; + cout << "\t 4-Sair\n\n\t "; + cin >> op; + + + if (op > 0 && op < 5) + { + if (op == 1) + { + system("CLS"); + roteiro(mtx); + break; + } + if (op == 2) + { + system("CLS"); + roteiroTuto(mtx); + system("CLS"); + iniciarJogo(); + break; + } + if (op == 3) + { + system("CLS"); + ajuda(); + system("CLS"); + iniciarJogo(); + break; + } + if (op == 4) + { + return 0; + } + } + else + { + cout << "\t Escolha uma opcao valida\n\n\n\n"; + system("pause"); system("CLS"); - alteraPosicao(0,0,0,0); - tela5(matriz5); + iniciarJogo(); } } + return 0; } + diff --git a/obj/Debug/main.o b/obj/Debug/main.o index 8a08935..65c8a95 100644 Binary files a/obj/Debug/main.o and b/obj/Debug/main.o differ