PDA

Volledige versie bekijken : Sudoku Creator


SaphuA
%Europe/Berlin %633 %2005, 16:12
Hey mensen,
Omdat ik sinds begin dit jaar met de trein moet reizen, lees ik bijna elke dag de metro en de spits. In de spits staat tegenwoordig het zeer populaire puzzle spel sudoku (http://en.wikipedia.org/wiki/Sudoku). Uit verveling ben ik elke dag deze puzzles maar gaan maken.

Nou kwam ik laatst op het idee om zo'n spel zelf op de pc te maken, omdat ik toch even geen projecten heb lopen. In eerste instantie leek het me vrij makkelijk om te maken, gewoon in elk blokje 1-9, en ik elke horizontale en verticale rij de cijfers 1-9. Maar dat bleek al snel tegen te vallen. Je komt vaak uit op oneindige loops, of teveel dingen waar je rekening mee moet houden waardoor je idee weer in de soep loopt.

Na 4 ideën volledig uit te hebben gewerkt, en moeten balen omdat ze allemaal even slecht waren, is het me eindelijk gelukt. Het eerste gedeelte van de generator is af. Wat het doet is een legaal sudoku grid maken, waarin elk cijfer is ingevuld volgens de sudoku regels. Het lijkt op het eerste gezicht erg makkelijk, maar ik daag jullie uit zelf ook zoiets te maken ;) Ik post geen source, omdat er teveel grijpgrage mensen op dit forum zitten, dus ik zal wat resultaten posten:Map created in 287ms, rebuild 1 times.
392|547|861
185|936|724
764|821|935
---+---+---
978|314|652
516|792|483
423|658|179
---+---+---
859|473|216
247|165|398
631|289|547

Map created in 280ms, rebuild 1 times.
829|516|734
567|943|128
314|872|695
---+---+---
432|695|817
975|481|263
186|237|549
---+---+---
698|724|351
241|358|976
753|169|482

Map created in 769ms, rebuild 3 times.
126|938|745
374|125|986
859|476|312
---+---+---
935|812|674
218|647|593
647|593|128
---+---+---
762|381|459
591|264|837
483|759|261

Map created in 1157ms, rebuild 7 times.
398|517|426
654|293|817
127|846|395
---+---+---
742|958|631
986|431|572
513|672|948
---+---+---
469|125|783
235|784|169
871|369|254

Map created in 281ms, rebuild 1 times.
293|716|584
761|485|293
485|392|761
---+---+---
126|579|438
378|624|159
954|831|627
---+---+---
842|967|315
637|158|942
519|243|876Ik ben zelf erg tevreden met het resultaat, en de snelheid is (op die 7 rebuilds na) ook erg acceptabel. Het rebuilden moet gebeuren, als er uiteindelijk toch geen opties meer mogenlijk zijn, maar meestal is er na 3x rebuilden zeker resultaat.

Nu moet ik dus nog de puzzle zelf gaan maken, door cijfers weg te halen. Ik ga hier eerst wat informatie over zoeken, en zal hier later wat meer over posten als ik wat meer succes heb ;)

Groeten,
~Sph

matzo
%Europe/Berlin %643 %2005, 16:26
fantastisch, heb het zelf ook ooit eens geprobeerd maar had nog niet veel ervaring en dus lukte het niet, ik ben zelf een sudoku-fan en ga het nu ook eens proberen te maken.
veel geluk.

Roenes
%Europe/Berlin %651 %2005, 16:38
Wellicht meer iets voor het battle forum aangezien je niet echt iets showed en geen source geeft :) Ik verplaats em dus even.

En wellicht als ik tijd en zin kan vinden dan ga ik zelf ook eens aan de gang :)

SaphuA
%Europe/Berlin %659 %2005, 16:49
Show hier jouw eigen afgewerkte FlashProject, Site, Design etc.
Vind het toch echt iets voor showcase hoor? Het is af (voor zover het als af beschouwd kan worden), en ik wil het laten zien aan de rest. Dus vind de verplaatsing een beetje onnodig.

SaphuA
%Europe/Berlin %670 %2005, 17:05
Dauntless wilde zelf ook proberen een engine als deze te maken, en hij kwam tijdens het zoeken deze post tegen: http://www.setbb.com/phpbb/viewtopic.php?t=293&mforum=sudoku
Ik was vergeten hem hierbij te zetten, voor de mensen die het zelf willen proberen. En ja, ik heb alleen de informatie in die post gebruikt. Dauntless begon al te zeuren dat ik het niet zelf gemaakt had, en dat wil ik natuurlijk niet op mijn geweten hebben ;)

