IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Variable de position


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut Variable de position
    Bonjour a tous... J'ai commencé la programmation il y a 2 mois sous Borland Develloper Studio 2006. J'ai recemment commencer un projet de jeu:

    Il s'agit de 2 tank face a face qui peuvent tirer des balles et il faudrait que qu un une balle touche l'autre tank, celui-ci change d'image. Mais le probleme c'est que je ne vois absolument pas comment faire. Je pense qu il faudrait recuperer la variable de position de la balle. Mais ça je ne c'est pas le faire. Comme ça quand une balle touche l'autre tank l'image de ce tank change. Je vous met a disposition le code source: ( c'est mon premier projet de cette envergure, alors rigoler pas trop )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "ufmMainTANK.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
     
    	if (Key == 38)
    	{
    		Image1->Top = Image1->Top -5;
    		Image3->Top = Image3->Top -5;
    	}
       if (Key == 40)
    	{
    		Image1->Top = Image1->Top +5;
    		Image3->Top = Image3->Top +5;
    	}
    	if (Key == 37)
    	{
    		Image1->Left = Image1->Left -5;
    		Image3->Left = Image3->Left -5;
    	}
     
    	if (Key == 39)
    	{
    		Image1->Left = Image1->Left +5;
    		Image3->Left = Image3->Left +5;
    	}
     
    	if (Key == 13)
    	{
    		Timer1->Enabled = true;        //balle1
    	}
     
     
     
    	// joueur 2
     
    	if (Key == 87)
    	{
    		Image2->Top = Image2->Top -5;
    	}
       if (Key == 83)
    	{
    		Image2->Top = Image2->Top +5;
    	}
    	if (Key == 65)
    	{
    		Image2->Left = Image2->Left -5;
    	}
     
    	if (Key == 68)
    	{
    		Image2->Left = Image2->Left +5;
    	}
     
    	if (Key == 32)
    	{
    		Timer2->Enabled = true; //balle2
    	}
     
     
     
     }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    	Image3->Left = Image3->Left +5;
    	Image3->Visible = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Quitter1Click(TObject *Sender)
    {
    	Form1->Close();	
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer2Timer(TObject *Sender)
    {
       Image4->Left = Image4->Left -5;
       Image4->Visible = true;
    }
    //---------------------------------------------------------------------------
    Si vous voulez je peut mettre le dossier qui contient les image et les autre codes.

    Merci d'avance

  2. #2
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut
    alors personne n aurait une solution?? Ou une autre ideé?

  3. #3
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par seb2020
    alors personne n aurait une solution?? Ou une autre ideé?
    Relaxe un peu c'est le temps des fêtes, c'est normal qu'il y a moins de monde sur le forum.

    Pour la solution, il faudrais savoir comment tu fonctionnes. Est-ce qu'il y a une classe pour un tank, une classe pour un missille? Car sa serais vraiment la meilleur méthode.

    Il te faudrais une boucle principale qui actualise les images. Pour la boucle tu peux prendre un timer ou un thread. Dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::BoucleTimer(TObject *Sender)
    {
        Tank1->Affiche();
        Tank2->Affiche();
    }
    Je vois que tu bouge des zones d'images, une meilleure façon serais de dessiner directement sur la Form. Au moins tu devrais donner des nom significatifs au Image car Image1, Image2, Image3, Image4 sa ne dit pas grand chose à quelqu'un qui veut t'aider.

    Une petite question, encore, est-ce qu'un tank peux lancer plusieurs missiles en même temps ou bien tant que le missille n'a pas traverser l'écran on attend avant de lancer le second?

    Joyeux noël
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  4. #4
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut
    Merci tout d'abord. Je vait te mettre directement le dossier qui contient tout.

    http://www.seb2020.com/divers/tank

    Pour les missiles, je pense que ce serait meiux qu'on puisse tirer plusieurs a la suite. POur le reste je m'y connait pas trop encore. Mais merci deja

  5. #5
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    les bordure d'une image sont défines par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Image1 -> Left // Position sur X
    Image1 -> Top // Position sur Y
    Image1 -> Width // Largeur
    Image1 -> Height // Hauteur
    comme-ça tu pourras tester si'il ya une intersection, entre deux images càd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Par exemple
    if( (Image1 -> Left > Image2 -> Left) && 
        (Image1 -> Left < Image2 -> Left+Image2 -> Width))  
      {
        Tank1 touche Tank2
      }
    il faut prendre tout les cas ...

    bon courage
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  6. #6
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut
    Tout d'abord merci... Donc si j'ai bien compris ca veut dire que je dois faire 4 if : un pour left, un autre top, un autre width et un autre pour heigt ?? Comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    if( (Balle1->Left > Tank2 -> Left) && (Balle1->Left < Tank2->Left +Balle2 -> Width ))
      {
    	Tank2->Visible = false;
    	Timer1->Enabled = false;
      }
    	if( (Balle1->Top > Tank2 -> Top) && (Balle1->Top < Tank2->Left +Balle2 -> Width ))
      {
    	Tank2->Visible = false;
    	Timer1->Enabled = false;
      }
    	if( (Balle1->Height > Tank2 -> Height) && (Balle1->Height < Tank2->Height + Balle2 -> Width))
      {
    	Tank2->Visible = false;
    	Timer1->Enabled = false;
      }
    	if( (Balle1->Width > Tank2 -> Width) && (Balle1->Width < Tank2->Width + Balle2 -> Width))
      {
    	Tank2->Visible = false;
    	Timer1->Enabled = false;
      }
    Cela na pas l'aire de marche, peut etre ai-je fait une erreur
    Merci

  7. #7
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    essay ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if( (Balle1->Left > Tank2 -> Left) && (Balle1->Left < Tank2->Left +Tank2-> Width ))
      {
        Tank2->Visible = false;
        Timer1->Enabled = false;
      }
        if( (Balle1->Top > Tank2 -> Top) && (Balle1->Top < Tank2->Top) +Tank2 -> Height))
      {
        Tank2->Visible = false;
        Timer1->Enabled = false;
      }
    pour te retrouver, il faut prendre une feuille est un crayon pour dessiner tout les cas possibles
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  8. #8
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par kmaniche
    Bonjour,

    essay ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if( (Balle1->Left > Tank2 -> Left) && (Balle1->Left < Tank2->Left +Tank2-> Width ))
      {
        Tank2->Visible = false;
        Timer1->Enabled = false;
      }
        if( (Balle1->Top > Tank2 -> Top) && (Balle1->Top < Tank2->Top) +Tank2 -> Height))
      {
        Tank2->Visible = false;
        Timer1->Enabled = false;
      }
    pour te retrouver, il faut prendre une feuille est un crayon pour dessiner tout les cas possibles
    Merci cela a l'air de marcher. Le probleme, c'est que des que je deplace le tank, la balle se deplace aussi. Je m'explique : L'image de la balle se deplace la meme chose que le tank sauf qu elle est invisible. Des que l'on clique sur la touche tire, la balle devient visible et le timer s'allume. Faudrait trouver comment desactiver la balle et l'activer seulement quand on clique sur la touche. J'espere mettre correctement expliquer....

  9. #9
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonsoir,
    aulieur de déplacer à chaque fois la balle, tu peut le mettre en même position que le tank suite à un appui sur une touche du clavier.
    il ya la méthode SetBound() qui tu peut manipuler pour être plus rapide.

    SetBound()
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  10. #10
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut
    Merci ca marche !!! Me reste plus que le probleme des images qui doivent disparaitre au contact d'une autre...

    Merci, merci

  11. #11
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Pour ce faire, utilise la propriété Visible de l'image, ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Balle -> Hide() ; // pour cacher
     
     
     
    Balle -> Show() ; // pour afficher
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  12. #12
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    N'oublis pas de mettre
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  13. #13
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut
    Donc c'est encore moi.... Oui je sais je suis en peu chiant...lol...

    Voici le code de mon programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "ufmMainTANK.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    	Label1->Caption = Key;
     
    	if (Key == 38)
    	{
    		Tank1->Top = Tank1->Top -5;
     
    	}
       if (Key == 40)
    	{
    		Tank1->Top = Tank1->Top +5;
     
    	}
    	if (Key == 37)
    	{
    		Tank1->Left = Tank1->Left -5;
     
    	}
     
    	if (Key == 39)
    	{
    		Tank1->Left = Tank1->Left +5;
     
    	}
     
    	if (Key == 13)
    	{
    		Balle1->SetBounds(Tank1->Left + 5,Tank1->Top - 5,Tank1->Height - 5,Tank1->Width );
    		Timer1->Enabled = true;
    		MessageBeep(MB_OK); //balle1 + bruit
       	}
     
     
    if( (Balle1->Left > Tank2 -> Left) && (Balle1->Left < Tank2->Left  ) )
      {
    	Tank2->Visible = false;
    	Timer1->Enabled = false;
     
      }
    	if((Balle1->Top > Tank2 -> Top) && (Balle1->Top < Tank2->Top))
      {
    	Tank2->Visible = false;
    	Timer1->Enabled = false;
     
      }
      if((Balle1->Height > Tank2->Height) && (Balle1->Height < Tank2->Height))
      {
    	Tank2->Visible = false;
    	Timer1->Enabled = false;
     
      }
      if((Balle1->Width > Tank2->Width) && (Balle1->Width < Tank2->Width))
      {
    	Tank2->Visible = false;
    	Timer1->Enabled = false;
     
      }
     
     
     
    	// joueur 2   pas encore configuré...
     
    	if (Key == 87)
    	{
    		Tank2->Top = Tank2->Top -5;
    		Balle2->Top = Balle2->Top -5;
    	}
       if (Key == 83)
    	{
    		Tank2->Top = Tank2->Top +5;
    		Balle2->Top = Balle2->Top +5;
    	}
    	if (Key == 65)
    	{
    		Tank2->Left = Tank2->Left -5;
    		Balle2->Left = Tank2->Left -5;
    	}
     
    	if (Key == 68)
    	{
    		Tank2->Left = Tank2->Left +5;
    		Balle2->Left = Tank2->Left -5;
    	}
     
    	if (Key == 32)
    	{
    		Timer2->Enabled = true;
    		MessageBeep(MB_ICONEXCLAMATION); //balle2
    	}
     
     
     
     
     }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    	Balle1->Left = Balle1->Left +5;
    	Balle1->Visible = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Quitter1Click(TObject *Sender)
    {
    	Form1->Close();	
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer2Timer(TObject *Sender)
    {
       Balle2->Left = Balle2->Left -5;
       Balle2->Visible = true;
    }
    //---------------------------------------------------------------------------
    le probleme c'est que le tank2 ne disparait pas.. Une idée

    (Si ca marche vous pouvez me )

  14. #14
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut
    Un tit up !

  15. #15
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,
    Bon je suis fatigué, malade, et je cache la misère qui ronge mon coeur (la faute a une femme évidemment) mais j'ai un doute juste sur ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if( (Balle1->Left > Tank2 -> Left) && (Balle1->Left < Tank2->Left  ) )
    par exemple ...
    Comment Balle1->Left peut il être a la fois inférieure et supérieure a Tank2 -> Left ?
    C'est bien ce que je lis, non ? Et pis pour une fois que je suis ajeun ...
    Sinon, pour éviter les enfilades de if(), on pourrait pas proposer un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    switch (Key)
    {
         case 38:
         //bla, bla, bla
         break;
         case 39:
         //bla, bla, bla
         break;
         //etc, etc, etc
    }
    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  16. #16
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut
    Merci pour ta reponse...Enfaite mon probleme c'est que je ne voit pas comment savoir si le Balle1 a la meme position que le Tank2. Mais je vais quand meme essayer ta proposition

  17. #17
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    En supposant que tu as des classes et que la position du tank est calculé à partir d'en haut à gauche, voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          if ( X >= Tank2.Position.x &&
               Y >= Tank2.Position.y &&
               X <= Tank2.Position.x + LargeurTank &&
               Y <= Tank2.Position.y + HauteurTank)
          {
               // Le tank est touché
          }
    X et Y sont la position de ta balle et ta balle fait un pixel de large et de haut
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  18. #18
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,
    Voici un exemple que j'ai implémenté :

    Unit1.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #ifndef Unit1H
    #define Unit1H
     
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #include <Graphics.hpp>
     
    class TForm1 : public TForm
    {
    __published:    // Composants gérés par l'EDI
            TImage *Tank;
            TImage *Balle;
            TTimer *Timer1;
            TPanel *Panel1;
            void __fastcall FormKeyDown(TObject *Sender, WORD &Key,
              TShiftState Shift);
            void __fastcall Timer1Timer(TObject *Sender);
    private:    // Déclarations de l'utilisateur
    public:        // Déclarations de l'utilisateur
            __fastcall TForm1(TComponent* Owner);
    };
     
    extern PACKAGE TForm1 *Form1;
     
    #endif
    Unit1.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
     
    #include <vcl.h>
    #include <math.h>
    #pragma hdrstop
     
    #include "Unit1.h"
     
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
     
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
     int Step = 3 ;
     switch(Key)
      {
        case VK_RETURN :
                        Balle -> Visible = true ;
                        Balle -> Left = Tank -> Left + Tank -> Width - 5 ;
                        Balle -> Top  = Tank -> Top + (Tank -> Height)/2 -10;
                        Timer1 -> Enabled = true ;
                        break ;
     
        case VK_LEFT :
                        Tank -> Left -= Step ;
                        break ;
     
        case VK_RIGHT :
                        Tank -> Left += Step ;
                        break ;
     
        case VK_UP :
                        Tank -> Top  -= Step ;
                        break ;
     
        case VK_DOWN :
                        Tank -> Top += Step ;
                        break ;
      }
    }
     
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      Balle -> Left +=23 ;
     
      if((Balle -> Left + Balle -> Width > Width) ||
         ((Balle -> Left + Balle -> Width > Panel1 -> Left) &&
         (Balle -> Top >= Panel1 -> Top && Balle -> Top <= Panel1 -> Top + Panel1 -> Height)&&
         Panel1 -> Visible == true)
         )
         {
           Panel1 -> Visible = true ;
           Panel1 -> Left = Width/2+random(Width/2 - Panel1 -> Width-5) ;
           Panel1 -> Top  = random(Height - Panel1 -> Height-15) ;
     
           Timer1 -> Enabled = false ;
           Balle -> Visible = false ;
     
           return ;
         }
    }
    Avec Panel1 l'obstacle.

    Bon courage.

    Pièce jointe 8149
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  19. #19
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut
    Désolé de te le dire, mais on peut tirer ou on veut et la cible bouge quand meme...

  20. #20
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Citation Envoyé par seb2020
    Désolé de te le dire, mais on peut tirer ou on veut et la cible bouge quand meme...
    ::::::::..::::::::::

    Mais c'est fait pour: lorsque l'on tire la balle, si tu touche la cible, la cible change de position (on peut incrémenter un score aussi), mais dans le cas contraire, le score ne change pas et la position de la cible change.
    Alors, tu peux changer le code pour faire ce que tu veux. c'étais pouir te montrer comment faire.
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Compter le nombre de fois où la variable est positive
    Par mon pseudo dans le forum SAS Base
    Réponses: 6
    Dernier message: 18/02/2013, 13h59
  2. Réponses: 2
    Dernier message: 12/10/2010, 09h35
  3. Réponses: 0
    Dernier message: 15/11/2009, 17h40
  4. [VBA-E] : somme de deux lignes ayant des positions variables
    Par johnmakina dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/01/2007, 16h47
  5. [RegEx] chercher la position d'un texte de taille variable
    Par sami_c dans le forum Langage
    Réponses: 2
    Dernier message: 18/11/2006, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo