खेल बनाने का स्पष्ट तरीक़ा यह है कि फ़ैसला फ़ोन करे। खिलाड़ी समाप्त करता है, ऐप स्कोर निकालता है और सर्वर को बता देता है कि क्या हुआ। तेज़, सरल — और सर्वर की कोई राय ही नहीं।
इसका अर्थ यह भी है कि स्कोर वही है जो ऐप कहे। और ऐप किसी और के कंप्यूटर पर चलता कार्यक्रम है, जिसे वह बदल सकता है।
हम इसके बदले क्या करते हैं
यहाँ हर खेल आपकी चालें दर्ज करता है — परिणाम नहीं, चालें। समाप्त होने पर वह सूची हमारे सर्वर तक जाती है, और सर्वर उसी शुरुआती स्थिति से वही बाज़ी दोबारा खेलता है, उन्हीं चालों पर वही नियम लगाकर।
यदि वह आपके परिणाम तक पहुँचता है, सत्र स्वीकार होता है और इनाम सर्वर की अपनी प्रति से गिना जाता है। न पहुँचे तो सत्र अस्वीकार, और कुछ जमा नहीं होता।
इंजन दोनों जगह एक ही कोड है, और वह नियतात्मक है: वही बीज और वही चालें दी जाएँ तो वही पटल बनना चाहिए। यह एक शर्त डिज़ाइन का आश्चर्यजनक हिस्सा गढ़ती है। जो कुछ यादृच्छिक है वह ऐसे बीज से आए जो सर्वर के पास भी हो। जो घड़ी पढ़ता है वह ऐसा समय पढ़े जिस पर दोनों पक्ष सहमत हों। जो नियम तेज़ उपकरण पर अलग और धीमे पर अलग बरतता हो, वह नियम हम रख ही नहीं सकते।
इसकी क़ीमत
प्रति समाप्त बाज़ी कुछ मिलीसेकंड, और खेल कैसे लिखे जाएँ इस पर एक वास्तविक बंधन। यह हमारी अपनी ग़लतियाँ भी पकड़ता है, जो सुनने में जितना सहज लगे उतना है नहीं।
एक उदाहरण, क्योंकि यह ईमानदार क़िस्म का है। एक फ़सल JSON वस्तु की कुंजियाँ क्रम से पढ़कर बाँटी जा रही थी। एक ही सामग्री की दो प्रतियाँ — एक फ़ाइल से, दूसरी डेटाबेस से — वे कुंजियाँ अलग क्रम में लौटातीं, और भंडार बीच रास्ते भर जाता। वही नियम, वही चालें, अलग परिणाम। ईमानदार खिलाड़ियों के सत्र इस संदेश के साथ अस्वीकार हो रहे थे कि किसी बस्ती में 591 नहीं, 590 भार हैं। खेल में कुछ भी ग़लत नहीं दिखता था; पुनरावृत्ति बस स्वयं से असहमत थी।
यह दोष हर इकाई-परीक्षण के लिए अदृश्य था, क्योंकि दोनों हिस्से अलग-अलग पास होते थे। इसे उजागर करने के लिए दोनों पक्षों को अलग-अलग रास्तों से सामग्री मिलनी ज़रूरी थी।
इससे क्या मिलता है
ऐसा लीडरबोर्ड जिसमें कोई सीधे नहीं लिख सकता, और ऐसा इनाम जो गढ़ा नहीं जा सकता। ये एक ही गुण के दो कथन हैं: आप वही कमाते हैं जो पुनरावृत्ति कहती है।
इससे हम तब भी सटीक रह पाते हैं जब कुछ बिगड़े। अस्वीकृत सत्र कोई अस्पष्ट आरोप नहीं — वह एक ज्ञात बिंदु पर असहमति है, और लगभग हमेशा बीच में टूटा कनेक्शन, खिलाड़ी का कोई कृत्य नहीं।