Projektvorstellung: Guess me
-
1. Beschreibung:
"Guess me" ist ein Spiel, indem Du - ganz simpel - eine Zahl erraten musst. Das
Spiel speichert den erreichten Level, die Gesamtpunkte, den Game progress, die
Programmaufrufe und den Spielernamen in eine Datei. Du kannst immer beim nä-
chsten Level weiterspielen, wo Du aufgehört hast. Der Game progress ist erst dann
auf 100% angelangt, wenn man den Level 150 gemeistert hat, jedoch kann man
dann immer noch weiterspielen. Unter "Settings" kann man die Programm -und
Spiel-Daten betrachten. Das Programm wurde - auch mit Kommentarzellen - auf
englisch geschrieben.2. Informationen über den Code:
Author: Minispiri
Number of functions: 26 functions
Number of header files: 8 header files
Number of source files: 9 source files
Number of classes: 2 classes
Number of lines: 1077 lines3. Anmerkung:
Bevor ihr das Programm testet und eure Kritik schreibt, wollte ich euch sagen,
dass ich sehr zufrieden mit dem Programm bin, weil das mein erstes Projekt ist,
wo ich wirklich tierich viel Zeit dafür geopfert habe und weil ich alles zumin-
dest versucht habe, das ganze Projekt (samt Code) auf englisch zu schreiben. Ich
werde mich wahnsinnig auf eure Kritik freuen, jedoch weiß ich, dass ich es mit
meinem bisherigen Wissen nicht besser machen konnte. Wollte nur mal so gesagt
werden...4. Download (file-upload.net):
-
// function for loading or creating file // int load_create_file (cuser &user, cgame &game) { // open file ifstream input ("GAME_DATA.rm", ios::binary); // if the file is open // if (input.is_open ()) { // load file input.read ((char*) &user, sizeof (user)); input.read ((char*) &game, sizeof (game)); input.close (); // increment program call user.increment_program_call (); // save file save_file (user, game); } // if the file is open // else create file // else { // initialize variables user.initialize_variables (); game.initialize_variables (); // query player name user.query_name (); // save file save_file (user, game); } // else create file return 0; } // function for loading or creating file
Vielleicht solltest du deinen Kommentarstil nochmal überdenken
Ansonsten: Du brauchst nicht für jede Funktion zwei Dateien zu erstellen. Du hast viele Wiederholungen in deinem Code, z. B. könntest du dir ne Funktion schreiben, die die Ausgabe übernimmt, sodass nicht jede zweite Zeile
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), 14);
lautet. Insgesamt sind das viel zu viele Zeilen für so ein kleines Programm
Den Programmaufbau hab ich mir nicht angeguckt.
-
Oh man -.- Ich hatte vorher einen Fehler, wo ich mein Programm "Rate me" nannte.
Darum auch die Endung .rm. Ich habe vergessen rm auf gm zu wechseln, werde das
jetzt natürlich sofort tun. Muss mich im Englischen noch ein wenig einarbeiten.Ansonsten danke für deine Kritik.
Also so mal nebenbei: Wie findest Du wie das Programm an sich selbst läuft?EDIT1: Links habe ich überarbeitet, d.h. es erstellt sich nur noch eine
Datei (.gm)
-
Minispiri schrieb:
Oh man -.- Ich hatte vorher einen Fehler, wo ich mein Programm "Rate me" nannte.
Darum auch die Endung .rm. Ich habe vergessen rm auf gm zu wechseln, werde das
jetzt natürlich sofort tun. Muss mich im Englischen noch ein wenig einarbeiten.Dazu hab ich doch gar nix gesagt Oder war das nicht auf mich bezogen?
Also so mal nebenbei: Wie findest Du wie das Programm an sich selbst läuft?
Als User? Habs nur einmal gespielt. Das "beliebige Taste drücken" gefolgt von ich weiß nicht wie vielen Leerzeichen stört ein wenig.
-
Michael E. schrieb:
Minispiri schrieb:
Oh man -.- Ich hatte vorher einen Fehler, wo ich mein Programm "Rate me" nannte.
Darum auch die Endung .rm. Ich habe vergessen rm auf gm zu wechseln, werde das
jetzt natürlich sofort tun. Muss mich im Englischen noch ein wenig einarbeiten.Dazu hab ich doch gar nix gesagt Oder war das nicht auf mich bezogen?
->
Ansonsten: Du brauchst nicht für jede Funktion zwei Dateien zu erstellen.
Ich glaube dann habe ich dich falsch verstanden, sorry...
Als User? Habs nur einmal gespielt. Das "beliebige Taste drücken" gefolgt von ich weiß nicht wie vielen Leerzeichen stört ein wenig.
Meinst Du das wegen meiner Funktion "clear-screen" ?
-
Tat das Not, ein einfaches Konsolenspiel unportabel zu programmieren? Ich kann's nicht spielen!
-
Ganz schick für dein erstes Projekt. Natürlich ist hier und da mal eine Sache zu bemängeln, aber das sollte normal sein. Scheinst dir Mühe gegeben zu haben
-
Minispiri schrieb:
Ansonsten: Du brauchst nicht für jede Funktion zwei Dateien zu erstellen.
Ich glaube dann habe ich dich falsch verstanden, sorry...
Ja, du hast h-Dateien mit nur einer Deklaration drin und entsprechende cpp-Dateien mit nur einer Definition drin.
Als User? Habs nur einmal gespielt. Das "beliebige Taste drücken" gefolgt von ich weiß nicht wie vielen Leerzeichen stört ein wenig.
Meinst Du das wegen meiner Funktion "clear-screen" ?
Ja.
-
FreakY<3Cpp schrieb:
Ganz schick für dein erstes Projekt. Natürlich ist hier und da mal eine Sache zu bemängeln, aber das sollte normal sein. Scheinst dir Mühe gegeben zu haben
Danke für die positive Kritik
Michael E. schrieb:
Du hast viele Wiederholungen in deinem Code, z. B. könntest du dir ne Funktion schreiben, die die Ausgabe übernimmt, sodass nicht jede zweite Zeile
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), 14);
lautet. Insgesamt sind das viel zu viele Zeilen für so ein kleines Programm.
Ja, hast Recht und hab's gerade editiert. Die beiden Links hab ich auch wieder
aktualisiert.Michael E. schrieb:
Ja.
Ist jedoch besser als system-Befehle zu benutzen
-
Minispiri schrieb:
Ist jedoch besser als system-Befehle zu benutzen
Wuerde ich nicht unbedingt sagen. Du beziehst dich naemlich auf Standardgroessen. Was aber, wenn ich mein Konsolenfenster so einstelle, dass 240 Zeichen pro Zeile und insgesamt 100 Zeilen sichtbar sind? Da hilft der Einfachheit halber am ehesten:
system("cls");
unter DOS / Windows und:
system("clear");
unter Linux / UNIX / BSD / MacOS / [...].
-
heini schrieb:
Minispiri schrieb:
Ist jedoch besser als system-Befehle zu benutzen
Wuerde ich nicht unbedingt sagen. Du beziehst dich naemlich auf Standardgroessen. Was aber, wenn ich mein Konsolenfenster so einstelle, dass 240 Zeichen pro Zeile und insgesamt 100 Zeilen sichtbar sind? Da hilft der Einfachheit halber am ehesten:
system("cls");
unter DOS / Windows und:
system("clear");
unter Linux / UNIX / BSD / MacOS / [...].
Ich habe keine Leerzeichen verwendet, sondern 25 Zeilenumbrüche
-
Ja, es ist wirklich unglaublich wichtig, dass bereits Anfängerprogramme auch auf Unix und BSD Systemen laufen.
-
this->that schrieb:
Ja, es ist wirklich unglaublich wichtig, dass bereits Anfängerprogramme auch auf Unix und BSD Systemen laufen.
Ja, es ist wirklich unglaublich wichtig total sinnlose hier reinzuposten.
Wo ist das Problem wenn er erwähnt wie es unter *NIX/BSD/... geht? Kann der OP ja einfach ignorieren wenn es ihn nicht interessiert.
Die Kritik war ja nicht dass es auf *NIX/BSD nicht geht, sondern dass seine Variante von "Clear-Screen" nervt. Und die macht auch unter Windows kein "Clear-Screen", sondern schreibt einfach nur nen Haufen Leerzeilen. Im Konsolenfenster raufscrollen reicht um den alten Content zu sehen.
-
hustbaer schrieb:
Die Kritik war ja nicht dass es auf *NIX/BSD nicht geht, sondern dass seine Variante von "Clear-Screen" nervt. Und die macht auch unter Windows kein "Clear-Screen", sondern schreibt einfach nur nen Haufen Leerzeilen. Im Konsolenfenster raufscrollen reicht um den alten Content zu sehen.
Nun ja, das "clear Programm" unter Ubuntu macht nix anderes. Der einzige Unterschied ist, dass es die Größe der Konsole mit berücksichtigt. Über andere Distributionen bzw. Window Manager kann ich jetzt keine Aussage machen.
-
BTW: auf allen ANSI kompatiblen Terminals sollte folgendes funktionieren:
std::cout << "\33[2J\33[1;1H" << std::flush;
Müsste auch mit den gängigen Linux Konsolen gehen. (Hab es allerdings nicht probiert)