Präsentiere Sudoku Spiel



  • Gibts dat vll. auch f. Linux?

    Sonst gut.



  • Nein, ich weiß nicht mal wie man für Linux programmiert!? Aber wenn du willst kannst du mein Programm gerne auch für Linux umschreiben.



  • Ich hab' mir jetzt nicht alles durchgesehen, aber:

    • Unix-tauglich kannst du das Programm machen, indem du alle WinAPI-Spielereien (vorwiegend SetColor()) weglässt 😉
    • Das Programm ist etwas speziell - ich hab' schon Sudokus von 4x4 bis 25x25 Feldern gesehe (von Varianten wie Labyrinth, Odd-Even oder Samurai gar nicht zu sprechen)
    • Irgendwie sieht das Programm arg hingeschludert aus - hast du es schonmal getestet?
    • ...


  • Ich habe keine 2 Minuten gebraucht bis ich die erste Endlosschleife aus-
    gelöst habe...

    cout << "\nGeben Sie die Spaltennummer ein: ";
      cin >> spalte;
      while(spalte<1||spalte>9)
      {
        cout << "\nDie Spalte muss zwischen 1 und 9 liegen.";
        cout << "\nGeben Sie die gewuenschte Spalte ein: ";
        cin >> spalte;
      }
    

    du fängst keine Buchstabe ab...

    es wird das cin übersprungen bei einer Eingabe von "FF" zum beispiel...
    warum eigentlich...Lösung:

    cout << "\nGeben Sie die Spaltennummer ein: ";
      cin >> hex >> spalte;
      while(spalte<1||spalte>9)
      {
        cout << "\nDie Spalte muss zwischen 1 und 9 liegen.";
        cout << "\nGeben Sie die gewuenschte Spalte ein: ";
        cin >> spalte;
      }
    


  • ..was mche ich denn wieder falsch!?

    "sudoku.cpp": E2313 Konstantenausdruck erforderlich in Funktion vertical(int *,int,int) in Zeile 31
    "sudoku.cpp": E2313 Konstantenausdruck erforderlich in Funktion horizontal(int *,int,int) in Zeile 56
    "sudoku.cpp": E2020 Globale anonyme Variante nicht static in Funktion init(int *) in Zeile 219
    

    Borland C++BuilderX Personal Edition; habe den gesamten Quellcode unverändert eingefügt (als Konsolenprogramm).



  • ich habe keine ahnung was mit dem falsch ist... Kann es überhaupt am compiler liegen??? Ich weiß es nicht. Ich habe jedenfalls dev-cpp mit dem mingw32 compiler.

    @CStoll: Wie soll ich denn sonst SetColor() machen??? Kennst du vielleicht eine ander möglichkeit?

    Ansonsten vielen dank an alle für eure kritik, bewertung, etc... 🙂



  • Dr_Gregor schrieb:

    @CStoll: Wie soll ich denn sonst SetColor() machen??? Kennst du vielleicht eine ander möglichkeit?

    Gar nicht - dann wird das Spielfeld halt in s/w dargestellt, aber es ist portabler 😉



  • Basingstoke schrieb:

    cout << "\nGeben Sie die Spaltennummer ein: ";
      cin >> spalte;
      while(spalte<1||spalte>9)
      {
        cout << "\nDie Spalte muss zwischen 1 und 9 liegen.";
        cout << "\nGeben Sie die gewuenschte Spalte ein: ";
        cin >> spalte;
      }
    

    -->

    cout << "\nGeben Sie die Spaltennummer ein: ";
      do {
        cin >> spalte;
    
        if(cin.fail() || (spalte<1||spalte>9) )
        {
            cin.clear();
            std::string temp = "";
            getline(cin,temp);
    
            cout << "\nDie Spalte muss zwischen 1 und 9 liegen.";
            cout << "\nGeben Sie die gewuenschte Spalte ein: ";
        }
        else break;
    
      } while(1);
    

    😉



  • CStoll schrieb:

    Gar nicht - dann wird das Spielfeld halt in s/w dargestellt, aber es ist portabler

    Hm, ich kenn mich in dem Gebiet nicht so gut aus, aber man könnte sich dafür doch einen kleinen Wrapper basteln!? Man könnte druch bedingte Kompilierung (Makros) die entsprechenden API Funktionen des jeweiligen OS aufrufen.



  • Ich mache seit einer Woche c++ und das was du geschrieben hast sagt mir genau gar nicht... Kannst du das vielleicht ein bisschen genauer beschreiben wie das gehen soll?



  • Die Frage war eigentlich an CStoll gerichtet. Aber mach du dir jetzt noch keine Gedanken darüber, das führt mehr zur Verwirrung als zur Erleichterung. Wenn du ein Buch hast, müsste darin bestimmt etwas von bedingter Kompilierung stehen. Mithilfe der bedingten Kompilierung ist es möglich, platformunabhängige Programme zu schreiben. Mal ein kleines Beispiel:

    #ifdef __WIN32__
    // Programm wird unter Windows kompiliert
    // Hier kommt dann der systemspezifische Code hin
    
    #elif __unix || __linux__
    // Programm wird unter Unix/Linux kompiliert.
    // Hier Code für Linux
    

    wxWidgets z.B. sind auch platformunabhängig, und arbeiten nach dem selben Prinzip.



  • Ja, das wäre eine Möglichkeit. Allerdings müsstest du die Unix'er fragen, wie deren Version von SetColor() aussehen könnte (im Zweifelsfall bleibt die letzte Option - im "#ifdef __WIN32__" landet die Version aus dem Ausgangsprogramm, im "ifdef __unix" eine leere Funktion (wenn du nichts geeignetes für UNIX findest, arbeitest du dort eben in s/w).

    PS: Die Farbgestaltung ist aber nur Spielerei - ich würde mich wohl in erster Linie auf den technischen Teil der Aufgabe konzentieren (und eventuell das Programm sogar aufteilen in Rechenteil und Anzeigeteil - da könnte man dann auch ein MFC-Fenster zur Ausgabe davorklemmen).



  • Ich nehme mal stark an, dass ein MFC-Fenster ein Microsoft-Fenster ist, oder?
    Naja, ich kann das noch nicht, aber wenn du willst kannst du das machen.



  • Ja, MFC baut auf der WinAPI auf (und war nur ein Beispiel). Worauf ich hinauswollte war, daß du eine klare Trennung zwischen Berechnung (in deinem Fall Erzeugung und Auswertung der Sudokus) und Darstellung (Interaktion mit dem Nutzer) einführen solltest - auf diese Weise kannst du den Berechnungs-Teil an beliebige GUIs anschließen, ohne an den internen Daten etwas ändern zu müssen.


Anmelden zum Antworten