Entwickler-Ecke

Open Source Projekte - Das Zahlenpuzzle Futoshiki


Fiete - Mi 06.03.19 17:20
Titel: Das Zahlenpuzzle Futoshiki
Moin an alle Tüftler,
Futoshiki (auf japanisch: wörtlich "Nicht gleich"; auch bekannt als "Hutoshiki", "Unequal") ist ein
logisches Puzzle, das auf einem quadratischen Gitter gespielt wird, n x n mit n=3,...,9.
FutoshikiScreen
Die Aufgabe besteht nun darin, in jeder Zeile die Zahlen 1 bis n so zu platzieren, dass auch jede
Spalte die Zahlen 1 bis n enthält. Einige Zahlen sind vorgegeben. Zusätzlich sind zu Beginn
zwischen einigen Feldern Relationszeichen eingetragen, die anzeigen, ob eine Zahl größer oder
kleiner als ihre Nachbarzahl sein soll. Diese Bedingungen müssen beim Ausfüllen des Diagramms berücksichtigt werden.
Lösung

Die Diagonalen können bei Bedarf auch die Zahlen 1 bis n enthalten, dann dauert die Berechnung des Puzzles länger.
Das Generieren eines Puzzles kann mit <ESC> abgebrochen werden.

Viel Spaß beim Knobeln!
Gruß Fiete

Rev. 1: die Ausgabe ist geändert worden, Zeichensatz Symbol hab ich benutzt
die Position der Relationen und die Größe der Ziffern wurden modifiziert
Range-Error ist eliminiert


Delete - Mi 06.03.19 18:04

- Nachträglich durch die Entwickler-Ecke gelöscht -


ub60 - Mi 06.03.19 19:12

Wieder mal ein schönes Logikspiel. Vielen Dank dafür!
In (als) Zeile 291 einfügen:


Delphi-Quelltext
1:
Brush.Style:=bsClear;                    

Dann sieht es gleich etwas schöner aus :wink: .

ub60


Fiete - Do 07.03.19 18:51

Moin ub60,
die Rechtecke hatte ich zur besseren Orientierung eingebaut.
Ohne sieht es natürlich schöner aus.

@Frühlingsrolle: die Pfeileauswahl habe ich mir angeschaut.
In Delphi6 ich die Unicodewerte nicht hinbekommen :oops:

Gruß Fiete


Delete - Do 07.03.19 23:16

- Nachträglich durch die Entwickler-Ecke gelöscht -


ub60 - Fr 08.03.19 11:54

Man könnte auch eine Grafik einfügen (StretchDraw oder so) oder Grafiken verschiedener Größen je nach Spielfeldgröße.
Eine einfache Version (ohne Größenänderung) wäre:

futoshiki


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  if Zeichen='<'
    then ImageList1.Draw(Ausgabe.Canvas, Rect.Right-Font.Size, Rect.Top+Ausgabe.DefaultColWidth div 30)
    else ImageList1.Draw(Ausgabe.Canvas, Rect.Right-Font.Size, Rect.Top+Ausgabe.DefaultColWidth div 31);
  Zeichen:=Feld[ACol+1,ARow+1].Relation[2];
  if Zeichen<>'*' then // unten
    if Zeichen='^'
      then ImageList1.Draw(Ausgabe.Canvas, Rect.Left+4+Ausgabe.DefaultColWidth div 3,Rect.Bottom-Font.Size-32)
      else ImageList1.Draw(Ausgabe.Canvas, Rect.Left+4+Ausgabe.DefaultColWidth div 3,Rect.Bottom-Font.Size-33);

Da kann man sicher noch optimieren :D .

ub60


Fiete - Fr 08.03.19 12:49

Moin Frühlingsrolle,
den Laufzeitfehler konnte ich ermitteln.
In den Zeilen 93 und 94 muß statt 546 der Wert 544 stehen :oops:

Die Puzzleausgabe kann sicher noch besser gestaltet werden :wink:

Gruß Fiete


Fiete - Fr 08.03.19 12:56

Moin ub60,
Deine Version der Ausgabe sieht so aus wie ich mir es vorgestellt hatte. :zustimm:
Du musst jetzt nur noch für verschiedene Größen eine Lösung finden.
Ich werde mein Hirn auch noch einmal anwerfen :wink:

Gruß Fiete


Delete - Fr 08.03.19 20:17

- Nachträglich durch die Entwickler-Ecke gelöscht -


Fiete - Fr 08.03.19 22:51

Moin Frühlingsrolle,
das Programm liegt in einer neuen Version vor!
Hoffe jetzt ist alles i.O.

Gruß Fiete


Delete - Sa 09.03.19 04:33

- Nachträglich durch die Entwickler-Ecke gelöscht -


Fiete - Sa 09.03.19 17:12

Moin Frühlingsrolle,
das schnelle Wechseln kann unterbunden werden - SpinEditG.Enabled:=False; in SpinEditGChange in Zeile 92 einfügen.
In der letzten Zeile SpinEditG.Enabled:=True; einfügen.

Wenn die CheckBox selektiert ist wird für die Diagonalen jeweils eine Permutation gesucht, das dauert.

Gruß Fiete