2013-06-08 4 views
15

मैं एक ऐसा प्रोग्राम बनाने की योजना बना रहा हूं जो यूसीआई शतरंज इंजन के साथ इंटरफेस करता है। मैं इस पर कुछ शोध कर रहा हूं, लेकिन इससे पहले कि मैं इसके साथ गहराई से अधिक जानकारी प्राप्त करूं, मैं थोड़ा और जानकारी प्राप्त करना चाहता हूं। मैं सोच रहा था कि क्या आप में से कोई भी यूसीआई इंजन और फ्रंट-एंड प्रोग्राम के बीच कुछ उदाहरण "एक्सचेंज" प्रदान कर सकता है। मैं वास्तव में व्यावहारिक इंटरफ़ेस कोड (जैसे कमांड भेजने/प्राप्त करने) से चिंतित नहीं हूं, जो कि काफी सरल होना चाहिए। मैं बस एक छोटे से खेल और कुछ विकल्पों के कुछ अच्छे उदाहरण प्राप्त करने की कोशिश कर रहा हूं। मैं वर्तमान में स्टॉकफिश इंजन का उपयोग कर रहा हूं, लेकिन मैं कई इंजनों का उपयोग करने में सक्षम होना चाहता हूं।यूनिवर्सल शतरंज इंटरफेस का उपयोग

तो किसी भी तरह, मैं यूसीआई पर एक गेम खेलने के तरीके के कुछ उदाहरण ढूंढ रहा हूं।

+0

क्या आपने [विनिर्देश] (http://www.shredderchess.com/chess-info/features/uci- सार्वभौमिक-शतरंज interface.html)? 'सभी संचार मानक इनपुट और टेक्स्ट कमांड के साथ आउटपुट के माध्यम से किया जाता है। – raina77ow

+0

मुझे पता है कि, मैं एक मूल खेल खेलने के लिए पाठ के उदाहरणों की तलाश में हूं। – Nathan

उत्तर

17

मान लीजिए कि जीयूआई मानव उपयोगकर्ता और इंजन के बीच एक मैच को सुविधाजनक बना रहा है। मान लें कि उपयोगकर्ता e2e4 से शुरू होता है। फिर आदेश कुछ ऐसा दिखाई देंगे:

// GUI: tell the engine to use the UCI protocol 
uci 

// ENGINE: identify 
id name Chess Engine 
id author John Smith 

// ENGINE: send the options that can be changed 
//   in this case the hash size can have a value from 1 to 128 MB 
option name Hash type spin default 1 min 1 max 128 

// ENGINE: sent all parameters and is ready 
uciok 

// GUI: set hash to 32 MB 
setoption name Hash value 32 

// GUI: waiting for the engine to finish initializing 
isready 

// ENGINE: finished setting up the internal values and is ready to start 
readyok 

// GUI: let the engine know if starting a new game 
ucinewgame 

// GUI: tell the engine the position to search 
position startpos moves e2e4 

// GUI: tell the engine to start searching 
//  in this case give it the timing information in milliseconds 
go wtime 122000 btime 120000 winc 2000 binc 2000 

// ENGINE: send search information continuously during search 
//   this includes depth, search value, time, nodes, speed, and pv line 
info depth 1 score cp -1 time 10 nodes 26 nps 633 pv e7e6 
info depth 2 score cp -38 time 22 nodes 132 nps 2659 pv e7e6 e2e4 
info depth 3 score cp -6 time 31 nodes 533 nps 10690 pv d7d5 e2e3 e7e6 
info depth 4 score cp -30 time 55 nodes 1292 nps 25606 pv d7d5 e2e3 e7e6 g1f3 

// ENGINE: return the best move found 
bestmove d7d5 

मैंने बातचीत के कई पहलुओं को सरल बना दिया है। एक पूरी तरह से विशेषीकृत जीयूआई को UCI specification (another source) में कई अन्य आदेशों का समर्थन करना होगा। आप यह भी देख सकते हैं कि मौजूदा जीयूआई कैसे काम करते हैं। उदाहरण के लिए, यदि आप Arena का उपयोग करते हैं, तो आप कमांड इंटरैक्शन के लॉग को देखने के लिए F4 दबा सकते हैं,

+2

धन्यवाद! मेरा मुख्य सवाल है, अगला क्या है? क्या शतरंज इंजन बोर्ड की आंतरिक स्थिति बनाए रखता है, या क्या मेरा प्रोग्राम एक FEN स्थिति रखेगा और बस इसे मेरे चाल (e2e4) के आधार पर अपडेट करेगा और इंजन का सबसे अच्छा कदम सुझाएगा? यदि इसमें कोई आंतरिक स्थिति नहीं है, तो मैं मैन्युअल रूप से FEN बोर्ड स्थिति को संभालता हूं और फिर उदाहरण के लिए "स्थिति CURRENT_POSITION d2d4" कॉल करता हूं और सर्वोत्तम कदम की प्रतीक्षा करता हूं? या क्या कोई आंतरिक बोर्ड राज्य है जिसे मैं अपडेट कर सकता हूं? यदि हां, तो कैसे? आपकी मदद के लिए धन्यवाद, ज़ोंग झेंग ली! – Nathan

+0

@ नाथन सभी इंजनों को एक आंतरिक बोर्ड बनाए रखना चाहिए, लेकिन जीयूआई को अभी भी प्रत्येक खोज से पहले स्थिति जानकारी भेजने की आवश्यकता है। आप इसे 'स्थिति [FEN] 'या' स्थिति स्टार्टोज़ [चाल अनुक्रम] 'के साथ कर सकते हैं, लेकिन बाद में आमतौर पर पसंदीदा माना जाता है। – Zong

+0

तो शुरुआत के बाद से पूर्ण चाल अनुक्रम? – Nathan

संबंधित मुद्दे