Suche Aufgabe - Rund um das Thema Konsolen Programmierung



  • Danke für all eure Ratschläge, besonders den mit dem Empty Project, so etwas habe ich gesucht, mir wurde gesagt, ich sollte das mit Win32 Konsolenanwendung machen.

    Zu SeppJ,
    ich akzeptiere alle Punkte außer einen, ich fange immer die Zahl ab, wenn ein Buchstabe eingegeben wird, dann muss man so lange eine Eingabe machen bis es eine Zahl ist, teilweise sogar solange, bis die Zahl im richtigen Raum liegt.
    Das ist wirklich so, oder nenne mir bitte eine Stelle wo ich es micht so gemacht, habe, mit cin.fail()-

    Ich werde das Spiel erst einmal optimieren, danach wage ich mich an etwas größeres,
    M.f.G. Developer_X



  • also ich könnt schon nen scheiß an start bringen:(



  • OK, ich habe meinem Spiel sogar noch meine Library hinzugefügt.
    Den Code habe ich auch optimiert, und ich muss zugeben, ich habe doch nicht
    das Ereignis, dass ein Buchstabe eingegeben wird, gehandelt. Ich dachte cin.fail() reicht, aber das tut es wohl doch nicht. Kann mir einer helfen, in Google habe ich dazu nichts passendes gefunden.

    Wie kann ich eine Zahl einlesen, und nur eine Zahl, bei anderer Eingabe wird das Einlesen wieder holt, quasi in einer Schleife.

    Bisher tat ich das ja immer so:

    int zahl;
    
    cout << "Geben Sie eine Zahl an." << "\n";
    cin >> zahl;
    while(cin.fail())
    {
    cout << "Geben Sie eine Zahl an." << "\n";
    cin >> zahl;
    }
    

    Das reicht aber nicht, wenn ich dem Programm einen Buchstaben gebe, dann ist es wort wörtlich sprachlos^^.

    Wie kann ich also herausfinden, ob ein Wert ein Buchstabe ist?
    quasi etwas wie isDigit, wenn es so etwas gibt, und in welchem Header ist dies dann?

    Danke für eure Hilfen,
    M.f.G. Developer_X 🙂



  • mach doch was mit unicode



  • Eine von mehreren Möglichkeiten:
    http://www.cplusplus.com/reference/clibrary/cctype/isalpha/

    ist zwar nicht ganz passend, aber, wenn du das weiterverfolgst gibt es auch etwas für Zahlen.



  • #include <iostream>
    #include <limits>
    
    int main()
    {
        int zahl;
    
        std::cout << "Geben Sie eine Zahl ein:\n";
        while(!(std::cin >> zahl))
        {
            // clear hebt den "Fehlerzustand" wieder auf
            std::cin.clear();
            // ignore verwirft die falsch eingegebenen Zeichen
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    
            std::cout << "Fehlerhafte Eingabe, probieren Sie es noch einmal:\n";
        }
    
        std::cout << "Eingegebene Zahl: " << zahl << "\n";
    }
    


  • das ist ja einfach, danke, ich mach das grad noch fertig.



  • 😕

    OhneName schrieb:

    #include <iostream>
    #include <limits>
    
    int main()
    {
        int zahl;
    
        std::cout << "Geben Sie eine Zahl ein:\n";
        while(!(std::cin >> zahl))
        {
            // clear hebt den "Fehlerzustand" wieder auf
            std::cin.clear();
            // ignore verwirft die falsch eingegebenen Zeichen
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    
            std::cout << "Fehlerhafte Eingabe, probieren Sie es noch einmal:\n";
        }
    
        std::cout << "Eingegebene Zahl: " << zahl << "\n";
    }
    

    Das mit dem Ignore wird bei meinem VS als rot angestrichen.
    Bist du sicher , dass das richtig ist? Ich habe limits included, keine Sorge^^.



  • Ich hätte noch eine Idee: ein Kartenspiel wie Hearts als Konsolenspiel. Lässt sich sicher auch in Textform gut spielen.

    Edit: Auch wenn das rot angestrichen wird, kompiliert es denn? Wenn nicht, was ist die Fehlermeldung?



  • OK, ich habs jetzt doch hinbekommen. Alles soweit fertig, sind aber eine Menge Klassen, wenn ihr wollt, könnt ihr euch nochmal die Exe Ansehen, nicht vergessen, das Spiel sieht beim starten anders aus, weil ich meine selbstgeschriebene Library use.

    www.imperatorclan.kilu.de/myUploads/Zahlen_Raten.exe

    Durch diese Aufgabe, wie ich noch einmal zusammenfassen kann.
    Ich habe durch diese Übung gelernt, ...
    [list]
    [] Was Zahlen Raten ist, und seine Spielregeln 😃
    [
    ] Wie man Werte richtig einliest, und bei Fehleingaben entsprechend und vor allem richtig darauf reagiert, und nicht unbedingt mit cin.fail(), sondern gleich das gesamte Lesen als Boolean benutzen.
    [*] Meinen Code dynamischer, besser und übersichtlicher zu gestalten

    Danke euch allen, nun werde ich mich an etwas neuem Versuchen, ich denke ich versuche mich am Galgenraten, dazu wollte ich euch aber noch etwas fragen:
    Es gibt Spiele, bei denen ist die Konsole sozusagen das Spielfeld. Aber ich kann nur Text in die Konsole schreiben, nichts mehr, was kann man da so machen, sprich die Konsole als Fläche nutzen, und immer alles neu rein schreiben, nach berechnungen, kann mir da einer was zu erzählen?

    M.f.G. Developer_X


  • Mod

    Developer_X schrieb:

    Danke euch allen, nun werde ich mich an etwas neuem Versuchen, ich denke ich versuche mich am Galgenraten, dazu wollte ich euch aber noch etwas fragen:
    Es gibt Spiele, bei denen ist die Konsole sozusagen das Spielfeld. Aber ich kann nur Text in die Konsole schreiben, nichts mehr, was kann man da so machen, sprich die Konsole als Fläche nutzen, und immer alles neu rein schreiben, nach berechnungen, kann mir da einer was zu erzählen?

    Dafür brauchst du eine Konsolenbibliothek, denn Standard-C++ sieht die Ein-/Ausgabe bloß als einen unformatierten Strom von Bytes an. Für DOS-Konsolen ist glaube ich conio.h am weitesten verbreitet.



  • SeppJ schrieb:

    Developer_X schrieb:

    Danke euch allen, nun werde ich mich an etwas neuem Versuchen, ich denke ich versuche mich am Galgenraten, dazu wollte ich euch aber noch etwas fragen:
    Es gibt Spiele, bei denen ist die Konsole sozusagen das Spielfeld. Aber ich kann nur Text in die Konsole schreiben, nichts mehr, was kann man da so machen, sprich die Konsole als Fläche nutzen, und immer alles neu rein schreiben, nach berechnungen, kann mir da einer was zu erzählen?

    Dafür brauchst du eine Konsolenbibliothek, denn Standard-C++ sieht die Ein-/Ausgabe bloß als einen unformatierten Strom von Bytes an. Für DOS-Konsolen ist glaube ich conio.h am weitesten verbreitet.

    Das hört sich ja interessant an, und was diese Library alles drauf hat, mit dem Abfangen von Key Press usw..
    Ich habe das ja auc bei meinem Visual Studio, ich danke dir für diesen wertvollen Tipp wirklich sehr, danke.

    M.f.G. Developer_X



  • Aufgrund der Anregungen habe ich mich entschlossen, ein Tutorial über conio zu suchen. Ich war auf der Website der Macher von Conio, http://conio.sourceforge.net/tutorial.html, und kann nur sagen, dass ich echt beeindruckt davon bin, was man damit alles machen kann.

    Nun habe ich den folgenden Code bei mir im VS aufgesetzt: (conio.h gibt es ja dort)

    #include <conio.h>
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {	
    	cout << setxy(10, 10) << setclr(YELLOW) << setbk(BLUE) << "Hello"; 
    
    	system("PAUSE");
    
    	return 0;
    }
    

    Doch bei mir wird setxy(10,10) und der ganze rest in dieser Zeile rot angezeigt.
    Mir kam das schon von Anfang an seltsam vor.

    Warum geht das nicht?

    m.f.G. Developer_X


  • Mod

    "rot angezeigt" ist ein bisschen vage. Was bekommst du denn für Fehlermeldungen wenn du compilieren willst?



  • Das hier:

    1>------ Build started: Project: Galgen_Raten, Configuration: Debug Win32 ------
    1>Build started 05.06.2010 13:45:54.
    1>InitializeBuildStatus:
    1>  Creating "Debug\Galgen_Raten.unsuccessfulbuild" because "AlwaysCreate" was specified.
    1>ClCompile:
    1>  Game.cpp
    1>f:\c++ projekte\galgen_raten\galgen_raten\game.cpp(9): error C2065: 'YELLOW' : undeclared identifier
    1>f:\c++ projekte\galgen_raten\galgen_raten\game.cpp(9): error C2065: 'BLUE' : undeclared identifier
    1>f:\c++ projekte\galgen_raten\galgen_raten\game.cpp(9): error C3861: 'setxy': identifier not found
    1>f:\c++ projekte\galgen_raten\galgen_raten\game.cpp(9): error C3861: 'setclr': identifier not found
    1>f:\c++ projekte\galgen_raten\galgen_raten\game.cpp(9): error C3861: 'setbk': identifier not found
    1>
    1>Build FAILED.
    1>
    1>Time Elapsed 00:00:00.79
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    


  • conio.h ist extrem compilerspezifisch ⚠

    Das was du vorhast läuft vielleicht unter einem Borland oder wie die Firma heute heisst 😃

    Microsoft hatte unter DOS da andere Lösungen, sprich eine andere Syntax - ich weiss aber nicht ob das heute noch in den Compilerpaket drin ist, vermute nein, da ich nix mehr in letzter Zeit davon mit bekommen hab.

    Über den windows.h lässt sich so was lösen. Musst mal suchen, da sollten Beispiele hier im Forum verfügbar sein.



  • f.-th. schrieb:

    Das was du vorhast läuft vielleicht unter einem Borland oder wie die Firma heute heisst 😃

    Die heißen immer noch Borland, haben nur den ganzen Krempel an Embarcadero verkauft.



  • Zwischendurch wurden die Borland-Teile auch als Inprise angeboten 😉



  • Ich habe mein Galgenraten mit ASCII Animation jetzt auch fertiggestellt.

    Wer will es haben, oder mal ansehen?



  • Gib mal den Link für den Download.

    Schaus mir später vielleicht mal an.


Anmelden zum Antworten