Autor Beitrag
extend your life
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 05.01.12 21:38 
hey, :)
in meinem Informatikkurs sollen wir mit delphi oder lazarus ein "kleines Spiel" erstellen und ich habe mich für eine vereinfachte Art des Hütchenspiels entschieden. Anstatt der drei Hütchen/Becher gibt es nur drei Kreise und das darunterliegende steinchen soll als aufleuchten des Kreises dargestellt werden. Bis jetzt habe ich mit Random ein zufällige reihenfolge erstellt, aber man muss immer wieder auf den Startknopf drücken, damit ein neuer Krei aufleuchtet. Es soll nach und nach schneller werden und am Ende soll man 3 Knöpfe zur auswahl haben, wo man tippt, welcher der zuletzt rot werdende Kreis war. danach soll angezeigt werden, ob es stimmt. Die Idee muss auf jeden Fall noch ausgearbeitet werden, aber im Moment habe ich das Problem, dass ich es nicht hinbekomme, dass es von allein wechselt und dann nach einer bestimmten zeit wieder aufhört. Und das mit der Auflösung klappt auch hinten und vorn nicht :? ... ich hoffe, ihr könnt mir helfen und wenn es geht, bitte relativ einfach erklärt. :oops:
Einloggen, um Attachments anzusehen!
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Do 05.01.12 22:28 
Hallo extend your life,

Willkommen im Forum :welcome:
Bitte für verschiedene Probleme Demnächst mehre Themen eröffnen.

Hier aber dennoch ein paar Hilfen:
1) Weiterschalten der Farbe:
Für den Anfang reicht ein Timer. In einer globalen Variablen merkst du dir welcher Kreis Aufleuten soll. In der Timer Mehtode färbst Du die Kreise entsprechend ein. Damit es schneller geht kannst Du die Timerzeit runterstellen. Wenn es dann nicht mehr leutchten soll, so chalte den Timer aus und "entfärbe" alle Kreise.
b) keine Methode zum Start ist nicht übersichtlich erstellt.
statt
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.StartClick(Sender: TObject);
begin
    z := random(3) +1;
    if z = 1 then shape1.brush.color:=clred;
    if z = 2 then shape2.brush.color:=clred;
    if z = 3 then shape3.brush.color:=clred;

    if z = 2 then shape1.brush.color:=clblack;
    if z = 3 then shape1.brush.color:=clblack;

    if z = 1 then shape2.brush.color:=clblack;
    if z = 3 then shape2.brush.color:=clblack;

    if z = 1 then shape3.brush.color:=clblack;
    if z = 2 then shape3.brush.color:=clblack;

end;


besser so etwas:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.StartClick(Sender: TObject);
begin
    z := random(3) +1;
    //Kreise färben Anfang
    if z = 1 then begin
     shape1.brush.color:=clred;
     shape2.brush.color:=clblack;
     shape3.brush.color:=clblack;
    end;
    if z = 2 then begin
     shape2.brush.color:=clred;
     shape1.brush.color:=clblack;
     shape3.brush.color:=clblack;
    end;
    if z = 3 then begin
      shape3.brush.color:=clred;
      shape1.brush.color:=clblack;
      shape2.brush.color:=clblack;
    end;
   //Kreise färben Ende
end;

Mit einem case-Statement geht es auch.

c) Die Auflösung:
Die Shape Objekte haben mehrere Ereignisse. Ein Ereigniss dass Du verwenden könntest ist "OnMouseUp".
Ein guter Weg ist wenn Du eine Methode "NutzerWahl(Kreisnummer:integer)" erstellt, für jedes Kreisobjekt einen Aufruf nachdem Muster
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  NutzerWahl(1//Weil Shape1
end;

erstellst und in der Methode "NutzerWahl" prüfst du der richtige Kreis ausgewählt wurde.
d) Ebenfalls gut ist es das initiale Färben der Kreise aus der Startmethode (zwischen "Kreise färben Anfang" und "Kreise färben Ende" in eine extra Methode zu schreiben -> vermeidung redundanter Code (buzzwords DRY und KISS)

Viel Erfolg und viel Lernerfolg!
Tilo
extend your life Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 06.01.12 15:57 
Soweit hab ich es jetzt hinbekommen, vielen Dank für die antwort! :) Aber ich versteh noch nicht, wie ich nach z.B. 10 sekunden den 1. Timer ausschalte und dann den 2. schnelleren Timer einschalte... ich hab schon im internet gesucht, aber vieles hat nciht funktioniert, wie die downto schleife, da springt sofort der 2. Timer an. Naja, die Lösung passt auch nocht nich, ich weiß nicht, wie der erkennen kann, welcher kreis zu letzt rot war und den dann anzeigt.
lg extend your life ;)
Einloggen, um Attachments anzusehen!
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Fr 06.01.12 19:21 
Ein Timer Objekt wird über die Eigenschaft "Enabled" gesteuert.
Im ersten Timer prüfst du ob eine Abbruchbedinung erfüllt ist (z.B. Laufzeit zeit Start des Timers). Ist die Bedinung erfültt so wird der erste Timer gestoppt und der 2. Timer gestartet.

Welcher Kreis zuletzt rot war steckt in deiner Variable "z" mit der Du die Färbung der Kreise steuerst.

Schönes Wochenende
Tilo
extend your life Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 07.01.12 14:23 
gibt es für meine Auflösung einen begriff wie 'show variable' oder so? tut mir leid, ich steh echt aufm schlauch. :?
hm, danke schonmal und wenn ich mein projekt vorstellen muss, zeige ich meinem kurs dieses forum :wink:
lg extend your life und noch ein schönes restliches wochenende :)
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Sa 07.01.12 17:54 
Hallo extend your life,

Die "Auflösung" kannst Du auf verschiedenen Wegen realisieren.
Hier nur 2 Möglichkeiten:
- Ausgabe in einem Popup, z.B. mit MessageDlg()
- Auf dem Formular ein Ausgabeobjekt (z.B. ein Tedit) und diesem das Ergebniss zuweisen

Einen schönen Samstagabend,
Tilo

Für diesen Beitrag haben gedankt: extend your life
extend your life Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 08.01.12 17:43 
habs dann doch geschafft ;) ich hoffe, mein lehrer ist zufrieden, auf jeden fall hab ich viel gelernt. danke! :zustimm: