www.bdjogos.com - Índice www.bdjogos.com
Biblioteca de Desenvolvedores de Jogos
 
 FAQFAQ   BuscaBusca   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Mensagens privadasMensagens privadas   EntrarEntrar 

Sobre correção do exercício do capitulo 24

 
Novo tópico   Responder tópico    www.bdjogos.com - Índice -> Tutoriais
Exibir tópico anterior :: Exibir próximo tópico  
Autor Mensagem
DarknessNeo



Registrado: 01/02/10
Mensagens: 1
Localização: SP - Interiorrr

MensagemEnviada: Seg Fev 01, 2010 3:41 am    Assunto: Sobre correção do exercício do capitulo 24 Responder com citação

Bom eu tava testando a resposta do exercício desse link

http://www.bdjogos.com/conteudo.php?link=resposta_24.php


Código:

- Usando o programa exemplo de movimentação, faça o objeto se mover pela tela de forma que o programa vá aumentando a velocidade do objeto.
Ele deve começar a se mover bem lento e ir ficando cada vez mais rapido.

Para resolver o exercício, criamos uma variável que controla a velocidade.. e criamos também duas outras para verificar a troca de botão.

Caso o usuário aperte um botão diferente, a velocidade é diminuida para 0;

Para ter a sensação de velocidade, também aumentamos o valor do rest.


O que está acontecendo é o seguinte:

Se você manter o botão que direciona para a direita, por exemplo, a velocidade vai aumentando, porem se vc soltar o botao a velocidade deveria zerar e não continuar aumentado caso vc solte e aperte a mesma direção novamente.

Como eu acho que deveria ser:

Ao soltar o direcional, imediatamente, a velocidade deveria zerar.

Adicionei um switch antes do clear(screen);


Código:
// Movendo um objeto nas coordenadas x e y
#include <allegro.h>

int main()
{
   allegro_init();
   set_color_depth(16);
   install_keyboard();
   set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0);


   // inicio da programação atual
   int x = 0;
   int y = 0;

   // variáveis constantes nunca mudam durante a execução do programa
   const int tamanho = 30;

   int velocidade = 0;

   // esta é uma variável flag, que indica qual o ultimo botao apertado
   int ultimo_botao = 0;
   int botao_atual = 0;


   // Laço principal
   while( !key[KEY_ESC] )
   {
      if ( key[KEY_UP] )
      {
         y = y - velocidade;
         velocidade++;
         ultimo_botao = 1;
      }
      if ( key[KEY_DOWN] )
      {
         y = y + velocidade;
         velocidade++;
         ultimo_botao = 2;
      }
      if ( key[KEY_LEFT] )
      {
         x = x - velocidade;
         velocidade++;
         ultimo_botao = 3;
      }
      if ( key[KEY_RIGHT] )
      {
         x = x + velocidade;
         velocidade++;
         ultimo_botao = 4;
      }
      if ( botao_atual != ultimo_botao )
      {
         botao_atual = ultimo_botao;
         velocidade = 0;
      }
     
      //switch adicionado para melhor controle da velocidade
      switch (ultimo_botao)
      {
          case 1: { if ( !key[KEY_UP] ) velocidade = 0; break; }
          case 2: { if ( !key[KEY_DOWN] ) velocidade = 0; break; }
          case 3: { if ( !key[KEY_LEFT] ) velocidade = 0; break; }
          case 4: { if ( !key[KEY_RIGHT] ) velocidade = 0; break; }
      }

      // esta função limpa a tela ou um objeto que tem buffer no allegro
      clear( screen );

      circlefill( screen, x, y, tamanho, makecol(255, 50, 50) );

      // imprimimos as coordenadas x e y na tela para o usuário ver
      textprintf_ex( screen, font, 10, 10, makecol(255,0,0), 0, "Variavel X: %d", x);
      textprintf_ex( screen, font, 10, 20, makecol(255,0,0), 0, "Variavel Y: %d", y);
      textprintf_ex( screen, font, 10, 30, makecol(255,0,0), 0, "Velocidade: %d", velocidade);
      // essa função faz o allegro esperar um pouco antes de voltar para o while
      rest(50);
   }

   allegro_exit();
   return 0;
}
END_OF_MAIN();


Abraço!
Voltar ao topo
Exibir o perfil do usuário Enviar mensagem privada Visitar o website do usuário
André



Registrado: 27/01/08
Mensagens: 92
Localização: SP

MensagemEnviada: Seg Fev 01, 2010 12:38 pm    Assunto: Responder com citação

Ai darkness, foi mal ontem cara, tava te ajudando com o tutorial e fui dormir Laughing
Valeu por postar aqui, mas tipo, o clear(); pode ser utilizado bem no comeco do while() tambem, voce pode fazer essas verificacoes de teclas depois de ter limpado o buffer. E muito bem pensado esse lance do switch().
_________________
AC/DC
C/C++
PHP
Voltar ao topo
Exibir o perfil do usuário Enviar mensagem privada
Mostrar os tópicos anteriores:   
Novo tópico   Responder tópico    www.bdjogos.com - Índice -> Tutoriais Todos os horários são GMT
Página 1 de 1

 
Ir para:  
Você não pode enviar mensagens novas neste fórum
Você não pode responder mensagens neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode votar em enquetes neste fórum


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por phpBB Brasil