Pfeile betätigen



  • Hallo liebe C++ Community,
    momentan programmiere ich Game Of Life und will nun Pfeile zum Ansteuern benutzen. Ich hatte schon den Gedankengang um die for- Schleife eine while zu schreiben aber weiß nicht ganz wie ich das anstellen soll.
    Wenn ich schon dabei bin möchte ich gleich auch fragen wie ich das variable Spielfeld programmieren soll. Ich brauche diese Variable ja in der Funktion aber will sie auch abfragen.
    Hoffe auf rasche Rückmeldung.
    lg Sandra



  • @sandra1 Hä?



  • Sorry bin ziemliche Programmieranfängerin xD

    void ausgeben(int l[spielf][spielf], int spielf){
            for(int i=0; i<generationen; i++){
                for(int a=1; a<spielf; a++){
    
                    for(int ba=1; ba<spielf; ba++){
    
                    if(l[a][ba]==0){
                    cout<<" ";
                    }
                    else if(l[a][ba]==1){
                    printf("%c",219);
                    }
                    } cout<<"\n";
                }
            }
        }
    

    Ich will einfach das die Nachfolgegeneration immer bei einem Pfeilklick ausgegeben wird und im Moment kann ich mit Pfeilen noch gar nicht umgehen.
    Im Code habe ich es mit einer Variable programmiert.



  • @sandra1 Was verstehst du unter einem Pfeil?
    Eine Cursortasten?
    Oder Tabulator, Backspace, Enter oder gar ein Symbol?

    Klick hört sich nach Mausbedienung an, du benutzt aber cout (und printf)



  • @DirkB Ich meine eine Cursortaste. Ich habe keinen Plan wie ich mit einer Cursortaste umgehen soll.



  • @sandra1 Womit (Compiler, IDE) und worauf (Windows, Linux, ...) programmierst du?



  • @DirkB
    Ich programmiere auf Windows und mit IDE (genauer: CodeBlocks)


  • Mod

    Anstatt dich in dieser Phase mit solchen Nebensächlichkeiten herumzuschlagen, solltest du stattdessen die einfachstmögliche Lösung wählen, auch wenn sie nicht deinen ästhetischen Bedürfnissen entspricht. Trigger die nächste Generation auf Entertaste:

    while(irgendwas)
    {
      tu  was tolles;
      cin.get();
    }
    

    Später, wenn du vollintegrierte Grafikprogramme schreibst, geht die Nutzerinteraktion sowieso ganz anders als alles, was du jetzt über Steuerzeichen in Textkonsolen lernen könntest. Spar dir dieses unwichtige Spezialwissen und konzentriere dich auf das wesentliche. Also hier darauf, dass dein GoL auch korrekt funktioniert. Schönheit bei Aussehen und Bedienung ist reine Fleißarbeit, die dich nicht weiterbringt.



  • @sandra1 Das was SeppJ schreibt.

    Aber dennoch gibt es in diesem Forum eine Suchfunktion.
    Bei Cursortasten hat sie mir folgendes ausgespuckt: https://www.c-plusplus.net/forum/topic/31062/tastencodes

    Zur Ausgabe eines einzelnen Zeichens ist printf viel zu komplex, dafür gibt es http://www.cplusplus.com/reference/cstdio/putchar/
    (Es kann sein, dass dies schon der Compiler macht)

    Magic Numbers (hier die 219) sind auch doof, nimm dafür eine Konstante.

    Achso, machst C++ oder C mit cout ? (und wer hat dir das gesagt?)



  • @SeppJ Danke für die Antwort, mir persönlich ist es egal ob ich die Cursortaste oder Entertaste benutze. Noch eine kurze Frage, was bewirkt cin.get(), mein Ziel ist es ja die Variable Generationen aus meinem Code zu entfernen um das ganze Programm handlicher zu machen.



  • @DirkB Ich programmiere C++. Mein ganzes Wissen basiert auf dem Wissen meines Profs.
    Danke für die Hilfe!



  • Hier mal ein kleines Beispiel, wie Du unter Windows die Pfeil nach oben - Taste abfragen kannst:

    #include <windows.h>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    struct taste
    {
       taste(int c, int k) : AsciiChar(c), VirtualKey(k){};
       int AsciiChar;
       int VirtualKey;
    };
    
    taste getInput()
    {
        INPUT_RECORD ir;
       
        DWORD dummy;
        do
        {
            ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &ir, 1, &dummy);
        }while(ir.EventType != KEY_EVENT || !ir.Event.KeyEvent.bKeyDown);
       
        return taste(ir.Event.KeyEvent.uChar.AsciiChar, ir.Event.KeyEvent.wVirtualKeyCode);
    }
    
    int main()
    {
       
       while(true)
       {
          taste t = getInput();
          if(t.VirtualKey == VK_UP)
             cout << "Pfeil nach oben\n" ;
          else
             cout << setw(3) << t.VirtualKey << ' ' << setw(3) << t.AsciiChar << ' ' << static_cast<char>(t.AsciiChar) << '\n';
       }
    }
    

Log in to reply