Sokan játszanak most on-line társasjátékokat, de a szerverek sokszor leterheltek. Hogyan lehetne az alábbit a legjobban megoldani házilag?
Ha van blogod, tudtok hozzászólást küldeni benne.
A hozzászólásban meg el lehet küldeni - a sakklépések jelöléséhez
hasonlóan - a kártyalapok küldésének módját is - például:
a Javascript úgy jöhet be a képbe, hogy mindezt automatizálja: figyeli (a meglevő hozzászólások alapján), hogy ki, mikor, mit csinál - húzott a talonból, eldobott egy lapot, átadott egy játékosnak, ki jön, stb... - és ez alapján vizualizálja a játékot és a felhasználó interakciója alapján küld el hozzászólást a (bejelentkezett) felhasználó nevében.
Mindez átültethető azonnali üzenetküldő platformokra, csevegőcsatornákra is. Ha nincs API-juk, de van webes felületük, szóba jöhet a GreaseMonkey/Tampermonkey is (az is Javascript-alapú).
A fő kérdést a talon, az abból, vagy más játékostól történő rejtett húzás jelenti.
Ehhez kellene egy független, "játékvezető" játékos, akinél játék kezdetén lokálisan generálódik egy véletlenszerű kártyasorozat (ez lokálisan tárolható Localstorage-ben) - ez lesz a talon.
A rejtett húzásokat kétkulcsos titkosítással lehetne megoldani:
1. az egyik (például aki húzni szeretne) fél elküldi a publikus kulcsát a másiknak
2. a másik (például akitől húzni szeretnének, vagy akár a talon esetén is) fél a küldeni kívánt kártya publikus kulccsal titkosított változatát
3. az egyik fél a nála levő privát kulccsal dekódolja a kártyát
nem kell annyira bonyolult titkosítás, megbízunk egymásban, hogy nem csalunk, csak legyen praktikus
nem kell semmiféle vizulizáció se, mindneki maga vezeti, olyan játékok ahol monjuk mindneki a saját setjeit gyűjtögeti, saját tablóját vezeti, vagy flip and write játékok, csak kell egy közös pakli
"nem kell annyira bonyolult titkosítás"
A titkosítást azért említettem, mert a kártyajátékok egy jó részénél a talonból/-ba vagy másik játékostól/-nak való átadás során a többi játékos számára az átadott lapoknak rejtve kell maradnia, ellenkező esetben könnyen tudnak stratégiát kialakítani.
A kétkulcsos (aszimmetrikus) titkosítás meg a titkosítás egyik formája, ahol két kulcs van: az egyikkel - a publikussal - csak titkosítani lehet, a másikkal - a priváttal - meg dekódolni. A publikus kulcsból nem (könnyen) deríthető ki a privát, így ha egy harmadik fél megszerezné a publikus kulcsot, még nem tudja elolvasni a másik féllel történő üzenetváltásom (jelen esetben kártyacserét).
Erre Javascriptben vannak előre megírt függvénykönyvtárak - például:
"nem kell semmiféle vizulizáció se"
A "vizualizációt" értsd úgy, hogy a blog/chat hozzászólást beküldő űrlapját kiegészíted pár gombbal - "kártyát húzok a talonból", "kártyát dobok", "kártyát adok xyz-nek", "kártyát húzok xyz-től" - illetve megjelenítheti a paklit, így nem kell manuálisan beírogatni hogy: "adj egy lapot", majd válaszként: "Pikk dáma", illetve nem kell feljegyezgetni a pakliban levő kártyákat.
"csak kell egy közös pakli"
JavaScriptben a talon "relatíve" egyszerűen kivitelezhető:
1. A játék induláskor létrehozunk egy üres, a kártyák tárolására szolgáló tömböt.
2. A (francia kártya esetén) négy színből (treff, káró, kőr pikk) és a 13 számból (ász, 2, 3, 4, 5, 6, 7, 8, 9, 10, jumbo, dáma, király) álló kártyákkal feltöltjük a tömböt (két egymásba ágyazott ciklussal - ahol az egyik ciklusban a színeken, a másik ciklusban a számokon iterálunk át - megoldható).
3. Ezt a tömböt összekeverjük (erre szolgál a Fisher-Yates keverés: [link] )
4. Majd lokálisan elmentjük a tömböt ( [link] )
5. Adott időközönként (window.setInterval(): [link] ) frissítjük a hozzászólásokat/az oldalt ( [link] ), a lokális mentésből újratöltjük a tömböt, és nézzük, hogy a hozzászólások között (a hozzászólások összegyűjtéséhez: [link] ) van-e talonból való kivét vagy lapdobási kérés.
Ha van, akkor:
* Leellenőrizzük, hogy létezik/van-e/nincs-e ilyen kártya a talonban (vagy egyáltalán van-e kártya a talonban), volt-e már ilyen kérés (a hozzászólás dátumából következtethetünk erre, de rögzíthetjük a talonnak szóló hozzászólásokat is)
* Ha az ellenőrzés sikerrel járt, akkor a hozzászólás jellegétől függően:
a, Vagy - húzás esetén - kiveszünk a tömbből egy elemet (pop(): [link] vagy shift(): [link] vagy splice(): [link] )
b, Vagy - dobás esetén - beteszünk a tömbbe egy elemet (push(): [link] vagy unshift(): [link] )
A 4. pontban említett módon elmentjük a tömb állapotát (illetve a legutóbbi hozzászólás dátumát - lásd fentebb), majd hozzászólásban elküldjük az eredményt (például: "Sanyi: itt a pikk dáma", vagy "Józsi: nincs több lap")
Az egészben a nehézséget a JavaScript oldalhoz kötése (van-e lehetőség JavaScript oldalba illesztésére - saját oldalnál igen - vagy ha nincs, akkor GreaseMonkey/Tampermonkey felhasználói szkripttel megoldható), hozzászólások lekérése, de főleg elküldése (AJAX/XMLHTTPRequest - ott közbeszolhat a Cross Domain Request! Vagy űrlap value attribútumának kitöltése, majd a gombra való kattintás szimulálása?) jelenti - ez nagyon függ az adott oldal kialakításától.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!