Ir ao conteúdo
  • Cadastre-se

randomizar caracter em um jogo.


NataliaP.

Posts recomendados

COMECEI AGORA APRENDER LINGUAGEM C E ESTOU FAZENDO UM JOGO PARECIDO COM PUZZLE PETS E CANDY MAS COM LETRAS , TENHO ALGUMAS DUVIDAS DE ERROS E COMO RANDOMIZAR AS DUAS FUNCOES COMO INDICADAS NO PROGRAMA. SE ALGUMA ALMA BOA ESTIVER DISPOSTO ME AJUDAR HAHAHAH FICO FELIZ 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define LINHA 7
#define COLUNA 6

void Impressao(char Matriz[LINHA][COLUNA]);
void Inicializa(char Matriz[LINHA][COLUNA]);
int Comando(char Matriz[LINHA][COLUNA]);
void Permuta(char Matriz[LINHA][COLUNA],int i,int j,char Direcao);
int VerificaTrio(char Matriz[LINHA][COLUNA],int *Pontuacao);
int AcharT(char Matriz[LINHA][COLUNA]);
void Atualizar(char Matriz[LINHA][COLUNA],int i, int j);
int Randomico(char Matriz[LINHA][COLUNA],int i);

int main(){
    char Matriz[LINHA][COLUNA];
    int Pontuacao=0;

    Inicializa(Matriz);
    Impressao(Matriz);
    Comando(Matriz);
    VerificaTrio(Matriz,Pontuacao);
    AcharT(Matriz);


    while(1){
        if(Pontuacao==1000)
            printf("Fim de jogo");
          break;
        Impressao(Matriz);
        VerificaTrio(Matriz,&Pontuacao);

    }

    return 0;
}
void Impressao(char Matriz[LINHA][COLUNA]){
    int i ,j;

    printf("     1  2  3  4  5  6 ");
    printf("\n   -------------------\n");
    for(i=0;i<LINHA;i++){
        printf(" %d|",i+1);
        for(j=0;j<COLUNA;j++){
                printf("  %c", Matriz[j]);
        }
        printf(" |\n");
    }
    printf("   -------------------\n");

}
//INICIALIZAR MATRIZ RANDOMIZANDO 3 LETRAS V X O
void Inicializa(char Matriz[LINHA][COLUNA]){
    int i,j;
     for(i=0;i<LINHA;i++){
        for(j=0;j<COLUNA;j++){
                //RANDOMIZAR LETRAS V X O
            }
     }
}
// PERGUNTAS AO USUARIO SOBRE POSICAO E QUAL TROCAR
int Comando(char Matriz[LINHA][COLUNA]){
    int i,j, swi=0;
    char Direcao;

    printf("Escolha posicao: (x,y) =>");
    scanf("%d%d",&i,&j);
    printf("Escolha direcao: A(esquerdo),S(baixo),D(direto),W(cima) =>");
    scanf(" %c",&Direcao);

    Permuta(Matriz, i, j, Direcao);
    if(AcharT(Matriz)==1)
       swi=1;

    return swi;
}
// FUNCAO PARA TROCAR AS posições PEDIDAS PELO USUARIO
void Permuta(char Matriz[LINHA][COLUNA],int i,int j,char Direcao){
    char aux;

    if(Direcao=='A'){
        aux=Matriz[j];
        Matriz[j]=Matriz[j+1];
        Matriz[j+1]=aux;
        }else
        if(Direcao=='D'){
           aux=Matriz[j];
           Matriz[j]=Matriz[j-1];
           Matriz[j-1]=aux;
        }else
            if(Direcao=='W'){
            aux=Matriz[j];
            Matriz[j]=Matriz[i-1][j];
            Matriz[i-1][j]=aux;
        }else{
                (Direcao=='S');
                aux=Matriz[j];
                Matriz[j]=Matriz[i+1][j];
                Matriz[i+1][j]=aux;
                }
}
//Verifica a matriz toda e retorna 1 se encontrou algum trio ou 0 se não achou nenhum
// E SUBSTITUIR O TRIO PELA LETRA T
int VerificaTrio(char Matriz[LINHA][COLUNA],int *Pontuacao){
    int i, j; swi=0;

    for(i=0;i<LINHA-2;i++){
        for(j=0;j<COLUNA;j++){
            if((Matriz[j])==(Matriz[i+1][j])==(Matriz[i+2][j])){
                Matriz[j]='T';
                Matriz[i+1][j]='T';
                Matriz[i+2][j]='T';
                *Pontuacao= *Pontuacao+100;
                swi=1;
            }
        }

    }
    for(i=0;i<LINHA;i++){
        for(j=0;j<COLUNA-2;j++){
            if((Matriz[j])==(Matriz[j+1])==(Matriz[j+2])){
                    Matriz[j]='T';
                    Matriz[j+1]='T';
                    Matriz[j+2]='T';
                    *Pontuacao=*Pontuacao+100;
                    swi=1;
                }
        }
    }
    return swi;
}
//FUNCAO PARA ACHAR LETRAS T
int AcharT(char Matriz[LINHA][COLUNA]){
    int i,j;

    for(i=LINHA;i>=1;i--){
            for(j=COLUNA;j>=1;j--){
                if(Matriz[j]='T'){
                      Atualizar(Matriz,i,j);
                    }

                }

            }
}
// FUNCAO PARA SUBIR O T DE POSICAO ATE PRIMEIRA LINHA E COLUNA
void Atualizar(char Matriz[LINHA][COLUNA],int i, int j){
    char aux, aux2;
    for(i=LINHA;i<0;i--){
       if(Matriz[j]=='T' && Matriz[i-1][j]=='T'){
            aux=Matriz[j];
            aux2=Matriz[i-1][j];
            Matriz[j]=Matriz[i-2][j];
            Matriz[i-1][j]=Matriz[i-3][j];
            Matriz[j]=aux;
            Matriz[i-1][j]=aux2;

       }
        else
            aux=Matriz[j];
            Matriz[i-1][j]=Matriz[j];
            Matriz[j]=aux;

        if(i=1){
            for(j=1;j=COLUNA;j++){
                Matriz[j]='T';
                Matriz[j]=aux;

            }
        Randomico(Matriz,i);
        }
    }
}
//FUNCAO PARA SUBSTITUIR O T E COLOCAR NOVAS LETRAS RANDOMIZADAS
int Randomico(char Matriz[LINHA][COLUNA],int i){
    for (i=1;i<0;i--)
        {
            //RANDOMIZAR LETRAS V X O NA SUBSTITUICAO ONDE FICARAM TTT DEPOIS DE TRANSFERIR TODOS T PARA CIMA.
    }

}
 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@NataliaP.     para randomizar você precisar usar o comando srand e rand assim :

