Ir para conteúdo
Fórum Script Brasil

navarroc

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre navarroc

navarroc's Achievements

0

Reputação

  1. Olá! Recentemente tive que começar a fazer um trabalho da faculdade em C++, e escolhi fazer um jogo de campo minado. Até agora, montei em código apenas o tabuleiro, mas há um problema com ele que não consigo resolver. Utilizei apenas a lógica bruta para fazê-lo, sem nenhuma técnica sofisticada de programação, dada a minha limitação em C++; procurarei melhorar isso, se der tempo. Mas o problema é o seguinte: o código funciona perfeitamente se não for orientado a objetos, ou seja, sem o uso de classes. O tabuleiro é impresso direitinho. Quando utilizo o mesmo código com classes, fazendo, é claro, as adaptações necessárias, ele simplesmente não funciona. Um monte de símbolos esquisitos aparecem no lugar dos 1s, 2s, Bs... Preciso urgentemente de ajuda! O trabalho é para semana que vem. Estou perdidoooo! Seguem os códigos abaixo. Um está orientado a objetos, e o outro não. Podem testar se quiserem. Apesar de serem iguais, coloquei os dois para não dar trabalho de transformar um em outro. Aguardo notícias de alguém, se puderem me ajudar... OO: #include <iostream> using namespace std; class tabuleiro { void analisar_proximo(int proximo, int m, int n, int b ); void analisar_adjacentes(int j, int k); int num[10][2], bomba; char tab[6][6]; public: void escolher (int b = 0); void imprime_tabuleiro(); }; void tabuleiro::escolher(int b ) //escolhe as células que terão bomba { b = bomba; int m, n; while (bomba<10) { m = rand()%6; n = rand()%6; if (m == num[0][0] and n == num[0][1]) escolher(bomba); //escolhe uma outra célula caso a célula sorteada já houver sido escolhida else analisar_proximo(1, m, n, bomba); } void tabuleiro::analisar_proximo(int proximo, int m, int n, int b ) /* Verifica por completo se não existe nenhuma repetição de * escolha de células para alocar bomba e só então as aloca */ { int pos = 0; if (m==num[proximo][0] and n==num[proximo][1]) [indent]escolher(bomba); else { if (proximo == 9) { num[pos][0] = m; num[pos][1] = n; tab[m][n] = 66; pos += 1; bomba++; } else analisar_proximo(proximo+1, m, n, b ); } if (bomba==10) { for (int l = 0; l<=5; l++) for (int c = 0; c<=5; c++) { if (tab[l][c] == 66) continue; else analisar_adjacentes(l,c); } }; } // Aqui termina a rotina responsável por colocar as bombas no tabuleiro void tabuleiro::analisar_adjacentes(int j, int k) // Analisa quantas células vizinhas possuem bomba { int r,s, adj[8][2], numbomb = 48, position = 0; for (r=j-1; r<=j+1; r++) for (s=k-1; s<=k+1; s++) if (r >=0 and r <= 5 and s >= 0 and s <= 5) { adj[position][0]= r; adj[position][1]= s; if (r==j and s==k) continue; else { if (tab[r][s]==66) numbomb++; position++; //cout << r <<" " << s << endl; } } tab[j][k] = char(numbomb ); }; void tabuleiro::imprime_tabuleiro() { int line,q; for (line = 0; line <= 12; line++) { if (line%2 != 0) {for (q=0; q<=5; q++) cout << "|" << " " << tab[line/2][q] << " "; cout << "|" << endl;} else cout << "-------------------------" << endl; } } int main() { tabuleiro a; a.escolher(); a.imprime_tabuleiro(); return 0; } Não OO: #include <iostream> using namespace std; void escolher(int b = 0); void analisar_proximo(int proximo, int m, int n, int b ); void analisar_adjacentes(int m, int n); int num[10][2]; int bomba; char tab[6][6]; void escolher(int b ) //escolhe as células que terão bomba { b = bomba; int m, n; while (bomba<10) { m = rand()%6; n = rand()%6; if (m == num[0][0] and n == num[0][1]) escolher(bomba); //escolhe uma outra célula caso a célula sorteada já houver sido escolhida else analisar_proximo(1, m, n, bomba); } } void analisar_proximo(int proximo, int m, int n, int b ) /* Verifica por completo se não existe nenhuma repetição de * escolha de células com bomba e só então aloca as bombas */ { int pos = 0; if (m==num[proximo][0] and n==num[proximo][1]) escolher(bomba); else { if (proximo == 9) { num[pos][0] = m; num[pos][1] = n; tab[m][n] = 66; pos += 1; bomba++; } else analisar_proximo(proximo+1, m, n, b ); } if (bomba==10) { for (int j = 0; j<=5; j++) for (int k = 0; k<=5; k++) { if (tab[j][k] == 66) continue; else analisar_adjacentes(j,k); } } } void imprime_tabuleiro() { int line,k; for (line = 0; line <= 12; line++) { if (line%2 != 0) {for (k=0; k<=5; k++) cout << "|" << " " << tab[line/2][k] << " "; cout << "|" << endl;} else cout << "-------------------------" << endl; } } void analisar_adjacentes(int m, int n) // Analisa quantas células vizinhas possuem bomba { int r,s, adj[8][2], numbomb = 48, position = 0; for (r=m-1; r<=m+1; r++) for (s=n-1; s<=n+1; s++) if (r >=0 and r <= 5 and s >= 0 and s <= 5) { adj[position][0]= r; adj[position][1]= s; if (r==m and s==n) continue; else { if (tab[r][s]==66) numbomb++; position++; //cout << r <<" " << s << endl; } } tab[m][n] = char(numbomb ); } int main() { escolher(); imprime_tabuleiro(); return 0; }
×
×
  • Criar Novo...