Cursor bewegen und "X" drucken! (Game of Life)



  • Hallo,

    Wir sollten das Spiel "Game of Life" programmieren. Ich denke vielen ist das ein Begriff für meine Frage sind die genauen Spielregeln aber eigentlich auch nicht notwendig.

    Zunächst sollte ein Feld mit 22 Zeilen und 78 Spalten geschaffen werden, indem sich das Spiel bewegt.

    Neben vorgegebenen Mustern sollten wir nun den Benutzer auch die Möglichkeit geben ein eigenes Muster zu gestalten und das durchlaufen zu lassen.
    Dafür soll man den Cursor bewegen können z.B mit w a s d und mit enter schließlich ein X drucken.

    Soweit habe ich das Programm fertig. Nur weiß ich nicht wie ich in diesem spezial Fall vorgehen soll. Es wäre nett wenn mir hier jemand helfen könnte.

    mit freundlichen Grüßen


  • Mod

    Eine Konsolen-basierte Oberfläche benötigt eine entsprechende Konsolenbibliothek. Das ist leider ziemlich stark Betriebssystemabhängig. Welches darf es sein?



  • Das sind befehle die wir haben:

    bool cls();
    bool setCursor( int zeile, int spalte);
    bool setColor( int color );

    void cursorOff();
    void cursorOn();



  • Jetzt benötigst du nur etwas wie getch() oder GetKeyState() (je nach System), um die Tastendrücke einzulesen, dann kannst du sie in Bewegungen des Cursors übersetzen.



  • aber wie bewege ich den cursor denn? muss ich das nicht auch noch irgendwie programmieren?



  • Du merkst dir die aktuelle Cursor-Position und dann hast du deine Funktion bool setCursor( int zeile, int spalte); , die zumindest so aussieht als ob sie das gewünschte erledigt 😉



  • Ich hab das jetzt so:

    void cursorOn();
    setCursor(0,0);

    ist aber total falssch... Ich find irgendwie keinen ansatz wie ichda jetzt weiter vor gehen soll



  • Nach der Anweisungsfolge sollte der Cursor eigentlich in der linken oberen Bildschirmecke blinken - wenn du jetzt etwas ausgibst, wird es auch genau dorthin geschrieben. Für deine Anwendung solltest du dir die aktuelle Position in zwei Variablen packen und dann in einer großen Schleife auf Tastendrücke reagieren:

    while(...)
    {
      switch(getch()
      {
        case 'a': --x; break;
        case 'w': --y; break;
        ...
        case '\n': putc('X',stdout);
      }
      setCursor(x,y);
    }
    


  • CStoll schrieb:

    Nach der Anweisungsfolge sollte der Cursor eigentlich in der linken oberen Bildschirmecke blinken - wenn du jetzt etwas ausgibst, wird es auch genau dorthin geschrieben. Für deine Anwendung solltest du dir die aktuelle Position in zwei Variablen packen und dann in einer großen Schleife auf Tastendrücke reagieren:

    while(...)
    {
      switch(getch()
      {
        case 'a': --x; break;
        case 'w': --y; break;
        ...
        case '\n': putc('X',stdout);
      }
      setCursor(x,y);
    }
    

    Ich kann ja prima blöd dastehen, deshalb frage ich mal:

    getch() fragt Tastendrücke ab, ohne auf eine Bestätigung mit CR oder NL zu warten?
    Oder ist cursorOn und cursorOff dafür gedacht, die entsprechenden Systembefehle abzusetzen bevor und nachdem ein Tastendruck erfolgt?



  • ausprobieren? oder bist du eher der c-theoretiker 🤡



  • Ich hab meine eigenen extra zusammengestöpselten "Ich-nehme-mir-nur-eine-Taste"-Funktionen (und natürlich meine "Ich-bremse-auch-für-Key-Sequenzen-um-Sondertasten-zu-erkennen"-Gebilde) 🙂

    War mehr eine Frage à la "ich dachte immer, das wäre so und so..." 🙂



  • So aNd12121,

    ich würde vorschlagen, dass du direkt jemanden aus unserem Kurs fragst.

    Bist ja sicherlich an der HAW Hamburg im ersten Semester im Kurs PR1 und musst Aufgabe 4 für das 4. Praktikum erledigen.

    Damit verabschiede ich mich auch schon.

    sayonara 🙂



  • Big Brother is watching you 🤡



  • PrettyP schrieb:

    getch() fragt Tastendrücke ab, ohne auf eine Bestätigung mit CR oder NL zu warten?

    Zumindest das getch(), das ich in Erinnerung habe 😉

    Oder ist cursorOn und cursorOff dafür gedacht, die entsprechenden Systembefehle abzusetzen bevor und nachdem ein Tastendruck erfolgt?

    Keine Ahnung, da mußt du schon aNd fragen, was die Funktionen machen (wenn ich raten müsste, würde ich vermuten, daß sie den blinkenden Cursor ein- bzw. ausschalten).



  • CStoll schrieb:

    Zumindest das getch(), das ich in Erinnerung habe 😉

    Aber nur unter Win mit conio.h oder?


Anmelden zum Antworten