Ampel



  • ja das ist das programm wo die schleife rein soll, so laeuft es einmal durch und dann ist ende, ich bekomm dann nur keine gescheite schleife rein, er hoert dann nie auf... macht ein nach dem anderen mal die ampel durch. hab immer ueber der ersten while schleife noch eine gemacht da muesste es ja richtig sein.



  • Okay, hier mal ein Quelltext, der nicht ganz zu deiner Aufgabe passt:

    #include <cstdlib>
    #include <iostream>
    
    #include <graphics.h>
    
    using namespace std;
    
    void leuchte(int pos, int lcolor)
    {
        int hpos;
        hpos = 88 + pos * 140;
        setcolor(lcolor);
        setfillstyle(1, lcolor);
        fillellipse(76, hpos, 49, 49);
    }
    
    int main(int argc, char *argv[])
    {
        int gdriver = DETECT, gmode, errorcode;  // gdriver, gmode <- only old Borland?
    
        int x, y;        // x and y pixel coordinates of a mouse click
        bool green_clicked; // Changes to true when a green pixel is clicked
        bool red_clicked = 0; // Changes to true when a red pixel is clicked
    
    //Grafikfenster grösse 150x500
        initwindow(150, 500);
    
    //Linien im Grafikfenster für die Ampel
        line(140, 10, getmaxx()-9, getmaxy()-50);
        line(9, 10, getmaxx()-140, getmaxy()-50);
        line(9, 10, getmaxx()-9, getmaxy()-489);
        line(9, 449, getmaxx()-9, getmaxy()-50);
        outtextxy(10,467,"Signal kommt");
    
    //read result of initialization
        errorcode = graphresult();
        if (errorcode != grOk) // Wenn ein Fehler Auftritt
        {
            printf("Graphics error: %s\n", grapherrormsg(errorcode));
            printf("Press any key to halt:");
            getch();
            exit(1); //Mit einen Fehlercode beenden
        }
    //Kreis 1 im Grafikfenster für Ampel
        leuchte( 0, RED);
    
    //Kreis 2 im Grafikfenster für Ampel
        leuchte( 1, YELLOW);
    
    //Kreis 3 im Grafikfenster für Ampel
        leuchte( 2, GREEN);
    
        do
        {
            if (ismouseclick(WM_LBUTTONDOWN))   // grün anforden
            {
                getmouseclick(WM_LBUTTONDOWN, x, y);
                green_clicked = (getpixel(x, y) == GREEN); // wenn rot dann auf Position des grünen Mausklicken
                red_clicked = (getpixel(x, y) == BROWN);   // gelb-aus -> Programm beenden
            }
    
            if(green_clicked)
            {
                green_clicked=0;
                leuchte( 1, BROWN);
                Sleep(1000);
                leuchte( 0, 250);
                Sleep(1000);
                leuchte( 1, YELLOW);
                Sleep(2000);
                leuchte( 0, RED);
                leuchte( 1, BROWN);
                leuchte( 2, LIGHTGREEN);
                Sleep(10000);
    
                leuchte( 2, GREEN);
                leuchte( 1, YELLOW);
                Sleep(2000);
                leuchte( 1, BROWN);
                leuchte( 0, 250);
            }
        }
        while(!red_clicked);
    
        cout << "The mouse was clicked at: "; // check the mouse ;)
        cout << "x=" << mousex( );
        cout << " y=" << mousey( ) << endl;
    
    //Grafikfenster und Konsole schliessen
        closegraph();
    
        return EXIT_SUCCESS;
    }
    

    Starten -> warten -> wenn sie wieder rot ist, auf dem grünen Feld klick oder auf dem gelben/braunen, wenn es nicht leuchtet zum beenden klick.

    verzögern: nimm ruhig delay

    Der Quelltext ist nicht zum 1:1 zum kopieren, es sein denn ihr wollt nicht die volle Punktzahl 😃 🤡 🕶

    Und es geht ohne getch() oder system(bla) und ähnliche Krücken 😉

    MfG f.-th.



  • ok danke 😉
    ich werd mir da wieder was zurecht basteln ^^

    hoffe das ist jetzt mein letztes problem 😃

    nochmals danke f.-th und dir anderen (vielleicht hats dir ja bisschen spass gemacht xD)

    mfg ExEcUt!oNeR



  • erinnert mich an meine Anfänge mit grafischen Oberflächen 🕶

    An meinem letzten Quelltext geht noch was zu feilen 👍

    Aber du sollst das ja eh noch ein wenig anders lösen.

    Hab das nicht getestet, aber ich denke auf Wunsch sind auch andere Schriften, also grösser oder bunt möglich.

    MfG f.-th.



  • so hab es rein bekommen 😉 hab rechtslick option gemacht 😉
    rechtsklick macht jetzt abbruch links wiederholt 😉
    (weiss nichtmal ob ich das machen sollte =D)

    aber damit ist das hier abgeschlossen 😃

    ich danke euch nochmal alle die mir tipps/geholfen haben!!!

    mfg ExEcUt!oNeR

    Edit: -.- jetzt ist mir wieder was aufgefallen...

    wenn ich druecke er den ablauf auch schon macht kann ich nochmal raufklicken und er macht dann direkt noch einen durchlauf wenn der erste durch ist(oder mit rechts brichts eben direkt ab). wie bekomm ich das hin das erst dann wieder klicken kann wenn er durchgelaufen ist?



  • Habt ihr eigentlich die Ampel an?



  • Dann kombinierst du halt die Mausabfrage mit den Farben der Ampel. Das ist eine Möglichkeit. Die andere lässt erst dann wieder eine Mausabfrage nach einem abgeschlossenem Zyklus zu.

    MfG f.-th.



  • f.-th. schrieb:

    Die andere lässt erst dann wieder eine Mausabfrage nach einem abgeschlossenem Zyklus zu.

    Das andere kann ich nicht machen weil wir den knopf haben muessen.
    ich kann mir darunter nichts vorstellen mit abgeschlossenem zyklus.
    und google schmeisst mir dafuer auch nichts raus :o.
    bei dir hast du es ja ueber farben gemacht, aber wie mach ich das jetzt das er erst nach durchlauf naechste mausabfrage macht?

    und was meinst du mit "Habt ihr eigentlich die Ampel an? "???



  • Am einfachsten kann ich das wahrscheinlich an deinem Quelltext zeigen, wenn du den zeigen möchtest. Eventuell reicht die Schleife: do -while als Codeausschnitt.

    MfG f.-th.



  • wieder raus genommen...

    so sieht der jetzt aus 😉 denke mal ist auch noch nicht perfekt, hab ich schon gesehen bei dir wegegn 3 mal void lechte ^^ aber es geht :).



  • Ich bin jetzt ein wenig ratlos. Die Maus wird doch erst wieder ausgewertet, wenn der Zyklus, also, von grün über rot und wieder zu grün, beendet ist 😕

    folgenden Codeabschnitt lass besser in deinem Quellcode:

    //read result of initialization
        errorcode = graphresult();
        if (errorcode != grOk) // Wenn ein Fehler Auftritt
        {
            printf("Graphics error: %s\n", grapherrormsg(errorcode));
            printf("Press any key to halt:");
            getch();
            exit(1); //Mit einen Fehlercode beenden
        }
    

    Der prüft schon mal ob die Grafikbibliothek eingebunden wird.

    Die Kommentare in Zeile 36 + 37 halte ich für nicht richtig. Überlege noch mal was da besser hin kommt.
    i + p brauchst du gar nicht -> setze statt i -> d = Dummy , wenn du die Leuchten so ansteuern möchtest.

    Was hältst du hiervon:

    while(!dunkelgrau_klicken1); // Dunkelgrauer Knopf wurde mit Rechtsklick bestaetigt -> do-while-ende
    

    Nur so eine Idee:
    Vielleicht noch "Signal anfordern" ergänzen - wenn du links klickst, dann "Signal kommt" - eventuell dann schwarz oder "Signal anfordern"

    MfG f.-th.



  • wenn ich p raus nehme will er kein druck signal mehr und faengt sofort mir signal kommt an O.o.
    ja bei deinen programm kann ich ja auch erst klicken wenn die farbe wieder da ist, versteh ich nicht bei mir. denke aber das es so ok sein wird ^^. falls dir noch was einfaellt kannst du es noch gerne schreiben hab noch bis 13.1 zeit, da muss ich es abgeben.

    ok den fehlercode schreib ich wieder rein ;), das mit dem Singal anfordern werde ich mal erfragen, weil in der aufgabe steht da nichts von ^^.
    ich weiss nichtmal ob wir da oeffters drauf druecken muessen oder ob das ok war nach einen durchlauf.



  • ups... hab zitiert wollte edit 😉



  • Okay kann dein Problem mit dem Mouseklick nun reproduzieren.
    Hängt scheinbar mit der Maus double-click-Mimik zusammen.

    Hier die Jungs scheinen ähnliche Probleme und eine Lösung dazu zu haben:
    http://forum.chip.de/maus-tastatur-controller/maus-macht-manchmal-doppelklick-logitech-g7-939072.html

    Da sich das bei mir in Grenzen hält, lasse es ich erst mal so wie es ist.

    MfG f.-th.



  • danke, aber meine maus macht kein doppelklick :o
    und sonst hab ich da nichts anderes gelesen ;).
    aber ich werde das jetzt so lassen, anscheint sollte ich auch kein abbruchbefehl haben.
    aber in der aufgabe steht ja auch nicht das sie sich wiederholen soll 😉
    also wird das jetzt so abgegeben.

    besten dank nochmal 🙂

    mfg ExEcUt!oNeR


Anmelden zum Antworten