Autor |
Beitrag |
schattenlord
Hält's aus hier
Beiträge: 3
|
Verfasst: 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.
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 = 40) and (y = 40) and (z = 40) then Punkte:=Punkte +500; if (x = 44) and (y = 44) and (z = 44) then Punkte:=Punkte +500; if (x = 48) and (y = 48) and (z = 48) then Punkte:=Punkte +500; if (x = 52) and (y = 52) and (z = 52) then Punkte:=Punkte +500; if (x = 56) and (y = 56) and (z = 56) then Punkte:=Punkte +500; if (x = 60) and (y = 60) and (z = 60) then 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 10.10.08 13:29
Hallo und
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. 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
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Fr 10.10.08 13:31
Du kannst Variablen auch direkt miteinander vergleichen.
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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 10.10.08 13:38
Ach ja, das mit den Punkten, dazu hat Jerk 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? 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; end; end; |
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 10.10.08 13:51
Eleganter wäre das allerdings als Methode  Und zum Vergleich: das ginge auch so
Delphi-Quelltext 1: 2: 3: 4:
| if (x and y and z) = x then Punkterauf else Punkterunter; |
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
|
Verfasst: 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 
|
|
schattenlord 
Hält's aus hier
Beiträge: 3
|
Verfasst: Fr 10.10.08 14:05
Super, Danke für die schnellen Antworten!!!
|
|