A
Ja die Flüchtigkeitsfehler tun mir leid, ich musste das Programm nochmal von einem anderen Rechner übertragen, da mein privates Notebook bei meinem Praktikum keinen Internetzugang hat. Somit musste ich den Code nochmal komplett abschreiben und hatte keinen Compiler zur verfügung, um es nochmals zu prüfen.
Jedenfalls:
Arcoth schrieb:
Hab mir mal die Freiheit genommen deinen Code zu formatieren.
Kommentare zum Code:
"XXXXXXXXXXXXXXXXXXXXXXXXX" ggf. durch std::string(30, 'X') ersetzen.
if(kbhit()) {/* [..] */}
else if(!kbhit())
Was soll das denn?
* In Zeile 64 fehlt was, das war wohl ein Flüchtigkeitsfehler von dir.
* COORD ist ein Aggregat. Unterstützt dein Compiler C++11 kannst du also Zeile 119-122 durch
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), {b, h});
ersetzen.
* 73-88 solltest du durch ein switch-Statement ersetzen.
switch (richtung)
{
case 1: --y; break;
case 2: ++y; break;
case 3: ++x; break;
case 4: --x; break;
}
* Warum die Endlosschleife als `do ... while(true)` schreiben? Da kriege ich immer das Gefühl, die Schleifenform hat er aus guten Grund gewählt, weil die Abbruchbedingung erst nach dem ersten Schleifendurchlauf geprüft werden soll. `for(;;)` ist da geläufiger. Abgesehen davon solltest du immer versuchen, Schleifen eine Abbruchbedingung zu geben.
* In `x <= 0 || x >= 24 || x <= 1 || y >= 25` steckt wohl auch ein Flüchtigkeitsfehler.
* `return 0;` am Ende der `main` -Funktion ist überflüssig.
Erstmal danke fürs formatieren
Zum string, leider habe ich strings noch nicht wirklich gelernt, daher habe ich versucht das meiste über eine for zu erstellen nur dieses Stück habe ich dann seperat geschrieben.
Ist das mit dem !kbhit() so nicht richtig? Ich hatte das so geplant, dass das Programm fals keine Eingabe erfolgt dort hin springen soll und dann die Bewegung in die vorherige Richtung fortgesetzt wird.
Naja aber du hast recht, ich habe es mal durch ein normales else ersetzt.
Danke für den Tipp, ich werde das mal ausprobieren.
Das mit dem switch werde ich definitiv tun, wird den Code etwas übersichtlicher machen.
Die do while kommt daher, dass ich noch ein manuelles Beenden der Schleife ermöglichen möchte, sobald der Rest funktioniert. Ich werde also am Ende noch eine Bedingung wie "!= beenden" oder ähnliches einsetzen.
Dabei handelt es sich tatsächlich um keinen Fehler, In der obersten Zeile wird der Punktestand ausgegeben, somit ist die Y-Achse um eins nach unten verschoben.
Unser Lehrer zieht uns immer nen Punkt in Tests etc. ab wenn wir das return 0; nicht schreiben, daher hab ich es mir angewöhnt dieses auch bei privaten Projekten zu setzen, dann vergesse ich es auch nicht bei Schulaufgaben.
Ich werde mich jetzt nochmal dran setzen, vielen Dank für die Hilfe