Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi HILFE! Fehler im "Bild"-Zufallsgenerator (https://www.delphipraxis.net/142626-hilfe-fehler-im-bild-zufallsgenerator.html)

KING_OF_BONGO 31. Okt 2009 13:43


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:
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;
jedoch wenn ich auf den Button klicke erscheint das erste mal immer die selbe Karte,
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

alleinherrscher 31. Okt 2009 13:46

Re: HILFE! Fehler im "Bild"-Zufallsgenerator
 
Hi! Du musst randomize vor dem ersten aufruf von random setzen, damit der Zufallszahlengenerator richtig initialisiert wird :)

fwsp 31. Okt 2009 13:46

Re: HILFE! Fehler im "Bild"-Zufallsgenerator
 
ruf randomize vor random auf.
randomize sollte eh nur einmal im programm aufgerufen werden, im oncreate zb.

patti 31. Okt 2009 13:49

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.

DeddyH 31. Okt 2009 13:51

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)).

alleinherrscher 31. Okt 2009 13:54

Re: HILFE! Fehler im "Bild"-Zufallsgenerator
 
Zitat:

Zitat von patti
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.

Zwar ist der innere begin end block überflüssig, aber das tut dem Code nix, er macht sinn und sollte auch funktionieren. Und das Array...okay...aber es funktioniert auf jedenfall so und für einen Anfänger Code geht das so in Ordnung, denke ich.

patti 31. Okt 2009 13:58

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:
var pfad : string;
begin
   //--
   pfad := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'data\Black Jack Karten\';
Anschließend kannst du mit einer doppelten Schleife dein Array mit Inhalten befüllen:

Delphi-Quellcode:
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;
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.

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.

DeddyH 31. Okt 2009 14:08

Re: HILFE! Fehler im "Bild"-Zufallsgenerator
 
Zusammenfassung der Vorschläge:
Delphi-Quellcode:
//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;
[edit] Befüllen des Array in 2 Schleifen gelegt [/edit]

alleinherrscher 31. Okt 2009 14:08

Re: HILFE! Fehler im "Bild"-Zufallsgenerator
 
Zitat:

Zitat von patti
@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.

[OT] Da gebe ich dir vom Prinzip her vollkommen recht. Ich hab damals angefangen zu programmieren, als in 10 Jahre alt war, damals noch mit Qbasic. Ich kannte den Befehl "cls" für Clear Screen noch nicht und habe daher 20x untereinander print "" geschrieben, sodass der Text nach oben verschoben wurde - und ich war stolz, dass es funktioniert hat - ich glaub, wenn ich immer nur sauber programmiert hätte, hätte ich früh den spass dran verloren - ich war da ganz pragmatisch: Wenns funktioniert wars in Ordnung :) Irgendwann hab ich dann nicht mehr durch meine Programme durchgeblickt, und dann hab ich anfangen, sauber zu programmieren :thumb: ) [/OT]

KING_OF_BONGO 31. Okt 2009 14:48

Re: HILFE! Fehler im "Bild"-Zufallsgenerator
 
Hi,
ich habe meinen Quellcode euren Vorschlägen halbwegs angepasst.

Delphi-Quellcode:
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;
Jetzt bekomme ich jedoch einen EInvalidGraphic Fehler(Unbekannte Bilddateierweiterung), wenn ich auf Spiel Starten gehe,
obwohl ich eigentlich das Format .bmp benutze.

Was hab ich falsch gemacht???

KING_OF_BONGO


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.
Seite 1 von 4  1 23     Letzte »    

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