//INICIALIZAR MATRIZ RANDOMIZANDO 3 LETRAS V X O
void Inicializa(char Matriz[LINHA][COLUNA]){
    srand(time(NULL));
    int i,j,a;
    char b[3];
     for(i=0;i<LINHA;i++){
        for(j=0;j<COLUNA;j++){
                //RANDOMIZAR LETRAS V X O
                do{
                    a=rand()%89+1;
                    if(a==79){b[0]='O';}/*letra O*/
                    if(a==86){b[0]='V';}/*letra V*/
                    if(a==88){b[0]='X';}/*letra X*/
                    Matriz[i][j] = b[0];
                }while(a != 79 && a != 86 && a != 88);
            }
     }
}

esses são os códigos das letra V X O maiúsculas, para as letras minúsculas os códigos são  120   118   111 respectivamente, precisa do srand lá em cima antes do rand .

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@NataliaP.     seu código não estava funcionando, então dei uma olhada nele e  consegui acertar alguns erros, agora ele funciona, só precisa terminar as funções .

  veja seu código com algumas modificações :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define LINHA 7
#define COLUNA 6
void Impressao(char Matriz[LINHA][COLUNA]);
void Inicializa(char Matriz[LINHA][COLUNA]);
int Comando(char Matriz[LINHA][COLUNA]);
void Permuta(char Matriz[LINHA][COLUNA],int i,int j,char Direcao);
int VerificaTrio(char Matriz[LINHA][COLUNA],int *Pontuacao);
int AcharT(char Matriz[LINHA][COLUNA]);
void Atualizar(char Matriz[LINHA][COLUNA],int i, int j);
int Randomico(char Matriz[LINHA][COLUNA],int i);
int tecla();
int t,d,p,q,w;
int main(){
    char Matriz[LINHA][COLUNA];
    int Pontuacao=0;
    Inicializa(Matriz);
    Impressao(Matriz);
    Comando(Matriz);
    VerificaTrio(Matriz,&Pontuacao);
    AcharT(Matriz);

    while(1){
        if(Pontuacao==1000 || q==0 || w==0){
            printf("Fim de jogo");
            getch();
            break;
        }
        Impressao(Matriz);
        Comando(Matriz);
        VerificaTrio(Matriz,&Pontuacao);
        tecla();
    }
    return 0;
}
void Impressao(char Matriz[LINHA][COLUNA]){
    system("cls");
    int i ,j;
    printf("     1  2  3  4  5  6 ");
    printf("\n   -------------------\n");
    for(i=0;i<LINHA;i++){
        printf(" %d|",i+1);
        for(j=0;j<COLUNA;j++){
                printf("  %c", Matriz[i][j]);
        }
        printf(" |\n");
    }
    printf("   -------------------\n");
}
/*//INICIALIZAR MATRIZ RANDOMIZANDO 3 LETRAS V X O*/
void Inicializa(char Matriz[LINHA][COLUNA]){
    srand(time(NULL));
    int i,j,a;
    char b[3];
     for(i=0;i<LINHA;i++){
        for(j=0;j<COLUNA;j++){
                /*//RANDOMIZAR LETRAS V X O*/
                do{
                    a=rand()%89+1;
                    if(a==79){;b[0]='O';}/*letra O*/
                    if(a==86){;b[0]='V';}/*letra V*/
                    if(a==88){;b[0]='X';}/*letra X*/
                    Matriz[i][j] = b[0];
                }while(a != 79 && a != 86 && a != 88);
                printf("%c ",Matriz[i][j]);
            }
            printf("\n");
     }
     Sleep(1000);
}
/*// PERGUNTAS AO USUARIO SOBRE POSICAO E QUAL TROCAR*/
int Comando(char Matriz[LINHA][COLUNA]){
    int i,j, swi=0;
    char Direcao;
    printf("Escolha posicao: (x,y) ou 0 [ zero] para sair =>");
    scanf("%d%d",&i,&j);
    q=i;w=j;
    printf("Escolha direcao: A(esquerdo),S(baixo),D(direto),W(cima) =>");
    scanf(" %c",&Direcao);
    Permuta(Matriz, i, j, Direcao);
    if(AcharT(Matriz)==1)
       swi=1;
    return swi;
}
/*// FUNCAO PARA TROCAR AS posições PEDIDAS PELO USUARIO*/
void Permuta(char Matriz[LINHA][COLUNA],int i,int j,char Direcao){
    char aux;
    if(Direcao=='A'){
        aux=Matriz[i][j];
        Matriz[i][j]=Matriz[i][j+1];
        Matriz[i][j+1]=aux;
        }else
        if(Direcao=='D'){
           aux=Matriz[i][j];
           Matriz[i][j]=Matriz[i][j-1];
           Matriz[i][j-1]=aux;
        }else
            if(Direcao=='W'){
            aux=Matriz[i][j];
            Matriz[i][j]=Matriz[i-1][j];
            Matriz[i-1][j]=aux;
        }else{
                (Direcao=='S');
                aux=Matriz[i][j];
                Matriz[i][j]=Matriz[i+1][j];
                Matriz[i+1][j]=aux;
                }
}
/*//Verifica a matriz toda e retorna 1 se encontrou algum trio ou 0 se não achou nenhum*/
/*// E SUBSTITUIR O TRIO PELA LETRA T*/
int VerificaTrio(char Matriz[LINHA][COLUNA],int *Pontuacao){
    int i, j, swi=0;
    for(i=0;i<LINHA-2;i++){
        for(j=0;j<COLUNA;j++){
            if((Matriz[i][j])==(Matriz[i+1][j])==(Matriz[i+2][j])){
                Matriz[i][j]='T';
                Matriz[i+1][j]='T';
                Matriz[i+2][j]='T';
                *Pontuacao= *Pontuacao+100;
                swi=1;
            }
        }
    }
    for(i=0;i<LINHA;i++){
        for(j=0;j<COLUNA-2;j++){
            if((Matriz[i][j])==(Matriz[i][j+1])==(Matriz[i][j+2])){
                    Matriz[i][j]='T';
                    Matriz[i][j+1]='T';
                    Matriz[i][j+2]='T';
                    *Pontuacao=*Pontuacao+100;
                    swi=1;
                }
        }
    }
    return swi;
}
/*//FUNCAO PARA ACHAR LETRAS T*/
int AcharT(char Matriz[LINHA][COLUNA]){
    int i,j;
    for(i=LINHA;i>=1;i--){
            for(j=COLUNA;j>=1;j--){
                if(Matriz[i][j]='T'){
                      Atualizar(Matriz,i,j);
                    }
                }
            }
}
/*// FUNCAO PARA SUBIR O T DE POSICAO ATE PRIMEIRA LINHA E COLUNA*/
void Atualizar(char Matriz[LINHA][COLUNA],int i, int j){
    char aux, aux2;
    for(i=LINHA;i<0;i--){
       if(Matriz[i][j]=='T' && Matriz[i-1][j]=='T'){
            aux=Matriz[i][j];
            aux2=Matriz[i-1][j];
            Matriz[i][j]=Matriz[i-2][j];
            Matriz[i-1][j]=Matriz[i-3][j];
            Matriz[i][j]=aux;
            Matriz[i-1][j]=aux2;
       }
        else
            aux=Matriz[i][j];
            Matriz[i-1][j]=Matriz[i][j];
            Matriz[i][j]=aux;
        if(i=1){
            for(j=1;j=COLUNA;j++){
                Matriz[i][j]='T';
                Matriz[i][j]=aux;
            }
        Randomico(Matriz,i);
        }
    }
}
/*//FUNCAO PARA SUBSTITUIR O T E COLOCAR NOVAS LETRAS RANDOMIZADAS*/
int Randomico(char Matriz[LINHA][COLUNA],int i){
    for (i=1;i<0;i--)
        {
           /* //RANDOMIZAR LETRAS V X O NA SUBSTITUICAO ONDE FICARAM TTT DEPOIS DE TRANSFERIR TODOS T PARA CIMA.*/
    }
}

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

O srand(time(NULL)) deve ser chamado apenas uma só vez, pode ser ao inicio de main. Com fazer uma unica chamada ao inicio de main rand funcionará corretamente, a menos que queira usar uma nova semente(seed), então se deve fazer uma nova chamada passando uma nova seed. Borre todos os srands do seu programa e ponha um dentro do main, ao inicio.
int main(){
srand(time(NULL));
....

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

19 horas atrás, devair1010 disse:

@NataliaP.     seu código não estava funcionando, então dei uma olhada nele e  consegui acertar alguns erros, agora ele funciona, só precisa terminar as funções .

  veja seu código com algumas modificações :


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define LINHA 7
#define COLUNA 6
void Impressao(char Matriz[LINHA][COLUNA]);
void Inicializa(char Matriz[LINHA][COLUNA]);
int Comando(char Matriz[LINHA][COLUNA]);
void Permuta(char Matriz[LINHA][COLUNA],int i,int j,char Direcao);
int VerificaTrio(char Matriz[LINHA][COLUNA],int *Pontuacao);
int AcharT(char Matriz[LINHA][COLUNA]);
void Atualizar(char Matriz[LINHA][COLUNA],int i, int j);
int Randomico(char Matriz[LINHA][COLUNA],int i);
int tecla();
int t,d,p,q,w;
int main(){
    char Matriz[LINHA][COLUNA];
    int Pontuacao=0;
    Inicializa(Matriz);
    Impressao(Matriz);
    Comando(Matriz);
    VerificaTrio(Matriz,&Pontuacao);
    AcharT(Matriz);

    while(1){
        if(Pontuacao==1000 || q==0 || w==0){
            printf("Fim de jogo");
            getch();
            break;
        }
        Impressao(Matriz);
        Comando(Matriz);
        VerificaTrio(Matriz,&Pontuacao);
        tecla();
    }
    return 0;
}
void Impressao(char Matriz[LINHA][COLUNA]){
    system("cls");
    int i ,j;
    printf("     1  2  3  4  5  6 ");
    printf("\n   -------------------\n");
    for(i=0;i<LINHA;i++){
        printf(" %d|",i+1);
        for(j=0;j<COLUNA;j++){
                printf("  %c", Matriz[i][j]);
        }
        printf(" |\n");
    }
    printf("   -------------------\n");
}
/*//INICIALIZAR MATRIZ RANDOMIZANDO 3 LETRAS V X O*/
void Inicializa(char Matriz[LINHA][COLUNA]){
    srand(time(NULL));
    int i,j,a;
    char b[3];
     for(i=0;i<LINHA;i++){
        for(j=0;j<COLUNA;j++){
                /*//RANDOMIZAR LETRAS V X O*/
                do{
                    a=rand()%89+1;
                    if(a==79){;b[0]='O';}/*letra O*/
                    if(a==86){;b[0]='V';}/*letra V*/
                    if(a==88){;b[0]='X';}/*letra X*/
                    Matriz[i][j] = b[0];
                }while(a != 79 && a != 86 && a != 88);
                printf("%c ",Matriz[i][j]);
            }
            printf("\n");
     }
     Sleep(1000);
}
/*// PERGUNTAS AO USUARIO SOBRE POSICAO E QUAL TROCAR*/
int Comando(char Matriz[LINHA][COLUNA]){
    int i,j, swi=0;
    char Direcao;
    printf("Escolha posicao: (x,y) ou 0 [ zero] para sair =>");
    scanf("%d%d",&i,&j);
    q=i;w=j;
    printf("Escolha direcao: A(esquerdo),S(baixo),D(direto),W(cima) =>");
    scanf(" %c",&Direcao);
    Permuta(Matriz, i, j, Direcao);
    if(AcharT(Matriz)==1)
       swi=1;
    return swi;
}
/*// FUNCAO PARA TROCAR AS posições PEDIDAS PELO USUARIO*/
void Permuta(char Matriz[LINHA][COLUNA],int i,int j,char Direcao){
    char aux;
    if(Direcao=='A'){
        aux=Matriz[i][j];
        Matriz[i][j]=Matriz[i][j+1];
        Matriz[i][j+1]=aux;
        }else
        if(Direcao=='D'){
           aux=Matriz[i][j];
           Matriz[i][j]=Matriz[i][j-1];
           Matriz[i][j-1]=aux;
        }else
            if(Direcao=='W'){
            aux=Matriz[i][j];
            Matriz[i][j]=Matriz[i-1][j];
            Matriz[i-1][j]=aux;
        }else{
                (Direcao=='S');
                aux=Matriz[i][j];
                Matriz[i][j]=Matriz[i+1][j];
                Matriz[i+1][j]=aux;
                }
}
/*//Verifica a matriz toda e retorna 1 se encontrou algum trio ou 0 se não achou nenhum*/
/*// E SUBSTITUIR O TRIO PELA LETRA T*/
int VerificaTrio(char Matriz[LINHA][COLUNA],int *Pontuacao){
    int i, j, swi=0;
    for(i=0;i<LINHA-2;i++){
        for(j=0;j<COLUNA;j++){
            if((Matriz[i][j])==(Matriz[i+1][j])==(Matriz[i+2][j])){
                Matriz[i][j]='T';
                Matriz[i+1][j]='T';
                Matriz[i+2][j]='T';
                *Pontuacao= *Pontuacao+100;
                swi=1;
            }
        }
    }
    for(i=0;i<LINHA;i++){
        for(j=0;j<COLUNA-2;j++){
            if((Matriz[i][j])==(Matriz[i][j+1])==(Matriz[i][j+2])){
                    Matriz[i][j]='T';
                    Matriz[i][j+1]='T';
                    Matriz[i][j+2]='T';
                    *Pontuacao=*Pontuacao+100;
                    swi=1;
                }
        }
    }
    return swi;
}
/*//FUNCAO PARA ACHAR LETRAS T*/
int AcharT(char Matriz[LINHA][COLUNA]){
    int i,j;
    for(i=LINHA;i>=1;i--){
            for(j=COLUNA;j>=1;j--){
                if(Matriz[i][j]='T'){
                      Atualizar(Matriz,i,j);
                    }
                }
            }
}
/*// FUNCAO PARA SUBIR O T DE POSICAO ATE PRIMEIRA LINHA E COLUNA*/
void Atualizar(char Matriz[LINHA][COLUNA],int i, int j){
    char aux, aux2;
    for(i=LINHA;i<0;i--){
       if(Matriz[i][j]=='T' && Matriz[i-1][j]=='T'){
            aux=Matriz[i][j];
            aux2=Matriz[i-1][j];
            Matriz[i][j]=Matriz[i-2][j];
            Matriz[i-1][j]=Matriz[i-3][j];
            Matriz[i][j]=aux;
            Matriz[i-1][j]=aux2;
       }
        else
            aux=Matriz[i][j];
            Matriz[i-1][j]=Matriz[i][j];
            Matriz[i][j]=aux;
        if(i=1){
            for(j=1;j=COLUNA;j++){
                Matriz[i][j]='T';
                Matriz[i][j]=aux;
            }
        Randomico(Matriz,i);
        }
    }
}
/*//FUNCAO PARA SUBSTITUIR O T E COLOCAR NOVAS LETRAS RANDOMIZADAS*/
int Randomico(char Matriz[LINHA][COLUNA],int i){
    for (i=1;i<0;i--)
        {
           /* //RANDOMIZAR LETRAS V X O NA SUBSTITUICAO ONDE FICARAM TTT DEPOIS DE TRANSFERIR TODOS T PARA CIMA.*/
    }
}

 

@devair1010Pois é, estava um quanto errado, hoje eu estava refazendo e percebi isso. Mas muito obrigada de novo, vou roda e termina esse que me mandou. 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

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!