Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu de cible

probleme d'affichage

    29 avril 2008 à 9:23:53

    Bonjour ami(e)s programmeurs et programmeuzes,

    J'ai essayer dernierement de programmer un petit jeux de cible tout simple (que je compte améliorer avec le temps), et rien que dans la version "tres" simple j'ai un petit probleme ; pour commencer je vous met mon code :

    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    Form1->Height=750 ;
    Form1->Width=1260 ;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    randomize();
    Horizontale = rand()%1200 ;
    Verticale = rand()%700 ;

    Cible->Top = Verticale ;
    Cible->Left = Horizontale ;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::CibleClick(TObject *Sender)
    {
    temps = Timer1->Interval ;

    pnt += 10 ;
    Points->Caption = pnt ;

    if (temps != 50)
    {
    temps -= 50 ;
    Timer1->Interval = temps ;
    }

    randomize();
    Horizontale = rand()%1200 ;
    Verticale = rand()%700 ;

    Cible->Top = Verticale ;
    Cible->Left = Horizontale ;
    }

    Cible est une image, et Points un Label.

    Mon probleme c'est qu'apres un certain nombre de cliques sur la cible, et que l'interval du timer est devenu vraiment petit, l'image ne met pas 50ms à changer de place, et de temps en temps(à intervalle aléatoire) elle s'arrete une seconde environ.

    Je pense que c'est par ce que l'ordinateur n'a pas le temps d'executer le programme dans le temps de l'intervalle, vous pensez que c'est ca?
    Et comment puis je régler ce probleme?

    Merci d'avance pour vos réponses.
    • Partager sur Facebook
    • Partager sur Twitter
      29 avril 2008 à 13:05:40

      Tu pouré pas mettre ton code dans les balises faites pour, stp?
      Ce serait plus clair
      • Partager sur Facebook
      • Partager sur Twitter
        29 avril 2008 à 13:19:55

        Desolé suis nouveau sur le forum, enfin ca fait un moment que je suis pas venu en tous cas c'est la premiere fois que je poste un code.
        Encore desolé :

        //---------------------------------------------------------------------------
        
        #include <vcl.h>
        #pragma hdrstop
        
        #include "Unit1.h"
        //---------------------------------------------------------------------------
        #pragma package(smart_init)
        #pragma resource "*.dfm"
        TForm1 *Form1;
        //---------------------------------------------------------------------------
        __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
        {
        Form1->Height=750 ;
        Form1->Width=1260 ;
        }
        //---------------------------------------------------------------------------
        
        void __fastcall TForm1::Timer1Timer(TObject *Sender)
        {
        randomize();
        Horizontale = rand()%1200 ;
        Verticale = rand()%700 ;
        
        Cible->Top = Verticale ;
        Cible->Left = Horizontale ;
        }
        //---------------------------------------------------------------------------
        void __fastcall TForm1::CibleClick(TObject *Sender)
        {
        temps = Timer1->Interval ;
        
        pnt += 10 ;
        Points->Caption = pnt ;
        
        if (temps != 50)
        {
        temps -= 50 ;
        Timer1->Interval = temps ;
        }
        
        randomize();
        Horizontale = rand()%1200 ;
        Verticale = rand()%700 ;
        
        Cible->Top = Verticale ;
        Cible->Left = Horizontale ;
        }

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          29 avril 2008 à 14:40:26

          le code C++ la balise c'est:
          <code type="cpp">ton code la</code>
          
          • Partager sur Facebook
          • Partager sur Twitter
            29 avril 2008 à 14:49:39

            A parce qu'en plus y'en a un pour chaque langage XD

            #include <vcl.h>
            #pragma hdrstop
            
            #include "Unit1.h"
            //---------------------------------------------------------------------------
            #pragma package(smart_init)
            #pragma resource "*.dfm"
            TForm1 *Form1;
            //---------------------------------------------------------------------------
            __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
            {
            Form1->Height=750 ;
            Form1->Width=1260 ;
            }
            //---------------------------------------------------------------------------
            
            void __fastcall TForm1::Timer1Timer(TObject *Sender)
            {
            randomize();
            Horizontale = rand()%1200 ;
            Verticale = rand()%700 ;
            
            Cible->Top = Verticale ;
            Cible->Left = Horizontale ;
            }
            //---------------------------------------------------------------------------
            void __fastcall TForm1::CibleClick(TObject *Sender)
            {
            temps = Timer1->Interval ;
            
            pnt += 10 ;
            Points->Caption = pnt ;
            
            if (temps != 50)
            {
            temps -= 50 ;
            Timer1->Interval = temps ;
            }
            
            randomize();
            Horizontale = rand()%1200 ;
            Verticale = rand()%700 ;
            
            Cible->Top = Verticale ;
            Cible->Left = Horizontale ;
            }
            


            A part ca, pas de réponse?
            • Partager sur Facebook
            • Partager sur Twitter
              29 avril 2008 à 15:18:22

              Commente un peu le code, stp et précise la lib ou le framework que tu utilise.
              On y comprend pas grand chose sinon.
              • Partager sur Facebook
              • Partager sur Twitter
                29 avril 2008 à 16:20:46

                #include <vcl.h> /* J'inclus la VCL (bibliothèque graphique 
                qui contient tous ce qui est bouton, label ...)*/
                #pragma hdrstop/*les 5 prochaines lignes sont ajoutées au compilateur et permettent d'utiliser une interface graphique*/
                #include "Unit1.h"
                //---------------------------------------------------------------------------
                #pragma package(smart_init)
                #pragma resource "*.dfm"
                TForm1 *Form1;
                //---------------------------------------------------------------------------
                __fastcall TForm1::TForm1(TComponent* Owner)
                : TForm(Owner)
                {
                //code qui se lance au lancement du programme
                
                //determine la taille de la fenetre de jeux
                Form1->Height=750 ;
                Form1->Width=1260 ;
                }
                //---------------------------------------------------------------------------
                
                void __fastcall TForm1::Timer1Timer(TObject *Sender)
                {
                // code qui se lance dans un Timer 
                // dont l'intervalle de temps change au cours du programme
                
                //les prochaines lignes determine aléatoirement 
                //la place de l'image dans la fenetre(je rappelle que "Cible" est un objet //image.
                
                // la cible change donc de position a chaque intervalle du timer
                randomize();
                Horizontale = rand()%1200 ;
                Verticale = rand()%700 ;
                
                Cible->Top = Verticale ;
                Cible->Left = Horizontale ;
                }
                //---------------------------------------------------------------------------
                void __fastcall TForm1::CibleClick(TObject *Sender)
                {
                // ce code s'execute lorsque on clique sur la cible
                
                // je met l'intervalle du Timer dans une variable
                temps = Timer1->Interval ;
                
                //J'ajoute 10 points et le note dans le Label
                pnt += 10 ;
                Points->Caption = pnt ;
                
                // Afin que le timer ne tombe pas à 0 d'intervalle
                // (ce qui entrainerai l'immobilite de la carte)
                // je teste l'intervalle, si il est superieur a 50ms, je le reduit de 50ms 
                if (temps != 50)
                {
                temps -= 50 ;
                Timer1->Interval = temps ;
                }
                
                
                // Enfin je recalcule aléatoirement une position de l'image "Cible"
                randomize();
                Horizontale = rand()%1200 ;
                Verticale = rand()%700 ;
                
                Cible->Top = Verticale ;
                Cible->Left = Horizontale ;
                }
                

                • Partager sur Facebook
                • Partager sur Twitter
                  29 avril 2008 à 17:22:13

                  Tu mets:

                  Citation : Faucheuses

                  if (temps != 50)
                  {
                  }
                  


                  alors que tu dis:

                  Citation : Faucheuses

                  // je teste l'intervalle, si il est superieur a 50ms, je le reduit de 50ms
                  

                  o_O
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 avril 2008 à 8:52:17

                    Mon intervalle commence 1000ms donc en decrementant de 50 je vais forcement tombé sur 50ms.

                    Mais ce genre de détails je m'en occuperais quand j'améliorerais mon programme, mon probleme c'est l'affichage de l'image.

                    Edit : Pas d'idées finalement??
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 mai 2008 à 12:18:14

                      il y a un probleme :

                      Citation : Faucheuses

                      if (temps != 50)
                      {
                         temps -=50;
                         Timer1->Interval = temps ;
                      }
                      


                      ici tu réduit le temps de 50ms ... mais donc si tu attend genre 1 min avant de cliquer ... il me semble que ton intervalle sera alors de 1000*60-50 = 59950ms essaye en mettant

                      if (temps != 50)
                      {
                         temps = 50;
                         Timer1->Interval = temps ;
                      }
                      


                      il me semble qu'en définissant ton intervalle comme cela tu obtiendras bien ce que tu cherche, c'est a dire un intervalle systématiquement égal a 50ms
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 mai 2008 à 18:45:08

                        C'est pas du tout ce que je cherche
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Jeu de cible

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown