Static Chess इम्प्लीमेंटेशन
- साधारण, और सिर्फ़ ज़रूरी फीचर्स वाला chess इम्प्लीमेंटेशन
- सभी पेज केवल HTML और CSS से बने हैं
- chess की हर चाल लिंक पर क्लिक करके की जाती है
- दोस्त को लिंक भेजें, फिर सामने वाला चाल चले और वापस लिंक भेजे — खेल इसी तरह आगे बढ़ता है
- गैर-ज़रूरी animation या चमकदार interactive elements gameplay में बाधा नहीं डालते
- यह जानने की जिज्ञासा है कि Google इस साइट को index करते समय क्या chess की सभी संभावित चालों की गणना कर पाएगा
फीचर सीमाएँ और बग
- फीचर्स बहुत सीमित हैं और हो सकता है कि यह ठीक से काम न करे
- अगर कोई bug मिले तो कृपया रिपोर्ट करें
प्रेरणा देने वाला आइडिया
- tic-tac-toe गेम की सभी संभावित अवस्थाएँ दिखाने वाली साइट पर हुई Hacker News चर्चा से प्रेरणा मिली
आगे की योजना
- इसे बढ़ाकर वास्तविक gameplay को सपोर्ट करने की योजना है
- लगता है कि यह दोस्तों के साथ लंबा chess game खेलने के लिए एक simple interface बन सकता है
- static AI के खिलाफ खेलने की सुविधा जोड़ना भी मज़ेदार हो सकता है
- अगर कोई फीचर है जो आप जोड़ना चाहते हैं, तो PR स्वागत योग्य है
मुख्य कोड
class StaticChess {
// 생략...
async fetch(req: Request): Promise<Response> {
const gameInfo = parseURL(req.url);
if (gameInfo === undefined) {
return new Response("Not Found", { status: 404, headers: { "cache-control": "max-age=86400, public" } });
}
const game = new Game(gameInfo.game, gameInfo.selected);
return new Response(
renderToString(
<html>
{/* 생략... */}
<div className="board">
{this.rows.map(row => (
<div key={row} className="row">{this.squares.map(square => game.squareContent(row, square))}</div>
))}
</div>
{/* 생략... */}
</html>
),
{ headers: { "content-type": "text/html", "cache-control": "max-age=86400, public" } },
);
}
}
class Game {
// 생략...
squareContent(row: number, square: number) {
// 생략...
const squareContent = (() => {
if (this.selectable.includes(pos)) {
return <a href={`/${this.fen}/${pos}`}>{pieces[this.board[row][square]?.type]}</a>;
}
const nextMove = this.nextMoves[pos];
if (nextMove !== undefined) {
return (
<a href={`/${nextMove.after.replaceAll(" ", "_")}/`}>
{pieces[this.board[row][square]?.type]}
</a>
);
}
return <span>{pieces[this.board[row][square]?.type]}</span>;
})();
// 생략...
}
}
GN⁺ की राय
- HTML/CSS मात्र से web chess game बनाना एक दिलचस्प प्रयास है। लेकिन हर state को static page बनाना व्यावहारिकता के लिहाज़ से सवाल खड़े करता है।
- वास्तविक उपयोगिता को देखें तो अंततः state को backend में manage करना और frontend से API call करना ज़्यादा उपयुक्त लगेगा।
- static pages के रूप में सभी states को पहले से calculate करके रखना आइडिया के तौर पर मज़ेदार है, लेकिन वास्तविक users के लिए इसका बड़ा अर्थ नहीं दिखता।
- React के साथ SSR करना ठीक तरीका है, लेकिन caching या prefetching जैसी चीज़ों से performance सुधारने की काफ़ी गुंजाइश दिखती है।
- मिलते-जुलते open source projects में lichess शामिल है। यह भरपूर फीचर्स और शानदार UI देता है, इसलिए इसे संदर्भ के तौर पर देखा जा सकता है।
- chess engine के साथ जोड़कर AI mode सपोर्ट करना हो तो WASM के उपयोग पर भी विचार किया जा सकता है।
1 टिप्पणियां
Hacker News की राय
https://fav.farmऔरhttps://val.townजैसे उपयोगी resources के बारे में पता चला।