Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Spielautomat


Lancer - Do 12.12.19 20:45
Titel: Spielautomat
Hallo Leute!
Ich bin neu auf dem Forum und kenne mich daher noch nicht so gut aus.Ich habe mich jetzt dazu entschlossen eine Frage zu stellen da keine der zum Thema gefundenen Antworten mir so wirklich weiterhelfen.Das kann daran liegen das ich erst seit Anfang der 11 angefangen habe zu Programmieren.Mir ist es echt wichtig die Dinge zu verstehen da ich vor habe auch mein Studium in richtung Informatik anzuvisieren:).

Also zu meinem Problem bzw meiner Frage:

ich soll einen Spielautomat mit 3 Slots Programieren.Hierzu habe ich mir uberlegt Timages zu nutzen und diese Übereinander zu legen. Diese sollen dann beim Start abwechselnt und zufällig Sichtbar und unsichtbar sein.So der Plan.Dann habe ich gedacht auch noch einen Timer dafür zu verwenden das der Wechsel der Sichtbarkeit der Bilder automatisch erfolgt.Hier auch eine Frage. Gibt es eine einfachere Lösung dafür?Zb eine Schleife?Soweit erstmal dazu.Später soll dann auch noch eine Gewinnauschüttung erfolgen Pro Runde.Dazu habe ich mir noch nicht so gedanken gemacht aber ich denke da in die Richtun: jedem bild ein wert zuweisen und dann am ende die gerade gezeigten bilder zusammrechnen und in ein Memo ausgegben zu lassen...ja so denke ich könnte es gehen.Ich kann halt leider bis jetzt nur auf relativ simple vorgehensweisen zurückgreifen und hoffe durch dieses Forum viel zu lernen. :D Ich weiß leider nicht wie man den Quellcode hier einfügt deswegen werde ich den einfach hier unten drunter packen.

Vielen dank im Vorraus!:)

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:
48:
49:
50:
var
  Form1: TForm1;
  bild , timer :integer;
implementation

{$R *.dfm}

procedure TForm1.BstartClick(Sender: TObject);
begin
 randomize;
 timer1.Interval:=10000;
 timer1.Enabled:=true;
 bild:=random (4)+1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Brush.Color:=clgreen;
timer1.Enabled:=false;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

if bild=1 then
image1.Visible:=true;
image2.Visible:=false;
image3.Visible:=false;
image4.Visible:=false;

if bild=2 then
image1.Visible:=false;
image2.Visible:=true;
image3.Visible:=false;
image4.Visible:=false;

if bild=3 then
image1.Visible:=false;
image2.Visible:=false;
image3.Visible:=true;
image4.Visible:=false;

if bild=4 then
image1.Visible:=false;
image2.Visible:=false;
image3.Visible:=false;
image4.Visible:=true;
end;

end.


Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 13.12.2019 um 09:46


Gausi - Do 12.12.19 23:17

Hallo und :welcome: in der Entwickler-Ecke!

Wenn ich die "Absätze" in deinem Code richtig interpretiere, dann fehlt bei den ganzen If-Abfragen die Blockbildung. Denn statt


Delphi-Quelltext
1:
2:
3:
4:
5:
if bild=1 then 
image1.Visible:=true; 
image2.Visible:=false; 
image3.Visible:=false; 
image4.Visible:=false;

meinst du ja sicherlich so etwas, oder?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if bild=1 then
begin 
  image1.Visible:=true; 
  image2.Visible:=false; 
  image3.Visible:=false; 
  image4.Visible:=false;
end;


Ich weiß auch nicht ganz genau, was du dir vorstellst, was da passieren soll (Timer-Intervall von 10000 bedeutet ja, dass da alle 10 Sekunden was passiert...ist das nicht viel zu langsam?), aber deinen ganzen "Bilder-Code" kann man aktuell so abkürzen:


Delphi-Quelltext
1:
2:
3:
4:
image1.Visible := (Bild = 1);
image2.Visible := (Bild = 2);
image3.Visible := (Bild = 3);
image4.Visible := (Bild = 4);


So soll Image1 ja genau dann sichtbar sein, wenn die Variable "Bild = 1" ist, und entsprechend für die anderen 3 Bilder ebenso.


Lancer - Fr 13.12.19 01:10

Hi,
Danke für die schnelle Antwort :D. Die Tips sind echt super ich denke das hilft mir wirklich weiter. Ich werde das morgen gleich mal probieren.

Danke :D

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Das mit dem 10 Sekundentimer war so ein Geistesblitz von mir xD. Da hatte ich den Verdacht das mein Programm nur solange läuft wie der Timer läuft.
Da hatte ich aber auch eine glorreiche Idee mit einer While do Schleife. So ähnlich (while timer. Interval <10000 do...).
Wie gesagt ich bin noch in den Anfängen und deshalb wirklich dankbar für die Hilfe :)


Holgerx - Fr 13.12.19 09:14

Hmm..

Es geht in diesem Beispiel auch kürzer :wink:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  image1.Visible := (bild = 1);
  image2.Visible := (bild = 2);
  image3.Visible := (bild = 3);
  image4.Visible := (bild = 4);
end.


Blub..
Zu Früh am Mogen, stand ja schon in nem Beitrag vorher.. :?


Lancer - Fr 13.12.19 10:12

Haha ja stimmt :lol: