cs_marcotte
Messages postés22Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention18 janvier 2011
-
11 janv. 2009 à 10:03
cs_marcotte
Messages postés22Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention18 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)