Fahrstuhl 3 Etagen

Für Fragen von Einsteigern und Programmieranfängern...
lazarus047
Beiträge: 7
Registriert: Mi 10. Sep 2014, 16:53

Fahrstuhl 3 Etagen

Beitrag von lazarus047 »

Hallo,
ich habe ein Problem bei meinem Infoprojekt, ich versuch einen Fahrstuhl mit 3 Buttons auf jeder Etage zu programmieren. Mein Problem ist das er die Variabel nicht annimmt. Hier ein kurzer Ausschnitt aus meinem Quelltext:
procedure TForm1.tRufen2Timer(Sender: TObject);
begin
i:=i+1;
if img.top=600 then
img.Top:=img.top-i;
if img.top=300 then
tRufen2.enabled:=false;
end;
Habt ihr irgendwelche Lösungsansätze für dieses Problem.
Ich bedanke mich im Vorraus für jede Hilfe.
Dateianhänge
Lazarus.bmp
Lazarus.bmp (2.3 MiB) 3376 mal betrachtet

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Fahrstuhl 3 Etagen

Beitrag von mse »

Bitte führe ein wenig aus was "das er die Variabel nicht annimmt" bedeutet.
Zum Thema Fahrstuhlsimulation mit Free Pascal gibt es hier ein Kapitel.

lazarus047
Beiträge: 7
Registriert: Mi 10. Sep 2014, 16:53

Re: Fahrstuhl 3 Etagen

Beitrag von lazarus047 »

Ja also damit meinte ich das sobald man i bei img.top einträgt sich der Fahrstuhl garnicht mehr bewegt. Trägt man allerdings die Koordinaten dirt ein klappts.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Fahrstuhl 3 Etagen

Beitrag von Michl »

Ich rate mal ins Blaue, wenn img.top = 300 ist, dann wird der Timer tRufen2 auf False gestellt und ist somit aus.

Na mal ganz ehrlich, mit der Fragestellung wird Dir hier wahrscheinlich niemand eine wirklich hilfreiche Antwort geben können. Wenn Du Schwierigkeiten hast, das Problem genau zu beschreiben, wäre es wahrscheinlich das Einfachste, Du lädst hier Dein Projekt (kompletter Quellcode als .zip) hoch und beschreibst, was Du machst und was Du erhoffst, was Dein Programm dann machen soll und wo es dann klemmt.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Fahrstuhl 3 Etagen

Beitrag von mse »

Hast du schon mal einen Haltepunkt in die fragliche procedure gesetzt und bist sie Schritt für Schritt mit F8 durchgegangen und hast die Variablenwerte kontrolliert ob sie tun was du dir vorstellst? Machmal wird man dabei sehr überrascht.

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Fahrstuhl 3 Etagen

Beitrag von baumina »

Kleiner Tipp : Eine globale Variable mit dem Namen i ist gar nicht gut. Gib ihr einen vernünftigen Namen. Wenn eine Variable i heißt, sollte diese nur lokal für z.B. for-Schleifen verwendet werden. Evtl. verbirgt sich da ja auch schon das Problem. Wenn du nämlich eine globale UND eine lokale Variable i haben solltest, ist das Chaos perfekt.
.

lazarus047
Beiträge: 7
Registriert: Mi 10. Sep 2014, 16:53

Re: Fahrstuhl 3 Etagen

Beitrag von lazarus047 »

So habe jetzt die Datei als Zip angehängt, werde mich heute Abend noch weiter damit beschäftigen. Werde dann nochmal berichten.
Dateianhänge
Fahrstuhl.zip
(4.15 MiB) 125-mal heruntergeladen

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Fahrstuhl 3 Etagen

Beitrag von Mathias »

Was ich nicht verstehe, wieso hast du auf jeder Etage 3 Knöpfe. Bei uns im Haus, hat es dort nur eine Knopf, dafür hat es im Lift selbst für jede Etage einen Knopf.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Fahrstuhl 3 Etagen