Edit: Geef jullie dit vast cadeau ;) Dan kan je het er zelf in gaan maken :D

var tileW = 18;
var tileH = 18;
var d = 0;
for (var j = 0; j<9; j++) {
for (var i = 0; i<9; i++) {
var t = this.createEmptyMovieClip("t_"+j+"_"+i, ++d);
t.beginFill("0xDDDDDD", 100);
t.lineStyle(j%3 == 0 ? 2 : 1, 0x000000);
t.lineTo(tileW, 0);
t.lineStyle((i+1)%3 == 0 ? 2 : 1, 0x000000);
t.lineTo(tileW, tileH);
t.lineStyle((j+1)%3 == 0 ? 2 : 1, 0x000000);
t.lineTo(0, tileH);
t.lineStyle(i%3 == 0 ? 2 : 1, 0x000000);
t.lineTo(0, 0);
t._x = i*tileW;
t._y = j*tileH;
t.createTextField("t", 1, 0, 0, tileW, tileH);
t.t.selectable = false;
t.t.text = "*";
t.t.autoSize = true;
t.t._y = Math.round((tileH/2)-(t.t._width/2))-4;
t.t._x = Math.round((tileW/2)-(t.t._height/2))+3;
}
}

Edit: tileW moest 18 zijn, niet 40 :D

~Sph

Roenes
%Europe/Berlin %682 %2005, 17:22
Sorry, je hebt gelijk. Ik verplaats em weer even terug naar de showcase :)

SaphuA
%Europe/Berlin %682 %2005, 17:23
Hahahahahah :D Rare meneertjes hier op dit forum ;)

Fl4sh3r
%Europe/Berlin %822 %2005, 20:43
Interessant topic, ik ben al wel bezig geweest met een Sudoku Solver in C# .Net. Deze werkt gewoon het veld bruteforce af en maakt dus gebruik van de snelheid van computers. Hij is dus niet echt intelligent. Ook gokt ie nooit, als er geen zekerheden meer zijn en nog wel open vlakjes geeft ie t op (voor alsnog).

Ik ben wel benieuwd hoe dit project verder afloopt, als er een goed Sudoku genererend script uit komt ben ik wel geïnteresseerd. En natuurlijk zal ik in de loop der tijd meedenken, voor zover ik tijd heb.

SaphuA
%Europe/Berlin %880 %2005, 22:07
Jah bruteforce is ook een optie, maar dat is niet echt iets voor in Flash ;) Dus moet ik de solver methode gebruiken. Het idee werkt alsvogt:

Om hier een puzzle uit te maken, moet ik dus cijfers weghalen. Waneer je een random cijfer weghaald, moet de app proberen de puzzle op te lossen. Als dit lukt, gaat hij verder met een volgend random cijfer, anders zet hij het nummer terug en begint ie openieuw.

Dus in princiepe moet ik dus eerst een sudoku-sulver schrijven, voordat ik een sudoku-creator kan maken. Ik ben nu dus naar wat simpele oplos methodes aan het zoeken, voordat ik hier aan begin. Ik ben ook even aan het denken hoe ik dit het snelst mogenlijk kan maken, omdat dit nogal wat CPU kracht gaat vergen.

Als er mensen zijn die willen meedenken, graag :)

~Sph

Fl4sh3r
%Europe/Berlin %937 %2005, 23:30
De creator van http://www.sudoku.com/ is toch behoorlijk snel.

Het kan aan de taal liggen, maar als je echt voor ieder vakje dat je gaat wissen de puzzel gaat oplossen kost dat toch aardig wat tijd.

man§zat
%Europe/Berlin %015 %2005, 01:21
De originele sudoku's staan bekend om hun mooie begin opmaak, dus bijvoorbeeld een symetrische verdeling van de gegeven cijfers.

Even een extra uitdaging dus :)
Knap werk trouwens.

schoonmoeder
%Europe/Berlin %403 %2005, 10:41
mooi idee.

ik was zelf ook aan het nadenken erover maar heb mij nog neit aan dit project gewaagd omdat ik momenteel bezig ben met een tower build game wat al aardig wat van mij vergt.

misschien moet je eens wat meer spitzen erbij pakken doormidden van het vergelijken van de begin waardes kwam ik aardig snel op een manier die eventueel een mooie opmaak zou bevorderen. probleem is alleen dat ik het nog niet heb uitgewerkt in flash ofzo. dus wens ik je nog even denk plezier.

ps. sudoku is een verslavend spel alleen weet ik niet of alles vrij is om straks aan te bieden.