Game of Life/ Fehler im Code



  • Halle liebe C++ Community, könntet ihr euch bitte kurz mein Code anschaunen!

      struct taste
        
        {
        
           taste(int c, int k) : AsciiChar(c), VirtualKey(k){};
        
           int AsciiChar;
        
           int VirtualKey;
        
        };
        
        void ausgeben(int l[spielf][spielf], int spielf){
    
                  taste t = getInput();
          if(t.VirtualKey == VK_UP){
    
                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";
                }
            }
          else
             cout << setw(3) << t.VirtualKey << ' ' << setw(3) << t.AsciiChar << ' ' << static_cast<char>(t.AsciiChar) << '\n';
        } 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);
    


  • Hab ich. Und nu?



  • Falls du Kommentare zum Code wünscht:

    1. Ein Großteil des Codes geht um irgendwelche Windows-spezifische Tastaturbehandlung. Ist das irgendwie relevant?
    2. Warum wird innerhalb einer Funktion namens "ausgeben" überhaupt irgendwas mit der Tastatur gemacht? Wenn eine Funktion "ausgeben" heißt, sollte die genau das tun und nichts anderes. Also insbesondere nichts einlesen.
    3. Die Namen der Variablen sind schlecht. "spielf"? Klingt nach "spielfeld", aber bezeichnet hier die Größe des Feldes in x und in y. Der Name "l" für das Spielfeld ist auch schlecht. Längere Namen kosten nichts, machen den Code aber besser lesbar. Einbuchstabige Variablennamen wie i kannst du vielleicht für einen Schleifenzähler nehmen und x,y,z, wenn du mit Koordinaten arbeitest, aber ansonsten solltest du nicht an der Variablennamenlänge sparen.
    4. Wie hängt der Name "spielf", denn du 3x in der Signatur von void ausgeben(int l[spielf][spielf], int spielf) hast, voneinander ab? Was würde z.B. sich ändern, wenn du die Signatur in void ausgeben(int l[spielf][spielf], int spielfeldSize) oder in void ausgeben(int l[bla][bla], int bla) ändern würdest? Gibt es da Probleme, was passiert und warum? Brauchst du den 2. Parameter überhaupt? Was würde bei void ausgeben(int l[spielf][spielf]) passieren?
    5. Was passiert, wenn du void ausgeben(int l[spielf][spielf], int spielf) änderst in
      a) void ausgeben(int l[][spielf], int spielf)
      b) void ausgeben(int l[spielf][], int spielf)
      (da du aber C++ machen willst, frage ich mich sowieso, warum hier nicht ein std::vector für das Spielfeld verwendet wird)

    PS: die Fragen sind dazu da, dass du darüber nachdenkst, nicht weil ich es wirklich wissen will 🙂


Log in to reply