Ir ao conteúdo

Posts recomendados

Postado

Olá!

O código é para fazer um caça palavras em c que leia 20 palavras, cada palavra deve ter entre 5 e 10 letras. Após isso, as palavra devem ser passadas para uma função externa que deve sortear a posição e Direção da palavra dentro de uma matriz de 16x16. Alem de sortear a Direção, o programa deve impedir que as palavras saiam da matriz ou sejam colocadas sobre outras já existentes.  

Segue o código abaixo.

#include<stdio.h>
#include<locale.h>
#include<string.h>
#include<stdlib.h>
/*Trabalho de programaçao. */
char boas_vindas(){//Dá boas vindas.
printf("Olá, isso é um CAÇA-PALAVRAS em c++.\nVocê deverá informar 20 palavras para compor o quadro\n\nElas deverão ter de 5 a 10 letras.\n\n\n");}

struct palavras{
char pala[10];
double situacao;};

char esconder(char *q){
char letras[26] = {"abcdefghijklmnopqrstuvxwyz"};
int i, j, n, a, t;
i=0;
while(i<256){
n=rand()%26;
if(*q!='\0' && *q=='$'){*q=letras[n];} i++; q++;}}

char colocar_palavra(int l, char palavra[10], char p[16][16], char *n){
int posj, posi, pi, pj, dir, i, j, a, b;
int x, y, o, t, s;

a=0;
while(a==0){
posi=rand()%16;
posj=rand()%16;
b=0; o=0;
while(b==0 || o<36){
dir=rand()%6;
i=posi; j=posj;
t=0;
//=====Verificaçao 1====== {Se esta dentro dos limites da matriz}
if(dir!=0){
if(dir==1){/*Direita*/ j=j+l-1;} else {
if(dir==2){/*Esquerda*/ j=j-l+1;} else {
if(dir==3){/*Cima*/ i=i-l+1;} else {
if(dir==4){/*Baixo*/ i=i+l-1;} else {
if(dir==5){/*Diagonal Cima*/ i=i-l+1; j=j-l+1;} else {
if(dir==6){/*Diagonal Baixo*/ i=i+l-1; j=j+l-1;}}}}}}
//========================
//======Verificaçao 2======
if(j>=0 && j<=15 && i>=0 && i<=15){
if(dir==1){for(x=0, pi=posi, pj=posj, t=0; x!=l; x++){if(p[pi][pj] == palavra[x]){t++;} pj++;}} else {
if(dir==2){for(x=0, pi=posi, pj=posj, t=0; x!=l; x++){if(p[pi][pj] == palavra[x]){t++;} posj--;}} else {
if(dir==3){for(x=0, pi=posi, pj=posj, t=0; x!=l; x++){if(p[pi][pj] == palavra[x]){t++;} posi--;}} else {
if(dir==4){for(x=0, pi=posi, pj=posj, t=0; x!=l; x++){if(p[pi][pj] == palavra[x]){t++;} posi++;}} else {
if(dir==5){for(x=0, pi=posi, pj=posj, t=0; x!=l; x++){if(p[pi][pj] == palavra[x]){t++;} posi--; posj--;}} else {
if(dir==6){for(x=0, pi=posi, pj=posj, t=0; x!=l; x++){if(p[pi][pj] == palavra[x]){t++;} posi++; posj++;}}}}}}}
if(t<=1){b=1;} else {b=0;}
} else {b=0;}} else {b=0;}
o++;}if(b==1){a=1;} else {a=0;}}
//======Coloca a palavra========
if(dir==1){for(x=0; x!=l; x++){p[posi][posj]=palavra[x]; posj++;}} else {
if(dir==2){for(x=0; x!=l; x++){p[posi][posj]=palavra[x]; posj--;}} else {
if(dir==3){for(x=0; x!=l; x++){p[posi][posj]=palavra[x]; posi--;}} else {
if(dir==4){for(x=0; x!=l; x++){p[posi][posj]=palavra[x]; posi++;}} else {
if(dir==5){for(x=0; x!=l; x++){p[posi][posj]=palavra[x]; posi--; posj--;}} else {
if(dir==6){for(x=0; x!=l; x++){p[posi][posj]=palavra[x]; posi++; posj++;}}}}}}}
//printf("%d\n", dir);
//==============================
printf("\n\n");
for(i=0; i<16; i++){for(j=0; j<16; j++){printf("%c ", p[i][j]);} printf("\n");}
//=====Retorno==================
for(i=0; i<16; i++){for(j=0; j<16; j++){*n=p[i][j]; n++;}}}

main(){
char p[16][16], palavra[10], *t, dir[15];
int i, j, l, q, c;
struct palavras n[20];
srand((unsigned)time(NULL));
// -----------------Limpador ----------------
t=&p; i=(int) t +257;
for( ; t<i; t++){*t='$';}
// ------------------------------------------
boas_vindas();
//--------------Recebe a palavra-------------
for(q=0; q<20; q++){printf("\nInforme a palavra %d:", q+1);
l=0;
while(l<5 || l>10){gets(palavra);
for(l=0; palavra[l]!='\0'; l++);
if(l<5 || l>10){printf("\nOpps, tente outra:");}}
colocar_palavra(l, palavra, p, p);
//=====Armazena palavra=======
strcpy(n[q].pala, palavra);
n[q].situacao=0;
l=0;}
//=======Esconde==========
if(p[0][0]=='\n'){p[0][0]='$';}
esconder(p);
printf("\n\n\n");
for(i=0; i<16; i++){
for(j=0; j<16; j++){printf("%c ", p[i][j]);} printf("\n");}
printf("\n\n Palavras a serem procuradas:\n");
for(q=0; q<20; q++){printf("%s ", n[q].pala); if(q%4==0 && q!=0){printf("\n");}}

printf("\n\nVamos procurar. voce deve informar a palavra, direcao e posicao:\n");
while(q>=0){
printf("Informe a palavra:");
gets(palavra);
printf("Informe a direcao (cima, baixo, esquerda, direita, diagonal cima, diagonal baixo):");
gets(dir);
printf("Informe posicao (L) (C) [Ex: 12 0]:");
scanf("%d %d", &l, &c);

if(i==0){printf("Nao encontrado.");} else {q--;}
}




}

O problema é que o código continua tendo colisões mesmo ele verificando que as colisões não acontecem (A verificação está na parte do (======Verificação 2=======) ).

O que pode estar causando isso?

Se puderem me ajudar eu ficaria agradecido.

  • Amei 1
Postado

@Igor Lima Kock    seu código não está compilando , apresenta erro nessas linhas aqui :

// -----------------Limpador ----------------
t = &p; 
i = (int) t + 257;
for( ; t<i; t++ )
{ 
    *t = '$';
}
// ------------------------------------------

você precisa mesmo usar ponteiro para inserir caracteres nessa matriz ?  ,  ou pode ser do modo tradicional mesmo ?  usando dois Loop's um dentro do outro e colocando o caractere nas posições apontados pela variáveis de controle dos dois Loop's ?  ,  mais ou menos assim  :

for(int _x=0; _x<16; _x++)
    for(int _y=0; _y<16; _y++)
        p[_x][_y} = '$';

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!