AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi HILFE! Fehler im "Bild"-Zufallsgenerator
Thema durchsuchen
Ansicht
Themen-Optionen

HILFE! Fehler im "Bild"-Zufallsgenerator

Ein Thema von KING_OF_BONGO · begonnen am 31. Okt 2009 · letzter Beitrag vom 31. Okt 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
KING_OF_BONGO

Registriert seit: 29. Okt 2009
21 Beiträge
 
Delphi 5 Standard
 
#1

HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 13:43
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 , wie gesagt ich bin ein Neuling
in diesem Bereich und deswegen sieht der Quellcode nicht ganz so professionell aus .

Ich würde mich über Hilfe sehr freuen.

KING_OF_BONGO
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 13:46
Hi! Du musst randomize vor dem ersten aufruf von random setzen, damit der Zufallszahlengenerator richtig initialisiert wird
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#3

Re: HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 13:46
ruf randomize vor random auf.
randomize sollte eh nur einmal im programm aufgerufen werden, im oncreate zb.
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 13:49
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.
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 13:51
Und relative Pfade sind auch "böse", verwende absolute. Den Pfad zum eigenen Programm bekommst Du mit ExtractFilePath(ParamStr(0)).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#6

Re: HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 13:54
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.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 13:58
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.
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 14:08
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#9

Re: HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 14:08
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 ) [/OT]
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
KING_OF_BONGO

Registriert seit: 29. Okt 2009
21 Beiträge
 
Delphi 5 Standard
 
#10

Re: HILFE! Fehler im "Bild"-Zufallsgenerator

  Alt 31. Okt 2009, 14:48
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 13:11 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