Sudoku Rätsel
Ich habe mich mal an ein Sodoku- Rätsel gewagt.
Mein Erfolg hält sich jedoch in Grenzen. Ich habe es geschafft, dass er in den 9x9 Zellen alle 3 Regeln (keine gleichen in Kasten, Reihe, Spalte) auslesen kann.
Jedoch generiert er sich falsch, weswegen leere Kästchen entstehen.
Zurzeit mache ich das so, dass er jede Reihe durchgeht, eine Zufallszahl aus 9 wählt, und prüft ob diese in der Reihe, Spalte bzw. Kasten schon vorkommt.
Kann mir jemand eventuell einen kleinen Denkanstoß geben, egal welche Programmiersprache, mir geht es nur ums Prinzip, wie ich vorgehen muss, bis jetzt sieht Quelltext(Delphi) so aus:
Mein Erfolg hält sich jedoch in Grenzen. Ich habe es geschafft, dass er in den 9x9 Zellen alle 3 Regeln (keine gleichen in Kasten, Reihe, Spalte) auslesen kann.
Jedoch generiert er sich falsch, weswegen leere Kästchen entstehen.
Zurzeit mache ich das so, dass er jede Reihe durchgeht, eine Zufallszahl aus 9 wählt, und prüft ob diese in der Reihe, Spalte bzw. Kasten schon vorkommt.
Kann mir jemand eventuell einen kleinen Denkanstoß geben, egal welche Programmiersprache, mir geht es nur ums Prinzip, wie ich vorgehen muss, bis jetzt sieht Quelltext(Delphi) so aus:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,a,r:integer;
z: string;
gefunden: boolean;
begin
randomize;
for i:= 0 to 8 do
begin
for j:= 0 to 8 do
begin
z:= zahlen;
gefunden:= false;
while (length(z) > 0) and (gefunden = false) do
begin
r:= random(length(z))+1;
a:= StrToInt(z[r]);
Delete(z,r,1);
if (check_horizontal(Point(j,i),a)) and
(check_vertikal(Point(j,i),a)) and
(check_kasten(Point(j,i),a)) then
begin
Sudoku.Cells[j,i]:= IntToStr(a);
gefunden:= true;
end;
end;
end;
end;
end;
|
naja, damit es für den Start nicht zu kompliziert wird würde ich ein komplettes Spielfeld ausrechnen lassen aber dann nur eine bestimmte Anzahl von Zahlen anzeigen lassen. -> so weis man immer das das Spiel lösbar ist, zur Not mit ausprobieren.
Aber weil das Spiel bestimmten Regeln unterliegt könnte man bestimmt auch ausrechnen wo noch welche zahl hin passt und ob sich aus einer bestimmten Konstellation mehrere Lösungen ergeben - da hat bestimmt auch schon mal jemand was zu geschrieben. Edit: ich meine keinen Quellcode, sondern eher die theoretischen Grundlagen dazu.
Gruß
Ego
Aber weil das Spiel bestimmten Regeln unterliegt könnte man bestimmt auch ausrechnen wo noch welche zahl hin passt und ob sich aus einer bestimmten Konstellation mehrere Lösungen ergeben - da hat bestimmt auch schon mal jemand was zu geschrieben. Edit: ich meine keinen Quellcode, sondern eher die theoretischen Grundlagen dazu.
Gruß
Ego
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Ego« (13. Dezember 2011, 20:43)
Bezeichnen wir die Gruppenfelder mit
a b c
d e f
g h i
Dann können wir die Gruppenfeder a,e,i oder c,e,g völlig zufällig erstellen weil diese sich diagonal nicht gegenseitig behindern.
Die Gruppnfelder dghbcf oder abdfhi sind dann vom pc zu ergänzen. Damit haben wir ein gelöstes Sudoku.
Jetzt nochc ein paar Einzelfelder löschen und das Rätsel ist vorbereitet.
a b c
d e f
g h i
Dann können wir die Gruppenfeder a,e,i oder c,e,g völlig zufällig erstellen weil diese sich diagonal nicht gegenseitig behindern.
Die Gruppnfelder dghbcf oder abdfhi sind dann vom pc zu ergänzen. Damit haben wir ein gelöstes Sudoku.
Jetzt nochc ein paar Einzelfelder löschen und das Rätsel ist vorbereitet.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »nocturne« (15. Dezember 2011, 13:48)
Ähnliche Themen
-
Games »-
Baphomets Fluch 3 - Der Schlafende Drache
(28. Dezember 2008, 18:46)
-
PHP »-
"sudoku-Generator"
(16. Dezember 2005, 20:20)
-
Plauder Forum »-
Ein Rätsel ......
(8. August 2003, 11:04)


