Suduko in C Programmieren?

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

Woher ich das weiß:Hobby – Programmiere seit 3 Jahren in z.B. C++, Python, JS oder PHP