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 lines

    3. 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):

    Guess me.exe
    Projektordner (7zip)



  • // 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" ?


  • Mod

    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)


Log in to reply