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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    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
    Dernière modification par Invité ; 23/12/2006 à 19h03. Motif: erreur de texte

  2. #2
    Invité
    Invité(e)
    Par défaut
    alors personne n aurait une solution?? Ou une autre ideé?

  3. #3
    Membre Expert
    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
    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

  4. #4
    Invité
    Invité(e)
    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 Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    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

  6. #6
    Invité
    Invité(e)
    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
    Dernière modification par Invité ; 25/12/2006 à 16h17.

+ Répondre à la discussion
Cette discussion est résolue.

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