AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Array an procedure übergeben

Ein Thema von Igotcha · begonnen am 23. Dez 2003 · letzter Beitrag vom 28. Dez 2003
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#11

Re: Array an procedure übergeben

  Alt 23. Dez 2003, 17:49
Delphi hat mit zwar gleichen Typendeklaration einige Progleme.

So geht es NICHT:
Delphi-Quellcode:
type EDummy = array of EKarte;

function MixECards(const AParam: EDummy): EDummy;

var P1EKarte: Array of Ekarte;

{P1EKarte <> AParam}
So dürfte es geh'n:
Delphi-Quellcode:
type EDummy = array of EKarte;

function MixECards(const AParam: EDummy): EDummy;

var P1EKarte: EDummy;

{P1EKarte = AParam}
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#12

Re: Array an procedure übergeben

  Alt 23. Dez 2003, 17:54
@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.

Ich halte mich auch nicht an diesen sogenanten "Standard", hab mir ein eigenes System zur Namensvergabe im laufe der Jahre angeeignet.
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#13

Re: Array an procedure übergeben

  Alt 23. Dez 2003, 18:04
Zitat von himitsu:
Die Namen sind Delphi total egal.
Das ist mir bewusst, himitsu. Bis auf wenige Ausnahmen (zB Prozedur Register zum Registrieren von Komponenten) muss man bei Delphi auch nicht auf Groß-/Kleinschreibung achten.

Zitat von himitsu:
Diese "Vorgaben" für die Namensvergabe [..] ist nur zum einfachen lesen/verständnis der Quellcodes gedacht [..].
Und genau das ist der Punkt: Der Grund, warum man häufig zur Hochsprache greift ist eben die bessere Verständlichkeit der (fremden) Quellen . Das Resultat hätte man auch in ASM oder gar mit puren Opcodes realisieren können. Die "Quelle, von der ich das nabe" heißt im übrigen VCL/CLX und schuf eine gewisse Einstellung zu Bedeutungen von Bezeichnern.
Oder würdest Du hinter EConvertError eine Klasse zur Darstellung von Schachfiguren erwarten, deren Dartellungsmethode sinnigerweise Create heißt? Technisch machbar.

Zitat von himitsu:
Und das was Igotcha da geschrieben hat, sind mit Sicherheit nur Beispiele und sehen nicht im direkten Zusammenhang mit dem Prog.
Und da war ich eben nicht ganz so sicher, gut dass Du mich in dieser Hinsicht beruhigt hast
gruß, choose
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Array an procedure übergeben

  Alt 28. Dez 2003, 01:23
Zitat von himitsu:
Delphi hat mit zwar gleichen Typendeklaration einige Progleme.
Das beschriebene Problem konnte ich ja nun mittlerweile lösen, jetzt tritt für mich aber erneut ein (wahrscheinlich) ähnlich geartetes Problem auf - sind meine ersten Versuche mit Klassen und Objekten:

Delphi-Quellcode:
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;
In der Game-Unit ist deklariert

type ADummy = array of TACard; und

ADeck1, AADeck1: ADummy; Erstellt werden die ADeck1-Objekte in einer Schleife mit:

Delphi-Quellcode:
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;
Das Mischen der Karten funktioniert mit Eurer Hilfe nun super mit:

Delphi-Quellcode:
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;
Wenn in der Mischroutine

AParam[ix]:=AParam[ir]; funktioniert, warum klappt dann dies nicht?

Delphi-Quellcode:
Setlength(AADeck1,1);
  AADeck1[0]:=TACard.Create(frmMain.DXSpriteEngine1.Engine);
  AADeck1[0]:=ADeck1[High(ADeck1)];
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.

Sorry, wenn das Ganze nun etwas länger geworden ist, aber ich bin ja lernwillig
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz