Difficulty moving character on board

1

I have an array of structures as a board. My character starts at position [0] [0]:

tabuleiro[0][0] = personagem;

Thecharacterisdisplayedcorrectlyinitsinitialposition,butIcannotmoveitusingthecodebelow(itisincomplete,butshouldworkasfarasIdid):

voidmovimentar(criaturatabuleiro[][10],criaturapersonagem){system("cls");
imprime(tabuleiro);
criatura vazio;
int i=0, j=0;
char mover;

printf("Use WASD ou as setas do teclado para se mover pelo tabuleiro!\n");
scanf(" %c",&mover);

if(mover=='s'){
    tabuleiro[i+1][j]= personagem;
    i++;
}
imprime(tabuleiro);
system("pause");            
}

The board and character are defined some functions above. More or less in this way (I took what I consider less relevant):

criatura tabuleiro[5][10];
    criatura personagem;
    criatura chefe;
    criatura vazio; // isto aqui adicionei recentemente, ainda preciso verificar se faz sentido criar uma "criatura vazio" para colocá-la no local de onde o personagem saiu.
    vazio.classe = ' ';

    for(i=0;i<5;i++){
        for(j=0;j<10;j++){
            tabuleiro[i][j].status = 0; // aqui o tabuleiro todo é dado como desconhecido, a princípio (utilizo 0 como status para aquilo que não está visível).
            tabuleiro[i][j].classe = ' '; 
        }
    }

    // ATRIBUTOS PERSONAGEM 
    personagem.classe = classeE;
    personagem.atc = atcE;
    personagem.def = defE;
    personagem.saude = saudeE;
    personagem.status = 1;
    tabuleiro[0][0] = personagem;

When you press s, the character remains in the same position and a blank appears on the other side of the board.

Thefunctiontoprintthetrayis,inpart,this:

for(j=0;j<10;j++){if(tabuleiro[i][j].status==0){printf(" ?  ");
            }
            else{
                if(tabuleiro[i][j].classe=='X'){// X -> armadilha de grande potencial ofensivo
                    printf(" X  ");
                }
                else if(tabuleiro[i][j].classe=='x'){ // x -> armadilha de pequeno potencial ofensivo
                    printf(" x  ");
                }
                else if(tabuleiro[i][j].classe=='i'){//i -> inimigo
                    printf("%c_%c ",155,155);
                }
                else if(tabuleiro[i][j].elixir == 'e'){ // e -> elixir
                    printf(" %c  ",3);
                }
                else if(tabuleiro[i][j].classe == 'C'){ //C -> Chefe
                    printf("%c_%c ",227,224);
                }   
                else if(tabuleiro[i][j].classe == ' '){
                    printf("   ");
                }       
                else if(tabuleiro[i][j].classe=='g' || tabuleiro[i][j].classe=='b' || tabuleiro[i][j].classe=='p'){ // g,b ou p -> herói
                    printf("^_^ ");
                }
            }
        }

The character's status is set to 1 at the beginning of the code so that it is visible. I did not copy the whole code here because it would be a lot, can you tell what is going wrong with just this information?

@edit: I changed

if(mover=='s'){
    tabuleiro[i+1][j]= personagem;
    i++;
}

by

 if(mover=='s'){
        tabuleiro[i+1][j] = personagem;
        tabuleiro[i+1][j].classe = 'g'; // onde g é a classe guerreiro
        tabuleiro[i][j].classe = ' ';
        i++;
    }

and seems to be "working", just not sure if it's the right way ...

    
asked by anonymous 12.11.2017 / 22:45

1 answer

0

The solution I found was as follows:

void movimentar(criatura tabuleiro[][10], criatura personagem,char classeE, int *saudeE, int *atcE, int *defE, int *lin, int *col, int *elixir){ // linha e coluna passados aqui
    system("cls");
    imprime(tabuleiro);
    criatura vazio;
    int l = *lin; 
    int c = *col;
    char mover;
    int retirar;
    srand(time(NULL));
    printf("Use W, A, S, ou D para se mover pelo tabuleiro!\n");
    scanf(" %c",&mover);

    if(mover=='s' || mover =='S' ){
        if(l+1<=5){
            if(tabuleiro[l+1][c].classe == ' '){ // a movimentação ocorre diretamente se o local para onde o usuário deseja ir não existe inimigo
                tabuleiro[l+1][c] = personagem;
                tabuleiro[l+1][c].classe = classeE; // classeE é a classe escolhida pelo usuário no início do jogo
                tabuleiro[l][c].classe = ' ';
                l++;
                *lin = l; // salvando o valor de volta na função anterior

I do not know if this solution is really appropriate, but so far it has worked well. I created other ifs to move to the other sides and I took care of all the special cases that I imagined.

    
13.11.2017 / 03:09