Autor Beitrag
schattenlord
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 10.10.08 13:21 
Moin moin,

Ich hab jetzt dieses Jahr Informatik dazu bekommen und komm auch ganz gut zurecht. Nur bei dem Einarmigen Banditen komm ich nicht weiter.

1. Ich habe drei Stop-Buttons für jeweils ein "Rad". Wie kann ich zusammenfassen, dass wenn alle drei Buttons gedrückt worden sind, z.B. der Start-Button wieder enabled wird.

2. Ich krieg das mit den Punkten nicht hin. Wenn alle "Räder" das gleiche anzeigen, dann soll die Variable (Punkte) +500 hochzählen. Wenn aber ein "Rad" was anderes anzeigt, dann soll (Punkte) -100 folgen.

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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
var
        Form1: TForm1;
        Punkte : Integer ;
        Spiele : Integer  ;
        x,y,z : Integer ;

implementation

{$R *.DFM}





procedure TForm1.FormCreate(Sender: TObject);
begin
        Spiele:= 0 ;
        Punkte:=1500 ;
        PnlPunkte.caption:=IntToStr(punkte);
        PnlSpiele.caption:=IntToStr(Spiele) ;
        x:=40;
        y:=40;
        z:=40;
        if (x = 40and  (y = 40and (z = 40then Punkte:=Punkte +500;
        if (x = 44and  (y = 44and (z = 44then Punkte:=Punkte +500;
        if (x = 48and  (y = 48and (z = 48then Punkte:=Punkte +500;
        if (x = 52and  (y = 52and (z = 52then Punkte:=Punkte +500;
        if (x = 56and  (y = 56and (z = 56then Punkte:=Punkte +500;
        if (x = 60and  (y = 60and (z = 60then Punkte:=Punkte +500;
end;

procedure TForm1.BtnNeuClick(Sender: TObject);
begin
        punkte:=1500;
        spiele:= 0;
        PnlPunkte.caption:=IntToStr(punkte);
        PnlSpiele.caption:=IntToStr(Spiele) ;
        pnlTextausgabe.caption:= ' ';
        pnlTextausgabe.color:= clActiveBorder ;
        Timer1.enabled := false;
        Timer2.enabled := false;
        Timer3.enabled := false;
        BtnStart.enabled := true;
        BtnStop1.enabled := true;
        BtnStop2.enabled := true;
        BtnStop3.enabled := true;
end;

procedure TForm1.BtnStartClick(Sender: TObject);
begin
        Inc(spiele) ;
        PnlSpiele.caption:=IntToStr(Spiele);
        Timer1.enabled:=true;
        Timer2.enabled:=true;
        Timer3.enabled:=true;
        BtnStart.enabled := false;
        BtnStop1.enabled := true;
        BtnStop2.enabled := true;
        BtnStop3.enabled := true;
        if (x)=(y)  then Punkte := Punkte +100;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
        x:=x+4 ;
        PnlRad1.caption:=Chr(x);
        if x = 60 then x:=40;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
        y:=y+4  ;
        PnlRad2.caption:=Chr(y);
        if y = 60 then y:=40;

end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
        z:=z+4  ;
        PnlRad3.caption:=Chr(z);
        if z = 60 then z:=40;

end;

procedure TForm1.BtnStop1Click(Sender: TObject);
begin
        Timer1.enabled:=false;
        BtnStop1.enabled := false;
end;

procedure TForm1.BtnStop2Click(Sender: TObject);
begin
        Timer2.enabled:=false;
        BtnStop2.enabled := false;
end;

procedure TForm1.BtnStop3Click(Sender: TObject);
begin
        Timer3.enabled:=false;
        BtnStop3.enabled := false;

end;

end.


Vielen Dank für alle Antworten!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 10.10.08 13:29 
Hallo und :welcome: ;-)

Du kannst dir eine Methode schreiben, die du in jedem der drei ButtonClicks aufrufst. In dieser prüfst du ob alle drei Buttons nicht mehr Enabled sind (also geklickt wurden) und wenn ja, dann aktivierst du deinen anderen Button.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure CheckButtons;
begin
  if not (Form1.BtnStop1.Enabled or Form1.BtnStop2.Enabled or Form1.BtnStop3.Enabled) then
    Form1.BtnStart.Enabled := true;
end;

procedure TForm1.BtnStop1Click(Sender: TObject);
begin
  Timer1.enabled:=false;
  BtnStop1.enabled := false;
  CheckButtons;
end;
Das geht eigentlich auch noch kürzer, weil du den praktisch selben Quelltext mehrfach schreibst, aber es muss ja nicht unnötig kompliziert werden ;-).
Jerk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 251

Vista Ultimate, Ubuntu
Turbo Delphi 2006
BeitragVerfasst: Fr 10.10.08 13:31 
Du kannst Variablen auch direkt miteinander vergleichen.

ausblenden Delphi-Quelltext
1:
IF (x = y) and (y = z) then Punktehoch else Punkterunter					


Das mit den Buttons realisierst du in einer Prozedur.
Die wird bei jedem Button im Onclick aufgerufen.
In der Prozedur wird verglichen ob alle gedrückt worden sind. Da du sie ja auf Enabled := False setzt bietet sich das ja an.
Sollten alle Enabled = False sein setzt die Prozedur sie dann wieder auf true.

*edit* verdammt, zu langsam
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 10.10.08 13:38 
Ach ja, das mit den Punkten, dazu hat user profile iconJerk ja schon etwas geschrieben, und das andere ist: du machst diese Prüfung in FormCreate, das wird aber ja nur am Anfang aufgerufen. Ich vermute das gehört auch in CheckButtons hinein, also wenn alle gedrückt wurden, oder?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure CheckButtons;
begin
  if not (Form1.BtnStop1.Enabled or Form1.BtnStop2.Enabled or Form1.BtnStop3.Enabled) then
  begin
    Form1.BtnStart.Enabled := true;
    // Hier kannst du das dann machen
  end;
end;
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.10.08 13:51 
Eleganter wäre das allerdings als Methode ;) Und zum Vergleich: das ginge auch so
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if (x and y and z) = x then
  Punkterauf
else
  Punkterunter;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 10.10.08 13:56 
Dass das ganze auch viel kürzer und eleganter geht, ist klar, aber ich wollte darauf gar nicht erst weiter eingehen um nicht Verwirrung zu stiften, deshalb ja auch der Zugriff mit Form1. statt einer Methode des Formulars ;-).
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.10.08 14:04 
Bei mir ist es eben so, dass ich Zuckungen bekomme, wenn in regulären Prozeduren auf VCL-Instanzen zugegriffen wird :mrgreen:
schattenlord Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 10.10.08 14:05 
Super, Danke für die schnellen Antworten!!!