Deux objets "personnages" récalcitrants ^^

Résolu
cs_marcotte Messages postés 22 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 18 janvier 2011 - 11 janv. 2009 à 10:03
cs_marcotte Messages postés 22 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 18 janvier 2011 - 12 janv. 2009 à 19:54
Bonjour,
Je voudrais créer des objets "personnages" pour un jeu, j'ai réussi à le faire (débutant) mais je n'arrive pas à garder l'adresse de chacun dans une Tlist avec des pointeurs.
Sur l'essai que j'ai fait, le code  crée deux personnages (toto et tintin) avec la méthode de l'objet personnage, et je stocke l'adresse du personnage créé dans une variable pointeur (enfin je crois), entous cas les deux personnages ont toujours les caractéristiques du dernier créé.

Je vous laisse mon code si vous pouvze m'aidez ! j'ai planché toute la journée d'hier et cette nuit, j'ai les yeux en compote :/ Mais vive la programmation

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, contnrs, StdCtrls;

type
  Personnage=class(TObject)
    _Nom:string;
    _Age:integer;
    _Arme:string;
    procedure Creer(Nom:string; numero:integer);
    procedure Change_Arme(Arme:string);
  end;

  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Panel1: TPanel;
    img_Undo: TImage;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);

    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  x,y,numero:Integer;
  Larg1,Haut1,Larg2,Haut2:integer;
  perso:Personnage;
  lenum:^Personnage;
  num:^Personnage;
  Listeperso:TList;
  Nom:string;
  Arme:string;
  adresse1,adresse2:^Personnage;

implementation

{$R *.DFM}

procedure Personnage.Creer(Nom:string;numero:integer);
begin
  perso:=Personnage.Create;
  perso._Nom:=Nom;
  perso._Arme:='Pistolet';
  if (numero=1)then
  begin
    adresse1:=@perso;
  end else
  begin
    adresse2:=@perso;
  end;
  showMessage('le personnage N°'+inttostr(numero)+' est ' + perso._Nom);
end;

procedure Personnage.Change_Arme(Arme:string);
begin
  perso._Arme:=Arme;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  application.HintPause:=10;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  // Met en fullscreen le jeu.
  WindowState:=wsMaximized;
  // Affiche la map en grand.
  Panel1.width:=800;
  Panel1.height:=600;
  // Centre la map sur l'écran.
  Larg1:=Form1.width;
  Larg2:=Panel1.width;
  x:=(Larg1-Larg2)div 2;
  Panel1.left:=x;
  // Positionne l'icon "Undo" dans un coin
  img_Undo.left:=x+Larg2+32;
  // Centre les deux boutons "test" de création personnages.
  Larg1:=Form1.width;
  Larg2:=Button1.width;
  //Je multiplie la taille Larg2 par 2 car il y a deux boutons.
  Larg2:=Larg2 * 2;
  // J'ajoute l'espace entre les deux boutons.
  inc(Larg2,32);
  x:=(Larg1-Larg2)div 2;
  Button1.left:=x;
  Larg2:=Button1.width;
  Button2.left:=x+Larg2+32;
  // Positionne en bas les deux boutons "test" de création personnages.
  Haut1:=Form1.Height;
  Button1.top:=Haut1-57; // 57 c'est 30 en bas de Form1 + Bouton1.height.
  Button2.top:=Button1.top;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  perso._Nom:=adresse1^._Nom;
  ShowMessage('le nom du perso 1 est '+perso._Nom+' et son arme est un '+perso._Arme);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  perso._Nom:=adresse2^._Nom;
  ShowMessage('le nom du perso 2 est '+perso._Nom+' et son arme est un '+perso._Arme);
end;

Begin
  //Au début je pensais stocker le pointeur de chaque personnage dans cette Tlist.
  Listeperso:=TList.Create;

  {On enregistre l'adresse de perso1 et perso2 mais problème !
  ils ont la même valeur dans leur adresse !!}

//création de toto
  Nom:='toto';
  numero:=1;
  perso.Creer(Nom,numero);
//création de tintin
  Nom:='tintin';
  numero:=2;
  perso.Creer(Nom,numero);

end.

marcotte
Amateur passionné de programmation jeux vidéos 2D et texte (0D ? lol)

1 réponse

cs_marcotte Messages postés 22 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 18 janvier 2011
12 janv. 2009 à 19:54
Merci beaucoup pour ton aide je vais vite voir ça et ton site^^
Tes conseils sont avisés !

marcotte
Amateur passionné de programmation jeux vidéos 2D et texte (0D ? lol)
0
Rejoignez-nous