[Delphi] 7, Ampelsteuerung :X

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Mynthaster, 15. September 2007 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 15. September 2007
    7, Ampelsteuerung :X

    Hi all,

    ich mache grad mein ABI, und habe Informatik. Das Programmieren an sich finde ich noch ganz einfach. Weil wir irgendwie mit vorgefertigten Begriffen arbeiten, die die Regierung uns gegeben hat. Nun ja egal, ich wollte grad etwas rumbasteln, für die nächste Stunde schonmal etwas vorarbeiten ^^. Und jetzt funktioniert eine Stelle nicht mehr...

    Das problem ist, ich habe Ampeln, die immer alle zusammenumschalten. Und naja da ist das Prob, ich habe 2 Bedingte Anweisungen, so ziehmlich am ende. Und sobald "Ampel Umschalten" vor "Unfallampel Umschalten" steht geht dann die eine "Ampel" jedoch net die "Unfallampel" und sobald das wieder umgedreht ist dann geht wieder die "Unfallampel" und nicht die "Ampel". Der Fehler befindet sich irgendwo in den letzten zwei Bedingten Anweisungen. Denke ich zumindest... nach dem Spoiler findet ihr nochmal die Kompletten Ordner um das auch auszuführen...

    Spoiler
    Code:
    program Ampelsteuerungundcrash;
    
    uses
     mSuM,
     mTAuto in 'mTAuto.pas',
     mTAmpel in 'mTAmpel.pas';
    
    var
     hatStift: Stift;
     hatBildschirm : Bildschirm; 
     hatTastatur : Tastatur;
     hatMaus : Maus;
     hatBuntstift: Buntstift;
     //Autos
     hatAuto : TAuto;
     hatAuto2 : TAuto;
     hatAuto3 : TAuto;
     hatAuto4 : TAuto;
     hatAutoC1 : TAuto;
     hatAutoC2 : TAuto;
     hatAmpel : TAmpel;
     hatAmpel2 : TAmpel;
     hatAmpel3 : TAmpel;
     hatAmpel4 : TAmpel;
     hatAmpelC1 : TAmpel;
     hatAmpelC2 : TAmpel;
    
    begin
    
    {----- Objekte erzeugen und initialisieren ----- }
     hatBildschirm := Bildschirm.init;
     hatStift := Stift.init;
     hatbuntstift := Buntstift.init;
     hatTastatur := Tastatur.init;
     hatMaus := Maus.init;
     hatAuto := TAuto.init(35,400,0);
     hatAuto2 := TAuto.init(625,160,270);
     hatAuto3 := TAuto.init(900,345,180);
     hatAuto4 := TAuto.init(690,650,90);
     hatAutoC1 := TAuto.init (300,400,355);
     hatAutoC2 := TAuto.init (365,400,200);
     hatAmpel := TAmpel.init(550,280);
     hatAmpel2 := TAmpel.init (730,280);
     hatAmpel3 := TAmpel.init(550,440);
     hatAmpel4 := TAmpel.init(730,440);
     hatAmpelC1 := TAmpel.init(200,440);
     hatAmpelC2 := TAmpel.init(480,280);
    
    // Kreuzung zeichnen
    hatstift.zeichneRechteck(600,320);
    hatStift.bewegeBis(0,425);
    hatStift.zeichneRechteck(600,hatbildschirm.hoehe);
    hatStift.bewegeBis(715,0);
    hatStift.zeichneRechteck(hatbildschirm.breite,320);
    hatStift.bewegeBis(715,425);
    hatStift.zeichneRechteck(hatbildschirm.breite,hatbildschirm.hoehe);
    
    // Exitknopf
    hatStift.bewegebis (5,5);
    hatStift.zeichneRechteck(50,50);
    
    //Text für Exitknopf
    hatStift.bewegeBis(18,23);
    hatStift.schreibeText('Ende');
    
    //Knopf für Ampel 1-4
    hatStift.bewegeBis(60,5);
    hatStift.zeichneRechteck(50,50);
    
    //Text für Ampelknopf 1-4
    hatStift.bewegeBis(72,23);
    hatStift.schreibeText('Ampel');
    
    //Knopf für Unfall
    hatStift.bewegeBis(115,5);
    hatStift.zeichneRechteck(50,50);
    
    //Text für Unfallknopf
    hatStift.bewegeBis(128,23);
    hatStift.schreibeText('Unfall');
    
    //haltelinie an 1
    hatbuntstift.bewegeBis(600,310);
    hatbuntstift.setzeFuellMuster(gefuellt);
    hatbuntstift.zeichneRechteck(50,10);
    hatbuntstift.setzeFuellMuster(durchsichtig);
    
    //haltelinie an 2
    hatbuntstift.bewegeBis(590,375);
    hatbuntstift.setzeFuellMuster(gefuellt);
    hatbuntstift.zeichneRechteck(10,50);
    hatbuntstift.setzeFuellMuster(durchsichtig);
    
    //haltelinie an 3
    hatbuntstift.bewegeBis(715,320);
    hatbuntstift.setzeFuellMuster(gefuellt);
    hatbuntstift.zeichneRechteck(10,50);
    hatbuntstift.setzeFuellMuster(durchsichtig);
    
    //haltelinie an 4
    hatbuntstift.bewegeBis(665,425);
    hatbuntstift.setzeFuellMuster(gefuellt);
    hatbuntstift.zeichneRechteck(50,10);
    hatbuntstift.setzeFuellMuster(durchsichtig);
    
    //UMSCHALTEN DER AMPELN
    hatampel.schalteUm;
    hatampel4.schalteUm;
    hatAmpelC1.schalteUm;
    
    // Schleife
     while not ((hatmaus.istGedrueckt) and
     (hatmaus.hPosition>5) and
     (hatmaus.hPosition<55) and
     (hatmaus.vPosition>5) and
     (hatmaus.vPosition<55)) do
     begin
    
    // AUTO 1 ANHALTEN & BEWEGEN
     if (hatampel2.farbe=ROT) and
     (hatauto.hPosition>550) and
     (hatauto.hposition<580) then
     begin
     hatauto.warte;
     end
     else
     begin
     hatauto.bewegeDich;
     end;
    
    //AUTO 2 ANHALTEN & BEWEGEN
     if (hatampel.farbe=ROT) and
     (hatauto2.vPosition>270) and
     (hatauto2.vPosition<300) then
     begin
     hatauto2.warte;
     end
     else
     begin
     hatauto2.bewegeDich;
     end;
    
    //AUTO 3 ANHALTEN & BEWEGEN
     if (hatampel3.farbe=ROT) and
     (hatauto3.hPosition>730) and
     (hatauto3.hPosition<760) then
     begin
     hatauto3.warte;
     end
     else
     begin
     hatauto3.bewegeDich;
     end;
    
    //AUTO 4 ANHALTEN & BEWEGEN
     if (hatampel4.farbe=ROT) and
     (hatauto4.vPosition>445) and
     (hatauto4.vPosition<475) then
     begin
     hatauto4.warte;
     end
     else
     begin
     hatauto4.bewegeDich;
     end;
    
     //Auto 1 auf die linke Seite
    if (hatauto.hPosition>220) and
     (hatauto.hPosition<260)
    then
     hatauto.dreheBis(45);
    
    //Auto 1 fährt auf der linken Seite
    if (hatauto.vPosition<345)
    then
     hatauto.dreheBis(360);
    
    //Auto 1 auf die recht Seite
    if (hatauto.hPosition>420) and
     (hatauto.hPosition<450)
    then
     hatauto.dreheBis(315);
    
    //Auto 1 fährt auf der rechten Seite
    if (hatauto.vPosition>365) and
     (hatauto.hPosition>475)
    then
     hatauto.dreheBis(0);
    
    // AUTO1 EINSETZEN
    if (hatAuto.hPosition>hatBildschirm.breite) then
     hatAuto.setzeAuf(0,hatAuto.vPosition);
    
    // AUTO2 EINSETZEN
    if (hatAuto2.vPosition>hatBildschirm.hoehe) then
     hatAuto2.setzeAuf(hatAuto2.hPosition,0);
    
    // AUTO3 EINSETZEN
    if (hatAuto3.hPosition<0) then
     hatAuto3.setzeAuf(hatbildschirm.breite,hatAuto3.vPosition);
    
    // AUTO4 EINSETZEN
    if (hatAuto4.vPosition<0) then
     hatAuto4.setzeAuf(hatAuto4.hPosition,hatbildschirm.hoehe);
    
    // UNFALLAMPEL UMSCHALTEN
    if (hatMaus.doppelklick) and
     (hatMaus.hposition>115) and
     (hatMaus.hposition<165) and
     (hatMaus.vPosition>5) and
     (hatMaus.vPosition<55) THEN
     begin
     hatAmpelC1.schalteUm;
     hatAmpelC2.schalteUm;
     end;
    
    // AMPEL UMSCHALTEN
    if (hatMaus.doppelklick) and
     (hatMaus.hposition>60) and
     (hatMaus.hposition<110) and
     (hatMaus.vPosition>5) and
     (hatMaus.vPosition<55) THEN
     begin
     hatAmpel.schalteUm;
     hatAmpel2.schalteUm;
     hatAmpel3.schalteUm;
     hatAmpel4.schalteUm;
     end;
    
    
    
    
    end; // Schleife
    
    
    {----- Objekte auflösen -----}
     hatStift.gibFrei;
     hatMaus.gibFrei;
     hatTastatur.gibFrei;
     hatBildschirm.gibFrei;
    
    end.
    

    http://rapidshare.com/files/55890476/Ampelsteuerung1.rar.html

    MFG
    Mynthaster
     
  2. 15. September 2007
    AW: 7, Ampelsteuerung :X

    hm. ich raff diese programmiersprache nicht so ganz... pascal ist schon seltsam.... falls es das ist. übrigens ist es eine sehr hässliche art so ein problem mit pascal lösen zu wollen oder eben delphi. aber ich bin dran am problem. eventuell find ich die lösung.
     
  3. 15. September 2007
    AW: 7, Ampelsteuerung :X

    Also, das ist halt irgendwie von der Regierung gemacht worden. Das wir das erste Jahr damit arbeiten müssen. Ich habe schon selber mit dem Lehrer geredet, das wäre schwachsinnig, so tun als ob das deutsche Begriffe wären...

    Naja, ich weiß nicht ob das Pascal ist oder Delphi. Unser Lehrer erwähnt immer beides... aber aufjedenfall ist der Fehler hier, bei den letzten 2 If setzen... ich finde den Fehler dort einfach nicht ._. ... irgendwo muss ein end oder ein ; zu viel seine denke ich, ich weiß es echt net ._.

    MFG
    Mynthaster
     
  4. 15. September 2007
    AW: 7, Ampelsteuerung :X

    das letzte end ist falsch.... end; denke ich sollte es heißen und nicht end. , wenn das der fehler ist lad dir doch einfachmal einen compiler herunter und lass ihn die fehler finden
     
  5. 15. September 2007
    AW: 7, Ampelsteuerung :X

    naja, bei deinem problem blick ich grad selbst net so ganz durch (ebenfalls info im abi, aber als lk^^), aber zu deiner frage wegen pascal und delphi:
    delphi ist eine ide (=entwicklungsumgebung) für object-pascal, eine oo-unterstützende weiterentwicklung von pascal, eine alternative wäre zum beispiel das opensource-programm lazarus, benutzt die selbe sprache, heißt aber net delphi und hat auch was mit pascal zutun;-)...mfg coach
     
  6. 16. September 2007
    AW: 7, Ampelsteuerung :X

    Also das letzte end. ist schon richtig so mit einem . , daran liegt es aufjedenfall nicht. Wo der Fehler ist keine Ahnung, werde wahrscheinlich meinen Lehrer fragen müssen...

    Außerdem, ich wollte auf Infomatik als LK gibt aber zu wenig dafür and er Schule immer, also haut das nicht ganz hin ._. ...

    Wer den Fehler findet kriegt nen Keks! =D

    MFG
    Mynthaster
     
  7. 16. September 2007
    AW: 7, Ampelsteuerung :X

    ist es ein logikfehler oder ein syntaxfehler oder oder oder? oder hat dein lehrer nichts dazu gesagt
     
  8. 16. September 2007
    AW: 7, Ampelsteuerung :X

    Seit 2003 heißt Object-Pascal auch Delphi
     
  9. 16. September 2007
    AW: 7, Ampelsteuerung :X

    Moin

    Schreib am Ende anstatt der beiden If-Abfragen, folgendes:
    Code:
    if (hatMaus.doppelklick) and
     (hatMaus.vPosition>5) and
     (hatMaus.vPosition<55) THEN
     begin
     // UNFALLAMPEL UMSCHALTEN
     if (hatMaus.hposition>115) and
     (hatMaus.hposition<165) THEN
     begin
     hatAmpelC1.schalteUm;
     hatAmpelC2.schalteUm;
     end;
     // AMPEL UMSCHALTEN
     if (hatMaus.hposition>60) and
     (hatMaus.hposition<110) THEN
     begin
     hatAmpel.schalteUm;
     hatAmpel2.schalteUm;
     hatAmpel3.schalteUm;
     hatAmpel4.schalteUm;
     end;
    end;
    Jetzt funzt es

    Jedoch weiß ich nicht warum es mit dem vorherigen Code nicht funktioniert hat......

    //Edit: Vlt kann man die Abfrage des Doppelklicks nur einmal in einem bestimmten Zeitraum machen.....
    Ist zwar irgendwie unlogisch könnte aber sein........

    Greetz
     
  10. 18. September 2007
    AW: 7, Ampelsteuerung :X

    Jo K-Ni, da hast du recht gehabt, habe deinen Post leider vor der Informatik Stunde nimmer gesehen.

    Er meint auch das die Doppelklicks, sozusagen nicht reagieren könne, einfach mit einmal klick gemacht dann hat es funktioniert. Aber K-Ni war schon richtig mit dem Zeitraum, cih selber wäre nicht drauf gekommen

    Bw für alle =D

    MFG
    Mynthaster
     
  11. 18. September 2007
    AW: 7, Ampelsteuerung :X

    Kling nach erledigt?!

    Knusperkeks
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.