Fisher random

Nem tudom, ki szokott sakkozni, velem elég gyakori. Ahhoz képest, hogy mennyire tudok, sűrűn.
Azt sem tudom, ki szokta a $title-ben említett variánst űzni, velem még nem fordult elő ilyen.
Ennek ellenére ma hajnalban gondoltam egyet, és leprogramoztam egy ehhez nagyon hasonlót, csak JavaScript alapokon, íme: Fisher Random Table Generator.

A chessgames változatához képest előnye, hogy itt már lehet lépni is a bábukkal, megjegyzendő azonban, hogy semmilyen ellenőrzést nem futtat. Ez egyrészt gyengeség, másrészt viszont viszonylag egyszerűvé teszi olyan lépések végrehajtását, mint az en passant vagy a sáncolás. Az esetleges egyébként irreverzibilis szabálytalan lépéseket nemes egyszerűséggel egy visszavonással oldottam meg.

Hátránya, hogy a FEN kódot nem írja ki, a közeljövőben valószínűleg ez változik, és lehetővé akarom tenni FEN kód alapján tetszőleges állás betöltését is (a hagyományosét mindenképp). Távlati terv az online játék lesz, ehhez már rakni kell a dolog mögé egy minimális szerveroldalt is, sebaj… Már csak azért is, hogy az efféle tervekből rendszerint nem lesz semmi.

Update: FEN betöltése, valamint az aktuális állás kijelzése implementálva.

BUG: ha elléptünk egy bábuval, akkor az fennmarad a tábla újraállításánál. A javítás triviális, folyamatban.

Update: a parasztok előléptetése és egyéni tábla készítése is lehetséges az alul található mezőkkel. Az utóbbi megkönnyítésére hozzáadtam egy „Clean Table” gombot.

Update: Még egy gomb került a többi közé, amivel a táblát meg lehet fordítani. A feketének hasznos lesz.

Update: elkészült egy nagyon basic online mód is. Miután felállítottuk a táblát, rá kell kattintani a „New Game”-re. Ekkor az alatta lévő beviteli mező frissül egy gameID-re. Ezt kell a partnernek beírnia, és rákattintania a „Join Game”-re.
Ez a funkció nagyon instabil, teleholdkor működik, megfelelő mennyiségű szűzlány feláldozása után, és olyankor is elég gyakori a szinkronizációs hiba. Cserébe a funkció biztonsági kockázata sem zérus finoman szólva, csak olyannal játsszunk, akiben megbízunk. ;)

Hozzászólások

sakkozni szoktam, de maradtam a hagyományos sakknál :>

Ubuntu 10.04, Thinkpad x61s

szábszkrájb
------------------------------------
Az 1337-es számú linuxfanboy

Ohhh... en igen kevesse ertem a sakkot, de tuti, hogy duplakattra el kell tunnie a baboknak?
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Hat most ez csak en nem ertem? :D
Probalnam ugy jatszani mint a normal sakkot, de a babuk mozgatasakor sync error van es nem mozog a babu.
Ez meg kicsit bugos :P de grat! :D

Igen, a hálózati játék nem kicsit bugos… ☺ Alapjában véve a cuccost offline használatra terveztem, az online játék az csak hab a tortán. Picit összeesett, de hab.
Ha hibát dob, érdemes újrapróbálni, mondjuk sync errornál a legproblémásabb, mivel ott újraállítja a táblát. Valószínűleg azt az alertet inkább egy confirm dialogra állítom át, hogy rá lehessen erőltetni a szerverre a saját állásunkat.

int getRandomNumber() { return 4; }  // ← aláírás
//szabályos kockadobással választva. garantáltan véletlenszerű.  xkcd

Akkor meg bugok:

- Egy szem fekete gyaloggal le tudtam pucolni a teljes tablat, szinre, nemre, formara, lepesre valo tekintet nelkul.
- Visszafele is tudnak a gyalogok lepni
- Nem tudom, most akkor egyelore ugye nincsen egyaltalan vedelem a szabalytalan lepesek ellen? Egy bastya peldaul tudott lolepesben lepni, a gyalogom pedig egy szep ives oles ugrassal a tabla masik szelen termett, atugorva mindenkin.

--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Ezek maradnak is – a lépésellenőrzés implementálását számomra túl nehéznek és/vagy időigényesnek tartom, eredetileg tényleg csak egy fisherrandom-generátort akartam írni.

… csak utána 5-6 sor kódból meg lehetett oldani, hogy a bábuk léphessenek (igen, akárhova).
… ugyanígy egy nagyon basic visszavonás is könnyen megoldható volt…
… és utána belekerült a FEN-rekord megjelenítése, mert olyan a chessgames.com-on is volt…
… utána egy FEN-rekord megjelenítése sem tűnt már nehéz feladatnak…
… végül ha már úgyis megvan a FEN-rekord, akkor ezt egy szerveren keresztül megosztva az online játék is lehetséges…

Szóval a szoftver alapképességéhez nem tartozik hozzá az, hogy játszani lehet vele, de a fenti funkciók mind megoldhatóak voltak 5-10-20-30 sornyi kóddal, úgyhogy belekerültek. Jelenleg a teljes kód nincs 16 kbyte, a lépésellenőrzés valószínűleg önmagában lenne annyi.

A lustaságomat megpróbálom inkább erényként felfogni: jelenleg a táblán minden játék játszható, amihez elég egy sakktábla és legfeljebb 64 darab bábú – beleértve a dámát, franciasakkot, de az elmebetegebbje akár amőbázhat is rajta… Továbbá nyilván beállítható tetszőleges kezdőpozíció.

int getRandomNumber() { return 4; }  // ← aláírás
//szabályos kockadobással választva. garantáltan véletlenszerű.  xkcd

Esetleg a FEN mezőbe beírhatod a 8/8/8/8/8/8/8/8 -at, hogy megdolgozzál vele :P
De mivel a FEN-értelmező a /-t figyelmen kívül hagyja, írhatsz tulajdonképpen akár 99999991-et is vagy 88888888-at is. (64-et nem, mert karakterenként értelmezi)

int getRandomNumber() { return 4; }  // ← aláírás
//szabályos kockadobással választva. garantáltan véletlenszerű.  xkcd

pedig hihetetlenül egyszerű. ha adsz egy táblát, ahol nem igaz az, hogy en passant lehetőség van AND nem igaz az, hogy fischer-sánc lehetséges, akkor simán felírom neked a fent. az előző kettő kitétel azért kell, mert soha nem foglalkoztam az ilyen fenekkel, bár, most, hogy eszembe jutott, meg is nézem.
------------------------------------
Az 1337-es számú linuxfanboy

cserébe játszhatóvá válik a kétlépéses sakkvariáns, ami nehézkes lenne, ha figyelne arra, hogy a játékosok egymás után csak saját bábuval csak üres vagy ellenséges mezőre léphessenek. :)

alias killall='echo "Wenn ist das Nunstück git und Slotermeyer? Ja. Beiherhund das Oder die Flipperwaldt gersput." | espeak -vde' #That's not funny.