Ir ao conteúdo
  • Cadastre-se

Movimentar um caractere na tela


Kuroh
Ir à solução Resolvido por atlos,

Posts recomendados

Preciso fazer um programa que movimente um caractere na tela a partir do pressionamento das setas do teclado.
 
Se for pressionada a seta para direita, por exemplo, o caractere deve continuar se movendo para direita até que uma outra seta (cima, baixo, esquerda) seja pressionada. Quando a nova seta for pressionada, o caractere deve se mover para nova direção.
Quando for pressionada a tecla X, o programa deve encerrar.
 
Fiz o seguinte código:
 
#include <stdio.h>#include <Windows.h>#include <conio2.h>    typedef struct    {    int x;    int y;    } COORDENADA;       typedef struct    {    float points;    int direcao_move;    int cor;    COORDENADA posicao;    } JOGADOR;    void move_player (JOGADOR *player, int direcao_move)  //função para movimentar o caractere       {        getch();        direcao_move = getch();             switch (direcao_move) // os números usados correspondem ao "código" de cada seta            {                case 72:(*player).posicao.y--; //cima                        break;                case 75: (*player).posicao.x--;; // esquerda                        break;                case 80: (*player).posicao.y++; // baixo                        break;                case 77: (*player).posicao.x++; // direita                        break;           }       }     void show_player (JOGADOR *player)  //mostra o caractere na tela      {        int posicao_atual[2]={(*player).posicao.x, (*player).posicao.y};        gotoxy(posicao_atual[0],posicao_atual[1]);        printf("o");      }int main (){      JOGADOR player = {70.0, 77, 3, {5,5}};    while (player.direcao_move!='X')       {        move_player(&player, player.direcao_move);        show_player(&player);       }return (0);}
 
Porém, como podem ver, toda vez que o laço retorna ao move_player, é feito o getch() novamente.
Desse modo o caractere se movimenta apenas uma "casa" por vez, ao invés de continuar se movimentando para direita até que seja dito o contrário.

Pensei em resolver isso usando o kbhit, mas também não deu certo.
 
Alguma ideia de como arrumar isso?
 
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

poderia ser algo do tipo

char c;c = getch();   //Le e remove o caractere         while(c != 'x' )    {        switch (c)    {    case 'w':        while(c == 'w')        {            printf("w");            if(kbhit() == 1)            {                c = getch();            }        }        break;    case 'd':        while(c == 'd')        {        printf("d");            if(kbhit() == 1)            {                c = getch();            }        }        break;                }    }

a biblioteca do windows tambem já tem uma estrutura COORD própria,pode usar essa se quiser,e a função SetConsoleCursorPosition

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

Visitante
Este tópico está impedido de receber novas respostas.

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!