![]() |
HILFE! Fehler im "Bild"-Zufallsgenerator
Hallo,
ich bin ein Neuling in Delphi(allgemein im programmieren) und bin derzeit am Programmieren eines Spieles über Black Jack, mithilfe von Delphi 5. Die jeweiligen Karten müssen zufällig generiert werde, dies hab ich mithilfe von Arrays versucht,
Delphi-Quellcode:
jedoch wenn ich auf den Button klicke erscheint das erste mal immer die selbe Karte,
procedure TForm1.Spiel_startenClick(Sender: TObject);
var zufall1,zufall2: Integer; bildarray: array[1..52] of string; begin Spiel_starten.visible:=False; hit.visible:=True; stay.visible:=True; bildarray[1] :='data\Black Jack Karten\1_1_K.bmp'; //Karten als Array aufgelistet 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'; begin zufall1 := Random (52)+1; zufall2 := zufall1+Random(5); randomize; Image1.Picture.LoadFromFile(bildarray[zufall1]); Image5.Picture.LoadFromFile('data\Black Jack Karten\Karte_verdeckt.bmp'); end; end; obwohl ich versucht habe dies mit Randoms zu umgehen :gruebel: , wie gesagt ich bin ein Neuling in diesem Bereich und deswegen sieht der Quellcode nicht ganz so professionell aus :lol:. Ich würde mich über Hilfe sehr freuen. KING_OF_BONGO |
Re: HILFE! Fehler im "Bild"-Zufallsgenerator
Hi! Du musst randomize vor dem ersten aufruf von random setzen, damit der Zufallszahlengenerator richtig initialisiert wird :)
|
Re: HILFE! Fehler im "Bild"-Zufallsgenerator
ruf randomize vor random auf.
randomize sollte eh nur einmal im programm aufgerufen werden, im oncreate zb. |
Re: HILFE! Fehler im "Bild"-Zufallsgenerator
Außerdem macht dein Quelltext so wie du ihn gepostet hast keinen Sinn. Du hast zwei "begin-end"-Blöcke, was so nicht sein kann. Außerdem würde ich dir raten, das "Befüllen" des Arrays auch nur EINMAL auszuführen, beispielweise im OnCreate, denn so wie es jetzt ist, wird es jedesmal ausgeführt, wenn geklickt wird, obwohl sich ja am Array-Inhalt nichts ändern sollte.
|
Re: HILFE! Fehler im "Bild"-Zufallsgenerator
Und relative Pfade sind auch "böse", verwende absolute. Den Pfad zum eigenen Programm bekommst Du mit ExtractFilePath(ParamStr(0)).
|
Re: HILFE! Fehler im "Bild"-Zufallsgenerator
Zitat:
|
Re: HILFE! Fehler im "Bild"-Zufallsgenerator
Und ich bin mir ziemlich sicher, dass sich sich das Befüllen des Arrays deutlich vereinfachen lässt. Mach es so wie DeddyH es vorgeschlagen hat und besorge dir erstmal den richtigen Pfad:
Delphi-Quellcode:
Anschließend kannst du mit einer doppelten Schleife dein Array mit Inhalten befüllen:
var pfad : string;
begin //-- pfad := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'data\Black Jack Karten\';
Delphi-Quellcode:
So kannst du dein Array viel effektiver befüllen. Du musst beachten, dass deine Bild-Dateien dementsprechend benannt sein müssen, also aus "1_1_K.bmp" machst du beispielsweise "1_1.bmp", ich denke die zusätzliche Angabe für den Wert der Karte kannst du dir im Dateinamen sparen.
for i1 := 1 to 4 do
begin for i2 := 1 to 13 do begin BildArray[(i1-1)*13+i2] := pfad + i1 + '_' + i2 + '.bmp'; end; end; Patti Edit: Kleinen Fehler im Quelltext angepasst. @alleinherrscher: Okay, das mit den zwei Blöcken stimmt vielleicht. Es mag funktionieren, aber gerade einem Anfänger würde ich raten, sauber zu programmieren, bevor sich "Fehler" oder "Unsauberkeiten" in den Stil einschleichen. |
Re: HILFE! Fehler im "Bild"-Zufallsgenerator
Zusammenfassung der Vorschläge:
Delphi-Quellcode:
[edit] Befüllen des Array in 2 Schleifen gelegt [/edit]
//Pfad zu den Bildern als Konstante hinterlegen, spart Schreibarbeit
const Bildpfad = 'data\Black Jack Karten\'; //der Einfachheit halber globale Variablen, normalerweise würde man private Felder deklarieren var bildarray: array[1..52] of string; Pfad: string; procedure TForm1.FormCreate(Sender: TObject); const KartenJeFarbe: array[1..13] of string = ('K','Q','J','10','9','8','7','6','5','4','3','2','A'); var i,j: integer; begin Randomize; Pfad := ExtracFilePath(ParamStr(0)) + Bildpfad; for i := 0 to 3 do for j := Low(KartenJeFarbe) to High(KartenJeFarbe) do bildarray[i * Length(KartenJeFarbe) + j] := Format('%d_%d_%s.bmp',[i + 1,j,KartenJeFarbe[j]]); end; procedure TForm1.Spiel_startenClick(Sender: TObject); var zufall1{,zufall2 wird nie benutzt}: Integer; begin Spiel_starten.visible:=False; hit.visible:=True; stay.visible:=True; zufall1 := Random (52)+1; // zufall2 := zufall1+Random(5); Image1.Picture.LoadFromFile(Pfad + bildarray[zufall1]); Image5.Picture.LoadFromFile(Pfad + 'Karte_verdeckt.bmp'); end; |
Re: HILFE! Fehler im "Bild"-Zufallsgenerator
Zitat:
|
Re: HILFE! Fehler im "Bild"-Zufallsgenerator
Hi,
ich habe meinen Quellcode euren Vorschlägen halbwegs angepasst.
Delphi-Quellcode:
Jetzt bekomme ich jedoch einen EInvalidGraphic Fehler(Unbekannte Bilddateierweiterung), wenn ich auf Spiel Starten gehe,
var //bildarray als globale Variable
Form1: TForm1; bildarray: array[1..52] of string; implementation {$R *.DFM} 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); var zufall1,zufall2:integer; begin Spiel_starten.visible:=False; hit.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; obwohl ich eigentlich das Format .bmp benutze. Was hab ich falsch gemacht??? KING_OF_BONGO |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 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