Entwickler-Ecke
Sonstiges (Delphi) - Einarmiger Bandit
schattenlord - Fr 10.10.08 13:21
Titel: Einarmiger Bandit
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.
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 = 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 - 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.
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 - 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 - 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; |
Delete - 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 - 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 ;-).
Delete - 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 - Fr 10.10.08 14:05
Super, Danke für die schnellen Antworten!!!
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!