Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bildarrays mit zusätzlichen Werten versehen (https://www.delphipraxis.net/142670-bildarrays-mit-zusaetzlichen-werten-versehen.html)

KING_OF_BONGO 1. Nov 2009 12:44


Bildarrays mit zusätzlichen Werten versehen
 
Hi,
ich schreibe gerade ein Programm über Black Jack und habe dazu Bildarrays verwendet,
um die Spielkarten zufällig anzeigen zu lassen, dass klappt auch alles soweit. Jetzt
muss ich aber den Arrays noch Werte zuordnen, um dem Spieler die aktuelle Augenzahl
seiner Karten anzeigen zu lassen. Vorweg ich bin ein Neuling in Delphi und habe gerade
erst mit Programmieren angefangen. Wie kann ich das umsetzen, dass den Bildarrays zusätzlich
zu ihrem Dateipfad, auch noch Werte zugeordnet werden können?


Quellcode:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin

  randomize;
  bildarray[1] :='data\Black Jack Karten\1_1_K.bmp';
  bildarray[2] :='data\Black Jack Karten\1_2_Q.bmp';
  bildarray[3] :='data\Black Jack Karten\1_3_J.bmp';
  bildarray[4] :='data\Black Jack Karten\1_4_10.bmp';
  bildarray[5] :='data\Black Jack Karten\1_5_9.bmp';
  bildarray[6] :='data\Black Jack Karten\1_6_8.bmp';
  bildarray[7] :='data\Black Jack Karten\1_7_7.bmp';
  bildarray[8] :='data\Black Jack Karten\1_8_6.bmp';
  bildarray[9] :='data\Black Jack Karten\1_9_5.bmp';
  bildarray[10] :='data\Black Jack Karten\1_10_4.bmp';
  bildarray[11] :='data\Black Jack Karten\1_11_3.bmp';
  bildarray[12] :='data\Black Jack Karten\1_12_2.bmp';
  bildarray[13] :='data\Black Jack Karten\1_13_A.bmp';
  bildarray[14] :='data\Black Jack Karten\2_1_K.bmp';
  bildarray[15] :='data\Black Jack Karten\2_2_Q.bmp';
  bildarray[16] :='data\Black Jack Karten\2_3_J.bmp';
  bildarray[17] :='data\Black Jack Karten\2_4_10.bmp';
  bildarray[18] :='data\Black Jack Karten\2_5_9.bmp';
  bildarray[19] :='data\Black Jack Karten\2_6_8.bmp';
  bildarray[20] :='data\Black Jack Karten\2_7_7.bmp';
  bildarray[21] :='data\Black Jack Karten\2_8_6.bmp';
  bildarray[22] :='data\Black Jack Karten\2_9_5.bmp';
  bildarray[23] :='data\Black Jack Karten\2_10_4.bmp';
  bildarray[24] :='data\Black Jack Karten\2_11_3.bmp';
  bildarray[25] :='data\Black Jack Karten\2_12_2.bmp';
  bildarray[26] :='data\Black Jack Karten\2_13_A.bmp';
  bildarray[27] :='data\Black Jack Karten\3_1_K.bmp';
  bildarray[28] :='data\Black Jack Karten\3_2_Q.bmp';
  bildarray[29] :='data\Black Jack Karten\3_3_J.bmp';
  bildarray[30] :='data\Black Jack Karten\3_4_10.bmp';
  bildarray[31] :='data\Black Jack Karten\3_5_9.bmp';
  bildarray[32] :='data\Black Jack Karten\3_6_8.bmp';
  bildarray[33] :='data\Black Jack Karten\3_7_7.bmp';
  bildarray[34] :='data\Black Jack Karten\3_8_6.bmp';
  bildarray[35] :='data\Black Jack Karten\3_9_5.bmp';
  bildarray[36] :='data\Black Jack Karten\3_10_4.bmp';
  bildarray[37] :='data\Black Jack Karten\3_11_3.bmp';
  bildarray[38] :='data\Black Jack Karten\3_12_2.bmp';
  bildarray[39] :='data\Black Jack Karten\3_13_A.bmp';
  bildarray[40] :='data\Black Jack Karten\4_1_K.bmp';
  bildarray[41] :='data\Black Jack Karten\4_2_Q.bmp';
  bildarray[42] :='data\Black Jack Karten\4_3_J.bmp';
  bildarray[43] :='data\Black Jack Karten\4_4_10.bmp';
  bildarray[44] :='data\Black Jack Karten\4_5_9.bmp';
  bildarray[45] :='data\Black Jack Karten\4_6_8.bmp';
  bildarray[46] :='data\Black Jack Karten\4_7_7.bmp';
  bildarray[47] :='data\Black Jack Karten\4_8_6.bmp';
  bildarray[48] :='data\Black Jack Karten\4_9_5.bmp';
  bildarray[49] :='data\Black Jack Karten\4_10_4.bmp';
  bildarray[50] :='data\Black Jack Karten\4_11_3.bmp';
  bildarray[51] :='data\Black Jack Karten\4_12_2.bmp';
  bildarray[52] :='data\Black Jack Karten\4_13_A.bmp';
end;

procedure TForm1.Spiel_startenClick(Sender: TObject);

begin
  Spiel_starten.visible:=False;
  Karte2.visible:=True;
  stay.visible:=True;
  zufall1:=Random (52)+1;
  Image1.Picture.LoadFromFile(bildarray[zufall1]);
  Image5.Picture.LoadFromFile('data\Black Jack Karten\Karte_verdeckt.bmp');
end;

procedure TForm1.Karte2Click(Sender: TObject);
begin

  Karte2.visible:=False;
  Karte3.visible:=True;

  Repeat
  zufall2:=Random(52)+1;
  Until zufall3<zufall1;

  Image2.Picture.LoadFromFile(bildarray[zufall2]);
end;

procedure TForm1.Karte3Click(Sender: TObject);
begin

   Karte3.visible:=False;
   Karte4.visible:=True;

   Repeat
   zufall3:=Random(52)+1;
   Until zufall3>zufall1;

   Image3.Picture.LoadFromFile(bildarray[zufall3]);

end;

procedure TForm1.Karte4Click(Sender: TObject);
begin

   Karte3.visible:=False;
   Karte4.visible:=False;

   Repeat
   zufall4:=Random(52)+1
   Until zufall4>zufall3;
   Image4.Picture.LoadFromFile(bildarray[zufall4]);

end;
PS: Wenn sich jemand wundert, warum ich immer noch direkte Pfade benutze, obwohl
es mir von vielen ans Herz gelegt wurde absolute Pfade zu benutzen, dann kann
ich nur sagen, dass ich wie bereits gesagt ein Anfänger in Delphi bin und auch
verstehen möchte was ich da zu "Papier" bringe, um mich in diesem Bereich weiterzubilden.
Daher bitte ich um euer Verständnis.

KING_OF_BONGO

Klaus01 1. Nov 2009 12:47

Re: Bildarrays mit zusätzlichen Werten versehen
 
Hallo,

du könntest Dir eine Record basteln welche diese Informationen bereithält.

Delphi-Quellcode:
type
  TBildInfo = record
     pfad : AnsiString;
     ...
  end;

  TBildArray = array of TBildInfo;

[edit]
Zitat:

PS: Wenn sich jemand wundert, warum ich immer noch absolute Pfade benutze, obwohl
es mir von vielen ans Herz gelegt wurde direkte Pfade zu benutzen, dann kann
ich nur sagen, dass ich wie bereits gesagt ein Anfänger in Delphi bin und auch
verstehen möchte was ich da zu "Papier" bringe, um mich in diesem Bereich weiterzubilden.
Daher bitte ich um euer Verständnis.
Du benutzt relative Pfade und solltest absolute benutzen.

Grüße
Klaus

DeddyH 1. Nov 2009 12:49

Re: Bildarrays mit zusätzlichen Werten versehen
 
Oder aus dem Record eine Klasse machen und in einer TObjectList verwalten. Funktionieren sollten beide Varianten.

patti 1. Nov 2009 12:52

Re: Bildarrays mit zusätzlichen Werten versehen
 
Da Klaus01 schneller war als ich hier noch eine kleine Ergänzung.

Für den Wert der Spielkarten könntest du einen eigenen Typ definieren:

Delphi-Quellcode:
type TWert = (kwEins, kwZwei (* und so weiter*), kwAss);
So kannst du dann beispielsweise auf die einzelnen Werte zugreifen:

Delphi-Quellcode:
BildArray[1].Pfad := 'Dein Pfad';
BildArray[1].KartenWert := kwKoenig;
Patti

vsilverlord 1. Nov 2009 12:57

Re: Bildarrays mit zusätzlichen Werten versehen
 
ja, mit dem record hätte ich das jetzt auch gemacht. Im übrigen würde ich statt einem array eine Liste benutzen (tlist). Die ist einfacher zu handhaben, und du hast keine scherereinen mit dem speicher und mit der verwaltung, falls du irgendetwas änderts du löschst:
Delphi-Quellcode:
type
  TBildInfo = record
     pfad : AnsiString;
     wert: integer;
//...
  end;

 Bilderliste = tlist;
//(...)
procedure karteninitialisieren;
var
karte:tbildinfo;
begin
bild.pfad:= 'data\Black Jack Karten\1_1_K.bmp';
bild.wert:= 14142;
bilderliste.add(bild);
bild.pfad:= 'data\Black Jack Karten\1_2_Q.bmp';
bild.wert:= 1352;
bilderliste.add(bild);
// usw.
Das abrufen funktioniert genauso wie bei einem array:
Delphi-Quellcode:
bilderliste.items[1].pfad
bilderliste.items[1].wert

himitsu 1. Nov 2009 12:58

Re: Bildarrays mit zusätzlichen Werten versehen
 
auch wenn hier welche schneller getippt haben (oder ich nur langsam bin) ...
nja, immerhin nochmal alles zusammen :angel:

wie du siehst, kann man selbst mit absoluten Pfaden übersichtlicher arbeiten :angel:
Delphi-Quellcode:
type
  TBildInfo = record
     Datei: String;
     ...
  end;

  TBildArray = array of TBildInfo;


// dieses im Private-Abschnitt deiner Form definieren
BildVerzeichnis: String;


procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  BildVerzeichnis := ExtractFilePath(Application.ExeName) + 'data\Black Jack Karten\';
  bildarray[1].Datei :='1_1_K.bmp';
  bildarray[2].Datei :='1_2_Q.bmp';
  bildarray[3].Datei :='1_3_J.bmp';
  bildarray[4].Datei :='1_4_10.bmp';
  bildarray[5].Datei :='1_5_9.bmp';
  bildarray[6].Datei :='1_6_8.bmp';
  ...
end;

procedure TForm1.Spiel_startenClick(Sender: TObject);
begin
  Spiel_starten.visible:=False;
  Karte2.visible:=True;
  stay.visible:=True;
  zufall1:=Random (52)+1;
  Image1.Picture.LoadFromFile(BildVerzeichnis + bildarray[zufall1]);
  Image5.Picture.LoadFromFile(BildVerzeichnis + 'Karte_verdeckt.bmp');

DeddyH 1. Nov 2009 13:00

Re: Bildarrays mit zusätzlichen Werten versehen
 
Zitat:

Zitat von vsilverlord
Im übrigen würde ich statt einem array eine Liste benutzen (tlist). Die ist einfacher zu handhaben, und du hast keine scherereinen mit dem speicher und mit der verwaltung, falls du irgendetwas änderts du löschst

Das gilt aber nur für TObjectList mit OwnsObjects auf true, ansonsten musst Du Dich selbst um den Speicher kümmern oder eine eigene Ableitung von TList schreiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 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