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:
- Ein Großteil des Codes geht um irgendwelche Windows-spezifische Tastaturbehandlung. Ist das irgendwie relevant?
- 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.
- 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.
- 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 invoid ausgeben(int l[spielf][spielf], int spielfeldSize)
oder invoid 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 beivoid ausgeben(int l[spielf][spielf])
passieren? - 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 einstd::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