Entwickler-Ecke
Free Pascal - Einarmiger Bandit
Aaron2608 - Do 17.12.15 17:16
Titel: Einarmiger Bandit
allo,
Ich will einen Einarmigen Bandit programmieren mit 3 Bildern.
Die Bilder heißen bei mir ABild & BBild.
Es muss kein Betrag sonder nur der Text Verloren oder Gewonnen im Panel2 ausgegeben werden
Ich habe auf den Button geschrieben
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); begin
Image1.picture.loadfromfile ('ABild'); Image2.picture.loadfromfile ('ABild'); Image3.picture.loadfromfile ('ABild'); Image1.picture.loadfromfile ('BBild'); Image2.picture.loadfromfile ('BBild'); Image3.picture.loadfromfile ('BBild'); if (Image1 = Image2) AND (Image3 = Image1) then panel2.caption:=('gut') ; end; |
Ich habe mehere Probleme , wie bekomme ich es hin dass die Bilder gemischt werden also neu gewürfelt ?
Wenn ich das Programm starte und auf den Button drücke kommt unable to load file 'ABild'
Ich bin noch sehr neu & habe bis jetzt alle Aufgaben geschafft aber ich komme nicht weiter...
Moderiert von Martok: Delphi-Tags hinzugefügt
Mathematiker - Do 17.12.15 17:44
Hallo
und :welcome:
Mit den Anweisungen
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Image1.picture.loadfromfile ('ABild'); Image2.picture.loadfromfile ('ABild'); Image3.picture.loadfromfile ('ABild'); Image1.picture.loadfromfile ('BBild'); Image2.picture.loadfromfile ('BBild'); Image3.picture.loadfromfile ('BBild'); |
wird in jedes Image jedes Bild geladen. Am Ende steht in allen BBild.
Du benötigst eine zufällige Auswahl. Dazu gibt es die Anweisung random().
Mit auswahl:=random(2) wird eine zufällig Zahl 0 oder 1 (nicht 2!) "gewürfelt". Mit if-then-else wird
Delphi-Quelltext
1: 2: 3:
| Auswahl:=random(2); if Auswahl=0 then Image1.picture.loadfromfile ('ABild') else Image1.picture.loadfromfile ('BBild'); |
Kürzer ist
Delphi-Quelltext
1: 2:
| if random(2) then Image1.picture.loadfromfile ('ABild') else Image1.picture.loadfromfile ('BBild'); |
Willst du noch mehr Bilder auswählen, muss der Wert in random entsprechend erhöht werden. Dann solltest du case statt if-then-else nutzen.
Nebenbei: In der show-Methode des Formulars solltest du randomize schreiben. Das garantiert bei jedem Programmstart eine neue Zufallsfolge.
Deine Bilder haben bestimmt einen Typ. Schöner wäre also 'ABild.bmp', 'ABild.jpg' oder entsprechend. Andernfalls findet er die Dateien nicht. Evtl. musst du auch noch den Ordner angeben.
Für die Ausgabe solltest du auch if-then-else verwenden, also
Delphi-Quelltext
1: 2:
| if (Image1 = Image2) AND (Image3 = Image1) then panel2.caption:='gut' else panel2.caption:='......'; |
Beste Grüße
Mathematiker
ub60 - Do 17.12.15 18:40
Aaron2608 hat folgendes geschrieben : |
Wenn ich das Programm starte und auf den Button drücke kommt unable to load file 'ABild'
|
Möglicherweise heißt Dein Bild nicht "ABild", sondern "ABild.bmp" oder "ABild.png". Das solltest Du mal testen.
Ich weiß auch nicht, ob LoadFromFile überhaupt Bilder ohne Dateinamenserweiterung einliest.
ub60
Jumpy - Do 17.12.15 18:48
Quelltext
1:
| if (Image1 = Image2) AND (Image3 = Image1) |
wird den dabei jemals was rauskommen? Image1 ist doch nicht gleich Image2, nur weil die gerade das selbe Bild darstellen, oder sehe ich das falsch?
Auch wenn der TE noch sehr neu ist, wäre es doch hier vielleicht sinnvoll mit z.B. 3 (String-)variablen zu arbeiten, wo ein zufälliger Dateiname (der Bilder) drin gespeichert wird. Zu jedem Image kann dann über den Dateinamen in der Variablen das passende Bild geladen werden und der obige Vergleich benutzt dann halt diese Variablen zum Vergleich und das geht ja dann.
Das mehrfache Zuweisen von Bildern zur Image-Komponente könnte ein Versuch des TE sein die wechselnden Bildchen in einem einarmigen Banditen darzustellen? Falls er das damit erreichen wollte, müsste man sich dafür auch mal ein Konzept überlegen, z.B. mit einem Timer solange die anfgezeigten Bildchen (zufällig) wechseln, bis ein Button gedrückt (=Hebel gezogen) wird und dann erst die dann vorhandene Darstellung Auswerten.
Mathematiker - Do 17.12.15 18:51
Hallo,
Jumpy hat folgendes geschrieben : |
Quelltext 1:
| if (Image1 = Image2) AND (Image3 = Image1) |
wird den dabei jemals was rauskommen? Image1 ist doch nicht gleich Image2, nur weil die gerade das selbe Bild darstellen, |
Du hast recht. Den Fehler habe ich glatt übersehen. :cry:
Mathematiker
Jumpy - Do 17.12.15 19:20
Mit den folgenden Bausteinen könnte man es vllt. umsetzen, hoffe ihr seht das nicht als zuviel geholfen an:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| const Bilder: array[0..5] od String = ('BildA.bmp','BildB.bmp','BildC.bmp','BildD.bmp','BildE.bmp','BildF.bmp',); Bilderverzeichnis='Verzeichnis wo die Bilder liegen';
var Walzen:Array of Integer; Bilderanzahl:Integer;
procedure Form_Create(...) begin ... Bilderanzahl=Length(Bilder); SetLength(Walzen,3); Randomize; ... end;
procedure ButtonStart_Click(...) begin Timer.Enabled=True; end;
procedure ButtonStop_Click(...) begin Timer.Enabled=False; If WalzenbilderAlleGleich then panel2.Capion:='gut'; end;
function WalzenbilderAlleGleich:Boolean; begin Result:= (Walzen[0]=Walzen[1]) and (Walzen[0]=Walzen[2]); end;
procedure Timer_OnTimer(...) var i:integer; begin Timer.Enabled=False; for i=0 to 2 do Walzen[i]:=Random(Bilderanzahl); BilderAnzeigeAktualisieren; Timer.Enabled=true; end;
procedure BilderAnzeigeAktualisieren; begin Image1.Picture.LoadFromFile(Bilderverzeichnis+Bilder[Walzen[1]]); usw. end; |
P.S.: Es gibt auch einen krassen Crosspost im parallelen DP-Universum, den ich aber nicht verlinke :)
Moderiert von Martok: Code- durch Delphi-Tags ersetzt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!