From 5f22527127b588c9398ce009b0e97444208edf2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Regatieri?= Date: Tue, 15 May 2018 19:23:31 -0300 Subject: [PATCH 01/10] Add int qntd to tipo_lista --- main.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/main.cpp b/main.cpp index 947740c..9aa29ad 100644 --- a/main.cpp +++ b/main.cpp @@ -23,6 +23,7 @@ typedef struct tipo_item{ }item; typedef struct tipo_lista{ + int qntd; struct tipo_item item[TAM]; }mesa; @@ -80,6 +81,7 @@ string obter_cor(int atual){ //essa função retorna uma constante que contém u void prepara_mesa(mesa* m){ //função usada para preencher a mesa com cores aleatórias e posições da região de um item srand(time(NULL)); + m->qntd = TAM; for(int i=0; iitem[i].cor = obter_cor(rand()%5); m->item[i].acima = obter_acima(i); @@ -155,6 +157,7 @@ void remove_itens(mesa* m, int posicao, int flag){ //função utilizada para rem if(cor_atual != VAZIO) { if (flag) { + m->qntd--; m->item[posicao].cor = VAZIO; } if (cor_atual == m->item[m->item[posicao].acima].cor) { From abb7f8dcfb74f7c8567ae1f522d528a58fd7f244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Regatieri?= Date: Fri, 18 May 2018 22:49:14 -0300 Subject: [PATCH 02/10] Add difficulty change option && update main loop breaker --- main.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/main.cpp b/main.cpp index 9aa29ad..d592a98 100644 --- a/main.cpp +++ b/main.cpp @@ -79,11 +79,24 @@ string obter_cor(int atual){ //essa função retorna uma constante que contém u } } -void prepara_mesa(mesa* m){ //função usada para preencher a mesa com cores aleatórias e posições da região de um item +int definir_dificuldade(int dificuldade){ //retorna o número de cores que vão estar presente na mesa dependendo da escolha do jogador + switch(dificuldade){ + case 1: + return 3; + case 2: + return 4; + case 3: + return 5; + default: + return 0; + } +} + +void prepara_mesa(mesa* m, int dificuldade){ //função usada para preencher a mesa com cores aleatórias e posições da região de um item srand(time(NULL)); m->qntd = TAM; for(int i=0; iitem[i].cor = obter_cor(rand()%5); + m->item[i].cor = obter_cor(rand()%dificuldade); m->item[i].acima = obter_acima(i); m->item[i].abaixo = obter_abaixo(i); m->item[i].esq = obter_esq(i); @@ -182,9 +195,18 @@ void remove_itens(mesa* m, int posicao, int flag){ //função utilizada para rem int main(){ mesa Jogo; - int linha=0, coluna=0; + int linha = 0, coluna = 0; + int dificuldade = 0; + + while(dificuldade == 0){ + system("clear"); + cout << "Escolha a dificuldade do jogo:" << endl; + cout << "[1] Facil\n[2] Medio\n[3] Dificil" << endl; + cin >> dificuldade; + dificuldade = definir_dificuldade(dificuldade); + } - prepara_mesa(&Jogo); + prepara_mesa(&Jogo, dificuldade); mostra_mesa(&Jogo); do{ @@ -196,5 +218,5 @@ int main(){ reorganiza_coluna(&Jogo); system("clear"); mostra_mesa(&Jogo); - }while(linha >= 0 && coluna >=0); + }while(Jogo.qntd > 0); } \ No newline at end of file From 900f0bbed970721912731a2ff9c8c7dadee1051a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Regatieri?= Date: Mon, 21 May 2018 22:36:33 -0300 Subject: [PATCH 03/10] Add function mesa_vazia() --- main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index d592a98..f1a744e 100644 --- a/main.cpp +++ b/main.cpp @@ -92,6 +92,10 @@ int definir_dificuldade(int dificuldade){ //retorna o número de cores que vão } } +int mesa_vazia(mesa* m){ + return m->qntd == 0; +} + void prepara_mesa(mesa* m, int dificuldade){ //função usada para preencher a mesa com cores aleatórias e posições da região de um item srand(time(NULL)); m->qntd = TAM; @@ -218,5 +222,5 @@ int main(){ reorganiza_coluna(&Jogo); system("clear"); mostra_mesa(&Jogo); - }while(Jogo.qntd > 0); + }while(!mesa_vazia(&Jogo)); } \ No newline at end of file From 1197d8eacc6bb2d0d3819ad0054410b916eec9a4 Mon Sep 17 00:00:00 2001 From: LFMP Date: Tue, 22 May 2018 11:33:23 -0300 Subject: [PATCH 04/10] add perdeu function with bugs --- main.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/main.cpp b/main.cpp index f1a744e..07a42cc 100644 --- a/main.cpp +++ b/main.cpp @@ -196,6 +196,29 @@ void remove_itens(mesa* m, int posicao, int flag){ //função utilizada para rem } } +int perdeu(mesa *m, int posicao, int dificuldade, int flag){ + string cor_atual = m->item[posicao].cor; + if (m->qntd <= dificuldade*4 && cor_atual != VAZIO){ + if (cor_atual == m->item[m->item[posicao].acima].cor) { + flag = 0; + perdeu(m, m->item[posicao].acima, dificuldade, flag); + } + if (cor_atual == m->item[m->item[posicao].abaixo].cor) { + flag = 0; + perdeu(m, m->item[posicao].abaixo, dificuldade, flag); + } + if (cor_atual == m->item[m->item[posicao].esq].cor) { + flag = 0; + perdeu(m, m->item[posicao].esq, dificuldade, flag); + } + if (cor_atual == m->item[m->item[posicao].dir].cor) { + flag = 0; + perdeu(m, m->item[posicao].dir, dificuldade, flag); + } + return flag; + } + return 1; +} int main(){ mesa Jogo; @@ -218,9 +241,16 @@ int main(){ cin >> linha; cout << "Coluna: "; cin >> coluna; + if (linha > MAX_LIN || coluna > MAX_COL){ + continue; + } remove_itens(&Jogo, obter_posicao(coluna, linha), 0); reorganiza_coluna(&Jogo); system("clear"); mostra_mesa(&Jogo); + if(!perdeu(&Jogo, obter_posicao(coluna, linha), dificuldade, 0)){ + cout << "PERDEU!\nHAHA OTÁRIO!" < Date: Tue, 22 May 2018 22:05:18 -0300 Subject: [PATCH 05/10] Add perdeu() and jogadas --- main.cpp | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/main.cpp b/main.cpp index 07a42cc..6f117b5 100644 --- a/main.cpp +++ b/main.cpp @@ -220,10 +220,32 @@ int perdeu(mesa *m, int posicao, int dificuldade, int flag){ return 1; } +int perdeu(mesa* m){ + int posicao; + + for(int linha=0; linhaitem[posicao].cor == VAZIO) + continue; + if(m->item[posicao].cor == m->item[m->item[posicao].acima].cor) + return 0; + if(m->item[posicao].cor == m->item[m->item[posicao].abaixo].cor) + return 0; + if(m->item[posicao].cor == m->item[m->item[posicao].esq].cor) + return 0; + if(m->item[posicao].cor == m->item[m->item[posicao].dir].cor) + return 0; + } + } + return 1; +} + int main(){ mesa Jogo; int linha = 0, coluna = 0; int dificuldade = 0; + int jogadas = 0; while(dificuldade == 0){ system("clear"); @@ -241,16 +263,19 @@ int main(){ cin >> linha; cout << "Coluna: "; cin >> coluna; - if (linha > MAX_LIN || coluna > MAX_COL){ + if(linha > MAX_LIN || coluna > MAX_COL) continue; - } remove_itens(&Jogo, obter_posicao(coluna, linha), 0); reorganiza_coluna(&Jogo); system("clear"); mostra_mesa(&Jogo); - if(!perdeu(&Jogo, obter_posicao(coluna, linha), dificuldade, 0)){ - cout << "PERDEU!\nHAHA OTÁRIO!" < Date: Tue, 22 May 2018 22:24:32 -0300 Subject: [PATCH 06/10] Add tempo de jogo --- main.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index 6f117b5..c0cddbb 100644 --- a/main.cpp +++ b/main.cpp @@ -245,7 +245,7 @@ int main(){ mesa Jogo; int linha = 0, coluna = 0; int dificuldade = 0; - int jogadas = 0; + int jogadas = 0, time_ini, time_fim; while(dificuldade == 0){ system("clear"); @@ -256,7 +256,8 @@ int main(){ } prepara_mesa(&Jogo, dificuldade); - mostra_mesa(&Jogo); + mostra_mesa(&Jogo); + time_ini = time(NULL); do{ cout << "Linha: "; @@ -271,11 +272,13 @@ int main(){ mostra_mesa(&Jogo); jogadas++; }while(!mesa_vazia(&Jogo) && !perdeu(&Jogo)); + time_fim = time(NULL); if(mesa_vazia(&Jogo)) cout << "\033[1;32m\nVOCÊ GANHOU! PARABÉNS!" << NORMAL << endl; else cout << "\033[1;31m\nVOCÊ PERDEU! MAIS SORTE NA PRÓXIMA!" << NORMAL << endl; - cout << "\nESTATÍSTICAS: " << endl << "Jogadas: " << jogadas; + cout << "\nESTATÍSTICAS: " << endl << "Jogadas: " << jogadas << endl; + cout << "Tempo de jogo: " << ((time_fim - time_ini)%3600)/60 << "min:" << ((time_fim - time_ini)%3600)%60 << "seg" << endl; } \ No newline at end of file From e37f94833f328ef8b1ac109674c0f97b0fb77f11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Regatieri?= Date: Wed, 23 May 2018 08:44:01 -0300 Subject: [PATCH 07/10] Small bug fixes --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index c0cddbb..500ab74 100644 --- a/main.cpp +++ b/main.cpp @@ -264,7 +264,7 @@ int main(){ cin >> linha; cout << "Coluna: "; cin >> coluna; - if(linha > MAX_LIN || coluna > MAX_COL) + if(linha >= MAX_LIN || coluna >= MAX_COL) continue; remove_itens(&Jogo, obter_posicao(coluna, linha), 0); reorganiza_coluna(&Jogo); From 19d11f756a1d60630ce6fb1b887b48ac94cc6b71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Regatieri?= Date: Wed, 23 May 2018 21:18:04 -0300 Subject: [PATCH 08/10] Remove perdeu() recursiva --- main.cpp | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/main.cpp b/main.cpp index 500ab74..4bfb6ab 100644 --- a/main.cpp +++ b/main.cpp @@ -196,30 +196,6 @@ void remove_itens(mesa* m, int posicao, int flag){ //função utilizada para rem } } -int perdeu(mesa *m, int posicao, int dificuldade, int flag){ - string cor_atual = m->item[posicao].cor; - if (m->qntd <= dificuldade*4 && cor_atual != VAZIO){ - if (cor_atual == m->item[m->item[posicao].acima].cor) { - flag = 0; - perdeu(m, m->item[posicao].acima, dificuldade, flag); - } - if (cor_atual == m->item[m->item[posicao].abaixo].cor) { - flag = 0; - perdeu(m, m->item[posicao].abaixo, dificuldade, flag); - } - if (cor_atual == m->item[m->item[posicao].esq].cor) { - flag = 0; - perdeu(m, m->item[posicao].esq, dificuldade, flag); - } - if (cor_atual == m->item[m->item[posicao].dir].cor) { - flag = 0; - perdeu(m, m->item[posicao].dir, dificuldade, flag); - } - return flag; - } - return 1; -} - int perdeu(mesa* m){ int posicao; From 0a7d4dcf1fd0aae00e0cb72fd959633b19018e67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Regatieri?= Date: Thu, 24 May 2018 13:13:39 -0300 Subject: [PATCH 09/10] Bug fix when not entering int on Linha/Coluna --- main.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index 4bfb6ab..4b065c1 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -220,7 +221,7 @@ int perdeu(mesa* m){ int main(){ mesa Jogo; int linha = 0, coluna = 0; - int dificuldade = 0; + int dificuldade = 0, x; int jogadas = 0, time_ini, time_fim; while(dificuldade == 0){ @@ -237,9 +238,17 @@ int main(){ do{ cout << "Linha: "; - cin >> linha; + x = scanf("%d", &linha); + while(x != 1){ + __fpurge(stdin); + x = scanf("%d", &linha); + } cout << "Coluna: "; - cin >> coluna; + x = scanf("%d", &coluna); + while(x != 1){ + __fpurge(stdin); + x = scanf("%d", &coluna); + } if(linha >= MAX_LIN || coluna >= MAX_COL) continue; remove_itens(&Jogo, obter_posicao(coluna, linha), 0); From 62318fc4e88cc915c05cff4da672a54d98ede103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Regatieri?= Date: Thu, 24 May 2018 13:28:36 -0300 Subject: [PATCH 10/10] Bug fix when passing negative int on Linha/Coluna --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 4b065c1..5477095 100644 --- a/main.cpp +++ b/main.cpp @@ -249,7 +249,7 @@ int main(){ __fpurge(stdin); x = scanf("%d", &coluna); } - if(linha >= MAX_LIN || coluna >= MAX_COL) + if(linha >= MAX_LIN || coluna >= MAX_COL || linha < 0 || coluna < 0) continue; remove_itens(&Jogo, obter_posicao(coluna, linha), 0); reorganiza_coluna(&Jogo);