Beitrag von Socke »

Mathias hat geschrieben:Was ich nicht verstehe, wieso hast du auf jeder Etage 3 Knöpfe. Bei uns im Haus, hat es dort nur eine Knopf, dafür hat es im Lift selbst für jede Etage einen Knopf.

Ich habe neulich einen Fahrstuhl mit 4 bis 5 Knöpfen auf jeder Etage gesehen; sinnvoll waren davon vielleicht "Hoch", "Runter" und "Hoch oder Runter"; bei dem Rest war keine Beschriftung dran.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Fahrstuhl 3 Etagen

Beitrag von Mathias »

sinnvoll waren davon vielleicht "Hoch", "Runter"

Diese beiden Knöpfe machen bei stark beanspruchten Lifts Sinn..
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Fahrstuhl 3 Etagen

Beitrag von Michl »

Ich habe mir eben auch Dein Projekt runtergeladen. Ich habe keine Ahnung wie Du Dir die Struktur Deines Programms vorstellst. Das ist bisher nicht wirklich zu erkennen.

lazarus047 hat geschrieben:Mein Problem ist das er die Variabel nicht annimmt.
Ich weiss auch nicht, ob Dir das hilft. Eine sichtbare Bewegung bekommst Du z.B. so hin:

Code: Alles auswählen

procedure TForm1.btRufen2Click(Sender: TObject);
begin
  tRufen2.enabled:=true;
end;
 
procedure TForm1.tRufen2Timer(Sender: TObject);
begin
  i:=i+1;
//  if img.top=600 then
    img.Top:=img.top-i;
  if img.top=300 then
    tRufen2.enabled:=false;
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

lazarus047
Beiträge: 7
Registriert: Mi 10. Sep 2014, 16:53

Re: Fahrstuhl 3 Etagen

Beitrag von lazarus047 »

So habe jetzt denn Quellcode von Michl ausprobiert, dieser hat mir auch sehr weitergeholfen.Habe lediglich noch das Problem das einzelne Koordinaten vom Timer übersprungen werden. Werde nochmal berichten.

lazarus047
Beiträge: 7
Registriert: Mi 10. Sep 2014, 16:53

Re: Fahrstuhl 3 Etagen

Beitrag von lazarus047 »

Habe den Fahrstuhl nun soweit, dass er problemlos in die 2. Etage fährt und dann auch nach unten fährt, allerdings kriege ich es jetzt nicht hin das er auch in der 1. Etage anhält. Das Problem ist, das er irgendwie die Koordinaten zum anhalten überspringt. Gibt es vielleicht irgendeine Formel um die Zahl auszurechnen die ich für i benötige(i:=i+ die Zahl), damit er bei circa img.top=300 anhält. Es geht nur um die beiden Timer tRufen2 und tRufen22.
Ich hänge meine Dateien nochmal an.
Dateianhänge
Fahrstuhl.zip
(4.15 MiB) 120-mal heruntergeladen

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Fahrstuhl 3 Etagen

Beitrag von Mathias »

Ich konnte es nicht lassen und habe in der schnelle einen Lift programmiert. Optisch könnte er noch bessser sein. :wink:

Man könnte es noch eleganter machen, wen man die Button dynamisch erzeugt. Z.B. mit eine Auswahl am Anfang mit anzahl Stockwerken.
Dateianhänge
Lift.zip
(830.21 KiB) 138-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

lazarus047
Beiträge: 7
Registriert: Mi 10. Sep 2014, 16:53

Re: Fahrstuhl 3 Etagen

Beitrag von lazarus047 »

Habe jetzt nur noch das Problem das wenn ich z.B. if img.top < 600 then tRufen3.enabled:=true; habe, dass dann bei allen Werten kleiner 600 der Timer aktiviert wird. gibt es jetzt noch eine Möglichkeit das man Lazarus sagen kann, dass der Timer zwischen 590 und 600 angeht und nicht bei allen Werten unter 600.

Antworten