A program másodpercenként kérdi le a szerverről, hogy van-e változás a táblán¹. Ha a lépéskor más a tábla, mint ahonnan a lépés indult (tehát a másik oldal már lépett), akkor szívhez szóló alert() közli velünk ezt a tényt². Ha nagy a tömeg a tábla körül, akkor ezt előreláthatólag elég gyakran lehet erre számítani.
szerk.: Aki szeretné a gombokat próbálgatni (amelyek amúgy azt csinálják, ami rájuk van írva), az töltse be a lapot hash nélkül. Ne rontsuk el a potenciális tömegverekedést azzal, hogy tíz lépésenként új táblát generálunk! :-)
¹ Szerintem aszinkron http nem megy a szolgáltatómnál, bár nem próbáltam. Cél volt, hogy telefon böngészőjével is lehessen játszani :-))
² Lusta voltam bármi kulturáltabb módon lekódolni. Nem feltétlenül vagyok béna UX-designban, inkább csak betegesen lusta. :-)
- numen blogja
- A hozzászóláshoz be kell jelentkezni
- 1073 megtekintés
Hozzászólások
beteg, de jo :D
- A hozzászóláshoz be kell jelentkezni
Azert egy szal loval sikerult letakaritani a komplett fekete sereget. Mondjuk, hogy becsuletsakk.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Az. Alapvetően az ember olyannal sakkozik, akivel sakkozni szeretne, emiatt nem tartottam fontosnak semmilyen ellenőrzést. Egyszerűbb ellenőrzéseket/részleges ellenőrzéseket lehet, hogy beleírok, de egy teljes ellenőrzéshez lusta vagyok.
int getRandomNumber() { return 4; } // ← aláírás
//szabályos kockadobással választva. garantáltan véletlenszerű. xkcd
- A hozzászóláshoz be kell jelentkezni
Annyi ellenorzest csinalj mar, hogy a babuk szabalyosan lepjenek. A felrekattintasok miatt akarmit is lehet csinalni, olyat is, amit nem illik, utana meg mar keso, hogy "bocs, felrement". Nem kell rosalas, meg ilyen, de valami legyen.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Nem ok nélkül nem volt benne, elég nehéz jól megírni.
Most egy buta változatot beleírtam (a félrekattintást a ctrl-+ jobban orvosolja ennél :)), így a teljes kód másfélszeresére duzzadt. Választanom kellett, hogy tömören írjam, helyesen, vagy úgy, hogy megértsem, ebből az utolsót választottam. Valószínűeg kis utánaolvasással és egyéb sakkprogramok kódját megnézve jobb kódot írtam volna (javascriptben harmadennyi kódból gép ellen játszható sakkot is írtak már).
A helyes lépéseket elfogadja mind, viszont változatlanul elég sok a false positive:
- minden bábu tud ugrani: Elég nehéz végigcsekkolni az összes köztes mezőt, nem akartam ciklust írni.
- a tábla olykor „körbefordul” a sorhatároknál: az ellenőrzés úgy lett „megoldva”, hogy a mezőket sorszámozva a két mező közti távolságot vettem alapul, tehát a ló 6,10,15,17 mezőnyire léphet el mindkét irányban. Emiatt viszont lóval el lehet lépni például az a8-ról az a2-re. Ugyanígy megengedi pl., hogy a király a8-ről a1-re vagy b1-re lépjen. A futónál ezt a problémát át lehetett hidalni azáltal, hogy egy adott színű mezőre korlátoztam a mozgását.
- sáncolás: változatlanul kétlépéses művelet, a király – amíg nem mozdítják meg – bármikor elléphet a 3-as vagy 7-es oszlopra. A bástyákat nem ellenőrzi, a köztes mezőket szintén nem.
- en passant: megoldható egy lépésből, viszont nem ellenőrzi, hogy mikor ért oda melyik paraszt, tehát kb. akármikor lehet, ha a megfelelő sorban vannak.
- nem ellenőrzi, hogy sakkban van-e a király.
A tábla átfordulását leszámítva valószínűleg ezen hibák megmaradnak, ahhoz képest, hogy Fisher-random játékgenerátornak indult, picit elfajult a project… :-)
int getRandomNumber() { return 4; } // ← aláírás
//szabályos kockadobással választva. garantáltan véletlenszerű. xkcd
- A hozzászóláshoz be kell jelentkezni
Igen, engem foleg az zavart, hogy a hulye loval tudtam bastyat jatszani, es vegigtarolni a teljes 8-as sort. Es minderre ugy jottem ra, hogy elneztem, es veletlenul 3-at leptem atlosan a sima L alaku ugras helyett. Ez roppant zavaro tud lenni.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
A dolognak az a bája egyébként, hogy a lépegetés volt az első plusz feature, ami belekerült, mert legegyszerűbb formájában 2-3 sorból meg lehetett oldani, és akkor meg miért ne – ekkor mondjuk még a saját bábut is le lehetett venni, de ne akadjunk fel mindenen.
int getRandomNumber() { return 4; } // ← aláírás
//szabályos kockadobással választva. garantáltan véletlenszerű. xkcd
- A hozzászóláshoz be kell jelentkezni
Barátnőm is egyszer sakk programot. Ő ellenőriztette a lépések helyességét, stb.. Azt mondja nem nehéz megoldani :)
- A hozzászóláshoz be kell jelentkezni
+1
Anno C-ben írtam szoftlabra egy sakk programot. Ciklus se kellett az ellenőrzéshez. Jut eszembe, kell. Hirtelen a lóra gondoltam, annál nem szükséges.
- A hozzászóláshoz be kell jelentkezni
Nekem igen :-)
Ha nagyon akarnám, le tudnám kódolni, de nézőpontom szerint ez a cucc már rég többet csinál, mint amit feltétlenül szükséges. A sakk szabályai pont azon dolgok közé tartozik, amit kevésbé szívesen kódolok le: látom benne a kihívást, tudom, hogy szépen, hatékonyan, ötletesen, elegánsan meg lehet oldani, és azt is tudom, hogy valószínűleg rondán és minden kreativitást nélkülözve írnám meg. Mintha Kaszparovot verné meg az ember, kickboxban.
Ha az elején tudom, hogy ezeket a funkciókat bele akarom rakni, akkor valószínűleg igyekszem absztraktabb kódot írni. Jelenleg ahányszor valami új funkciót adok hozzá, úgy érzem, mintha még egyet kevernék a spagettin, amit majd ki kell bogoznom. :)
int getRandomNumber() { return 4; } // ← aláírás
//szabályos kockadobással választva. garantáltan véletlenszerű. xkcd
- A hozzászóláshoz be kell jelentkezni