![]() |
Re: Array an procedure übergeben
Delphi hat mit zwar gleichen Typendeklaration einige Progleme.
So geht es NICHT:
Delphi-Quellcode:
So dürfte es geh'n:
type EDummy = array of EKarte;
function MixECards(const AParam: EDummy): EDummy; var P1EKarte: Array of Ekarte; {P1EKarte <> AParam}
Delphi-Quellcode:
type EDummy = array of EKarte;
function MixECards(const AParam: EDummy): EDummy; var P1EKarte: EDummy; {P1EKarte = AParam} |
Re: Array an procedure übergeben
@choose:
Die Namen sind Delphi total egal. Diese "Vorgaben" für die Namensvergabe (das hast du bestimmt irgendwo gelesen) ist nur zum einfachen lesen/verständnis der Quellcodes gedacht und hat nichts mit der Funktion zu tun. Und das was Igotcha da geschrieben hat, sind mit Sicherheit nur Beispiele und sehen nicht im direkten Zusammenhang mit dem Prog. :wink: Ich halte mich auch nicht an diesen sogenanten "Standard", hab mir ein eigenes System zur Namensvergabe im laufe der Jahre angeeignet. |
Re: Array an procedure übergeben
Zitat:
Zitat:
Oder würdest Du hinter EConvertError eine Klasse zur Darstellung von Schachfiguren erwarten, deren Dartellungsmethode sinnigerweise Create heißt? Technisch machbar. Zitat:
|
Re: Array an procedure übergeben
Zitat:
Delphi-Quellcode:
In der Game-Unit ist deklariert
unit AKarten;
// Klasse der Aktionskarten interface uses DXDraws, DXClass,DXSprite, SysUtils, EKarten; Type TACard = class(TImageSpriteEx) // Felder private fname: String; // Kartenname; fed: String; // Kürzel der Edition, z.B. 'WC' fnummer: String; // Nummer der Karte, z.B. 39 fcid : integer; // lfd. Nummer im Stapel fcowner: integer; // Spieler, der die Karte besitzt // Methoden function getName: String; procedure setName(Name: String); function getED: String; procedure setED(Edition: String); function getNummer: String; procedure setNummer(Nummer: String); function getCID: integer; procedure setCID(CID: integer); function getCOwner: integer; procedure setCOwner(COwner: integer); public property Name: string read getName write setName; property Edition: string read getED write setED; property Nummer: string read getNummer write setNummer; property CID: integer read getCID write setCID; property COwner: integer read getCOwner write setCOwner; procedure DoMove(MoveCount: Integer);override; procedure DoCollision(Sprite: TSprite; var Done: Boolean);override; procedure LoadECard(Imagelist: TDXImageList); // Lädt das Bild der Karte end; implementation ... procedure TACard.LoadECard(ImageList: TDXImageList); var ix: integer; strCName: String; bImGFound: Boolean; begin bImgFound:=false; strCname:=fed+fnummer; for ix:=0 to Imagelist.Items.Count-1 do begin if Imagelist.Items.Items[ix].Name=strCName then begin bImgFound:=true; Break; end; end; if bIMgFound=false then begin ImageList.Items.Add; with ImageList.Items[ImageList.Items.Count-1] do begin Picture.LoadFromFile (MYPFAD+fed+'\small\'+fnummer+'.jpg'); fname:=strCName; Name := fname; PatternWidth := 0; PatternHeight := 0; SkipHeight := 0; SkipWidth := 0; SystemMemory := False; //Transparent := Transp; //TransparentColor := TranspColor; Restore; end; end; Image:=Imagelist.Items.Find(strCName); end;
Delphi-Quellcode:
und
type ADummy = array of TACard;
Delphi-Quellcode:
Erstellt werden die ADeck1-Objekte in einer Schleife mit:
ADeck1, AADeck1: ADummy;
Delphi-Quellcode:
Das Mischen der Karten funktioniert mit Eurer Hilfe nun super mit:
inc(iA);
SetLength(ADeck1,iA); ADeck1[iA-1]:=TACard.Create(frmMain.DXSpriteEngine1.Engine); ADeck1[iA-1].Edition:=strLeft(S,2); ADeck1[iA-1].Nummer:=strRight(S,Length(S)-2); ADeck1[iA-1].CID:=iA-1; ADeck1[iA-1].COwner:=0; ADeck1[iA-1].LoadECard(frmMain.DXCards); ADeck1[iA-1].Height:=127; ADeck1[iA-1].Width:=90; ADeck1[iA-1].X:=200+(iA*20); ADeck1[iA-1].Y:=250;
Delphi-Quellcode:
Wenn in der Mischroutine
function MixACards(Var AParam: ADummy): ADummy;
var CDummy: TACard; ix, ir: integer; begin SetLength(Result, Length(AParam)); for ix:=0 to High(AParam) do begin ir:=Random(High(AParam)); CDummy:=Aparam[ix]; AParam[ix]:=AParam[ir]; AParam[ir]:=CDummy; end; end;
Delphi-Quellcode:
funktioniert, warum klappt dann dies nicht?
AParam[ix]:=AParam[ir];
Delphi-Quellcode:
Der Compilerlauf ist fehlerfrei, jedoch bricht das Programm mit einem "Access-Violation" beim "Draw" der SpriteEngine ab. Kommentiere ich die Drei Zeilen aus, gibt es keine Probleme.
Setlength(AADeck1,1);
AADeck1[0]:=TACard.Create(frmMain.DXSpriteEngine1.Engine); AADeck1[0]:=ADeck1[High(ADeck1)]; Sorry, wenn das Ganze nun etwas länger geworden ist, aber ich bin ja lernwillig ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz