Autor Beitrag
Aaron2608
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 17.12.15 17:16 
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

ausblenden 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 user profile iconMartok: Delphi-Tags hinzugefügt
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Do 17.12.15 17:44 
Hallo
und :welcome:
Mit den Anweisungen
ausblenden 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
ausblenden Delphi-Quelltext
1:
2:
3:
Auswahl:=random(2);
if Auswahl=0 then Image1.picture.loadfromfile ('ABild')
             else Image1.picture.loadfromfile ('BBild');

Kürzer ist
ausblenden Delphi-Quelltext
1:
2:
if random(2then 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
ausblenden Delphi-Quelltext
1:
2:
  if (Image1 = Image2) AND (Image3 = Image1) then panel2.caption:='gut'
                                             else panel2.caption:='......';


Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: Do 17.12.15 18:40 
user profile iconAaron2608 hat folgendes geschrieben Zum zitierten Posting springen:

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
Hält's aus hier
Beiträge: 23
Erhaltene Danke: 5



BeitragVerfasst: Do 17.12.15 18:48 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Do 17.12.15 18:51 
Hallo,
user profile iconJumpy hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Jumpy
Hält's aus hier
Beiträge: 23
Erhaltene Danke: 5



BeitragVerfasst: 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:

ausblenden volle Höhe 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 user profile iconMartok: Code- durch Delphi-Tags ersetzt