Suduko in C Programmieren?
Hallo wir haben ein kleines Projekt und zwar sollen wir ein Sudoku in c Programmieren mit einigen Anforderung:
Anzeige des Gitters (9x9) Programm zeigt auf dem Bildschirm ein Gitter aus 9x9 Feldern an, die mit den passenden Zahlen gefüllt werden müssen.
• Auswahl des aktuellen Feldes auf dem Spielfeld Spieler kann auswählen, welches Feld im Gitter bearbeitet werden soll.
• Eingabe bzw. Veränderung des Wertes eines Feldes Spieler kann den Inhalt des aktuellen Feldes im Gitter bearbeiten. Ein Feld darf entweder leer sein oder muss eine Zahl zwischen 1 und 9 enthalten.
• Sichere Verarbeitung der Benutzereingaben Programm reagiert nur auf gültige Eingaben des Benutzers.
• Auswahl eines zu spielenden Sudoku Spieler kann ein zu spielendes Sudoku auswählen. Eine Auswahl von Sudoku verschiedener Schwierigkeit kann fest vorgegeben. Alternativ können neue Sudoku automatisch erzeugt oder aus einer Datei eingelesen werden (siehe unten).
• Erkennung einer korrekten Lösung des Sudoku Programm erkennt automatisch oder nach Aufforderung ein korrekt gelöstes Sudoku.
• Zeitmessung während des Spiels Programm zeigt die bereits vergangene Zeit zur Lösung eines Sudoku an. Die Zeit wird entweder am Ende des Spiels, nach jedem Zug oder laufend angezeigt
Vielleicht kann ja jemand helfen oder Tipps geben wie so etwas funktionieren kann.
Vielen Dank schonmal!
1 Antwort
Ich würde das ganze wie folgt angehen:
Das Framework für die GUI
Um solch ein Sudoku auf dem Bildschirm anzuzeigen, benötigst du eine Bibliothek zum Erstellen der graphischen Benutzeroberfläche. Bei solch einem Projekt würde ich eine möglichst minimalistische und einfache Bibliothek wählen. Möglichkeiten hierfür wären:
- imgui (Würde ich empfehlen)- Hätte zudem den Vorteil das du dein Sudoku später relativ leicht noch mit allen möglichen OpenGL basierten Animationen erweitern kannst). Hinweise: Bei imgui brauchst du allerdings noch andere Bibliotheken, um den OpenGL Kontext zu erstellen (Kannst du natürlich auch selbst machen, aber dann wird dein Programm zum Erstellen des Kontextes länger als dein eigentliches Sudoku). Eine Möglichkeit hierfür wäre beispielsweise eine Kombination aus GLFW (Kannst du für deinen Timer auch gleich platformübergreifend auf die Systemzeit zugreifen) und Glad.
- WINAPI - Wenn du wirklich so wenig Bibliotheken wie möglich nutzen möchtest, kannst du natürlich auch direkt auf API von Windows zurückgreifen (funktioniert dann natürlich auch nur auf windows).
- GTK - ist zwar alles andere als minimalistisch, sollte auf dieser Liste aber auch nicht fehlen.
Die Struktur der GUI
Bei eigentlich jedem Framework würde ich dann mit einem Table/Grid aus Eingabefeldern arbeiten. Ist die Eingabe falsch/ungültig, würde ich diese dann einfach vom Code aus rot färben. Dinge wie die Aktualisierung der GUI oder die Überprüfung der Eingabe würde ich in jedem Fall in extra Funktionen auslagern.
Datenstrukturen
Damit dein Programm in irgendeiner Form übersichtlich bleibt, würde ich für alles was über ein paar Variablen hinaus geht ein struct implementieren. Beim Sodoku könnte das von der grundlegenden Struktur beispielsweise irgendwie so aussehen:
struct SCoord {
int x;
int y;
SCoord(int _x, int _y) {
x = _x;
y = _y;
}
};
struct Field {
int value;
bool editable;
// ...
};
struct Sodoku {
Field fields[9][9];
// Generiert ein neues Sodoku
Sodoku();
// Lädt ein Sodoku aus einer Datei
Sodoku(const char* path);
void setField(SCoord coord);
bool isValid();
bool isFieldValid(SCoord coord);
// ...
};
// ...
Ich hoffe ich konnte dir weiterhelfen :-)
Kleine Ergänzung: Ich denke Nuklear (https://github.com/Immediate-Mode-UI/Nuklear) dürfte sich auch gut als gui Framework eignen.