Sudoku mit Delphi programmieren?

...komplette Frage anzeigen

2 Antworten

Meiner Meinung nach ist die best geeignetste Komponente ein TStringgrid. Du kannst mit Cells[x,y] auf die Zellen zugreifen und Werte reinschreiben und auch abfragen. Mit dem integrierten Grideditor (in den Options goEditing auf TRUE setzen) kann der Benutzer Werte direkt in eine Zelle eingeben.

Ich denke aber, dass du versuchst den zweiten Schritt vor dem ersten zu tun. Bevor man ein Programm schreibt, sollte man sich über die zu verwendenden Algorithmen klar werden. Welche Aufgabe soll der Computer übernehmen? Welche Entscheidungen soll der Computer treffen?

Dazu nehme ich mir meist ein Zettel und ein Stift und schreibe in einer formalen Sprache (Pseudocode) auf, was der Computer tun soll. Für dich heist das, spiele Sodoku mit Zettel und Stift und alles was der Computer vom leeren Blatt Papier bis zum Spielende tun soll, schreibst du auf.

Viel Erfolg, dj

Antwort bewerten Vielen Dank für Deine Bewertung
Bauing85 26.03.2013, 19:10

Ich bin dann wohl noch bei Schritt 0 :D , da ich ja erstmal eins erstellen muss um es dann zu lösen. Und ich versuchen möchte das ich nicht jede Zahl einzeln erstellen muss. Als erstes brauch ich ja das Layout, danach müsste der pc ein komplettes rätsel erstellen, welches die Regeln des Sudoku beinhaltet. Anschließend sollten 80-90 % ausgeblendet werden um auch rätseln zu können. Danach sollte es noch eine Kontrollfunktion geben. So stelle ich mir den Ablauf vor.

0
DataJockey 26.03.2013, 19:17
@Bauing85

hast du dir mal den Link angesehen, welchen edbca gepostet hat?

0

Ich würde wahrscheinlich ein TImage nehmen (ich glaube so hieß es in Delphi) und dort meine Striche und Zahlen reinmalen.

Du könntest Mengen erstellen für die 3x3 Felder und dort alle gesetzten Zahlen eintragen. Danach dann abfragen, ob die neue Zahl schon in der Menge ist (sowas wie if 5 in feld then benutze die 5 nicht mehr :D)

Gucke auch mal hier: http://de.wikipedia.org/wiki/Sudoku#Algorithmus

Antwort bewerten Vielen Dank für Deine Bewertung
Bauing85 25.03.2013, 23:32

Dann müsste ich aber alle 81 Felder durchtippen mit jeweils 20 abfragen. Da mach ich mich ja tot bei.

0
edbca 25.03.2013, 23:49
@Bauing85

Also... mh...

Wir haben ein Array von 81 Feldern. Das Feld besteht im Grunde genommen nur aus dem Zahlenwert (können wir Integer nehmen) und meinetwegen -1 wenn keine Zahl drin ist.

Das Array ist 2-dimensional:

ich kenne die Pascal-Schreibweise nciht mehr, sieht ungefähr so aus:

feld: Array[0..8, 0..8] of Integer;

Dann kannst du eine Schleife machen, um alles in dem Image zu zeichnen:

for ix = 0 to 8 do
begin
  for iy = 0 to 8 do
  begin
    //Zeichenbefehle, z.B. ein Rectangle an Position (ix*5, iy*5) zeichnen oder sowas
    //Zahl in der Mitte des Kästchens ist die im Array stehende feld[ix,iy]
  end
end

Die Linien kannst du dann mit einer Schleife abklappern, folgender Code würde z.B. in der ersten Zeile überprüfen, ob es die "neuezufallszahl" gibt:

for ix = 0 to 8 do
begin
  if(neuezufallszahl = feld[ix,0])
    //zufallszahl gibt es schon
end

Das wären zwar auch ziemlich viele Abfragen, aber man müsste nicht alles eintippen :D

0
Bauing85 26.03.2013, 23:11
@edbca

dieses array ist schrecklich andauernd meckert der weil array und integer nicht kompatible sind...

Achja bin immer noch keinen Schritt weiter. Brauch wohl noch einige Vokabeln um sowas hin zu bekommen...

0

Was möchtest Du wissen?