Autor Beitrag
MydroF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Mo 10.08.09 16:34 
Hi.

Hab für nen Klickspiel mal einen Code gefunden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.L1Click(Sender: TObject); //start level 1
Var zeit:double;
begin

B11.Visible:=true;
Zeit:=now+1.0*(1.0/86400.0);
while (now<=Zeit) do Application.processMessages;
B11.Visible:=false;
end;


Man clickt also den Startbutton, ein anderer Button wird sichtbar, drückt man auf diesen, würde er wieder unsichtbar werden, und ein neuer Button erscheint, usw.
Klickt man den erscheinenden Button nicht innerhalb einer Sekunde an, verschwindet er wieder, und man muss wieder den Startbutton (L1) drücken.

Nun wollte ich den Button Variablenabhängig machen. Wenn man ein Level wählt, wird dementsprechend in dementsprechenden Editfeld eine '1' aktiv, und eine Variable (die eine Zeit angibt) wird abgefragt.

Das sollte nun so aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.L1Click(Sender: TObject); //start level 1
Var zeit,a:double;
begin
if (Lev1Var.Text='1'then a:=strtofloat(Lev11.Text);
if (Lev2Var.Text='1'then a:=strtofloat(Lev12.Text);
if (Lev3Var.Text='1'then a:=strtofloat(Lev13.Text);
if (Lev3Var.Text='1'then a:=strtofloat(Lev14.Text);

B11.Visible:=true;
Zeit:=now+a*(1.0/86400.0);
while (now<=Zeit) do Application.processMessages;
B11.Visible:=false;
end;


In den Lev11.Text (Editfelder), Lev12.Text, usw. stehen die Anzahl der Sekunden, die dann in der Variable a auftauchen sollen. Nur leider funktioniert der Code nicht. Wahrscheinlich liegts daran, dass "a" in der Rechnung nicht erkannt wird als sekundenanzahl=(

Wie soll der Code aussehen, damits funzt?

Moderiert von user profile iconGausi: Color-Tags durch Delphi-Tags ersetzt.
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Mo 10.08.09 16:44 
Hi,

und :welcome: im Forum. Was mir aufgefallen ist:

ausblenden Delphi-Quelltext
1:
if (Lev1Var.Text='1'then a:=strtofloat(Lev11.Text);					


einmal hast du da ein "Var", ich weiss nicht, ob das so gewollt ist, andererseits:

ausblenden Delphi-Quelltext
1:
if (Lev1Var.Text='1'then a:=strtofloat(Lev11.Text);					


Kann es sein, dass da eine "1" zu viel ist, wenn du links 1 (bzw. 2,3..) und rechts 11 (bzw. 12,13..) stehen hast?

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
MydroF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Mo 10.08.09 16:50 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Hat seine Richtigkeit, die Editfelder sind so von mir benannt worden, damit ich mich aus den zig Editfeldern herausfinde.
Ein Klick auf den "Leicht" Button bei der Levelabfrage, lässt in dem Editfeld "Lev1Var" eine "1" erscheinen, bei "Mittel" im Editfeld "Lev2Var", usw...

im Editfeld "Lev11" steht nun die Anzahl der Sekunden, die ich für Stufe "leicht" auswähle, klickt der Spieler "leicht", soll jeder Button für a=(Lev11.Text) Sekunden aktiv sein...

ziemlich kompliziert %P
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 10.08.09 17:26 
Moin und :welcome: im Forum!

Du programmierst nicht ereignisorientiert und dein Absatz mit den vielen Edit-Feldern ist auch nicht gerade "übersichtlich" (-> und deshalb nicht pflegeleicht). :nixweiss:

Analysieren wir doch mal das Konzept:
  1. Der Button wird angezeigt
  2. Es wird ein Timer gestartet, wenn dieser Abläuft -> Game Over
  3. Wird der Button zwischendurch angeklickt, wird der Game-Over-Timer gestoppt, der Button irgendwohin verschoben (oder was auch immer), ein paar Punkte gezählt und der Game-Over-Timer wieder gestartet
  4. Das ganze läuft so lange, bis der Game-Over-Timer zuschlägt (man könnte zwischendurch auch die Game-Over-Zeitspanne verkürzen -> Level-Konzept)
Ich würde sagen, du brauchst bei diesem Ansatz:
  • einen Button, mit dem man das Spiel startet
  • den Weiter-Klick-Button
  • einen Timer für die Game-Over-Erkennung
  • falls du das mit den Leveln umsetzen willst, wäre ein Array mit den Zeitangaben für das Timeout nötig
Dazu nach Geschmack ein Label für das aktuelle Timeout und evtl. noch eins für den aktuellen Level. Fertig. :idea:

Dein aktueller Ansatz basiert auf einer APM-Schleife, das solltest du auf jeden Fall durch einen TTimer ersetzen (ist schnell genug dafür, so schnell kann jedenfalls keiner Klicken)! :|

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.