तर्क प्रोग्रामिंग का उपयोग करके इंटरएक्टिव प्रोग्राम (जैसे गेम्स / सिमुलेशन) कैसे लागू करें?


20

मैंने सुना है कि लॉजिक प्रोग्रामिंग OO या कार्यात्मक प्रोग्रामिंग जैसे अन्य प्रोग्रामिंग प्रतिमानों के लिए एक सामान्य-उद्देश्य विकल्प के रूप में काम कर सकता है। (चूंकि प्रोलोग ट्यूरिंग-पूर्ण है, यह ऐसा होना चाहिए!)

हालाँकि, मुझे यह देखने में परेशानी हो रही है कि एक प्रोलॉग या एक समान भाषा में एक सरल, चित्रमय कंसोल गेम की तरह एक इंटरैक्टिव कार्यक्रम को कैसे लागू किया जाएगा। आपके पास तथ्य, नियम हैं जो अधिक तथ्यों को प्राप्त कर सकते हैं, और प्रश्न जो तथ्यों को पुनः प्राप्त करते हैं। यह देखना आसान है कि आप सुडोकु सॉल्वर की तरह कुछ बनाने के लिए उन मूल तत्वों का उपयोग कैसे कर सकते हैं। लेकिन कैसे के बारे में पीएसी मैन, या अधिक बस, पांग?

कृपया ध्यान दें: मैं निम्न-स्तरीय विवरणों की तलाश नहीं कर रहा हूं, लेकिन एक वैचारिक अवलोकन। (उदाहरण के लिए: उच्च-स्तरीय शब्दों में, आप I / O को कैसे संभालेंगे? आप गेम स्टेट को कैसे स्टोर करेंगे? आप "मुख्य लूप" जैसी किसी चीज़ को कैसे लागू करेंगे? आप समय को कैसे मापेंगे? )


1
मुझे वास्तव में आपका प्रश्न पसंद है - मैं बहुत समय पहले प्रोलॉग बोल रहा था और अपने आप से एक ही प्रश्न पूछा था और ऐसा करने का तरीका कभी नहीं सोच पा रहा था।
क्रिश्चियन Sauer

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

2
"चूंकि प्रोलोग ट्यूरिंग-पूर्ण है, इसलिए ऐसा होना चाहिए!" - ज़रुरी नहीं। प्रोलॉग ट्यूरिंग-पूर्ण होने का मतलब है कि प्राकृतिक संख्याओं पर किसी गणितीय कार्य को ट्यूरिंग मशीन द्वारा गणना की जा सकती है जो प्रोलॉग द्वारा गणना की जा सकती है। लेकिन यह एल्गोरिदम के बारे में कुछ नहीं कहता है जो प्राकृतिक संख्याओं पर गणितीय कार्य नहीं कर रहे हैं। उदाहरण के लिए: एक ऑपरेटिंग सिस्टम प्राकृतिक संख्याओं पर एक गणितीय कार्य है? एक वेब सर्वर? एक खेल? सांत्वना के लिए मुद्रण? रोबोट चला रहा है? मुझे कोई संदेह नहीं है कि ये सब Prolog में किया जा सकता है, लेकिन यह जरूरी नहीं है कि Prolog Turing-complete हो।
जोर्ग डब्ल्यू मित्तग '

@ JörgWMittag: दूसरे शब्दों में, यह संभव हो सकता है, यह सिर्फ व्यावहारिक नहीं हो सकता है?
रॉबर्ट हार्वे

1
@ JörgWMittag - हां, वे सभी, उनके दिल में, बस संख्याओं पर गणित और भंडारण हैं।
बोबसन

जवाबों:


9

ट्रैकिंग गेम राज्य किसी अन्य प्रोलॉग कार्यक्रम में ट्रैकिंग राज्य से अलग नहीं है। आप तथ्यों को परिभाषित करते हैं और फिर निर्णय लेने के लिए उनका उपयोग करते हैं। यह बहुत पुराना है, लेकिन यह लेख एक्सप्लोरिंग प्रोलॉग: एडवेंचर्स, ऑब्जेक्ट्स, एनिमल्स, और टैक्स यह समझाने का एक अच्छा काम करता है कि यह एक गेम में कैसे काम कर सकता है। लेख से संक्षेप:

% Set up - you start in a house
location(you, house).

% Move to a new location.
goto(X) :- 
    location(you, L), % Read your current location into L
    connect(L, X), % Check if you can reach the new location X from L
    retract( location(you, L) ), % Remove the old location fact
    assert( location(you, X) ). % Add a new location fact. You are in X now.
    write($ You are in the $), write(X), nl.

इसके अलावा, आपको एक ग्राफिक्स और आईओ लाइब्रेरी की आवश्यकता है। वाणिज्यिक प्रोलॉग वितरण हो सकते हैं जिनमें उन्हें शामिल किया गया है। मैं SWI प्रोलॉग से सबसे अधिक परिचित हूं , इसलिए मैं शुरुआती बिंदु के रूप में plOpenGL का सुझाव दूंगा । न केवल यह आपको ओपनग्ल की रेंडरिंग क्षमताओं तक पहुंच प्रदान करता है, इसमें माउस और कीबोर्ड ईवेंट के लिए बाइंडिंग भी शामिल है। उदाहरण के लिए, एस्केप कुंजी के एक प्रेस को संभालने के लिए, आप एक कीबोर्ड नियम को परिभाषित करते हैं:

% 27 is ASCII Code for Escape
keyboard(27,_,_) :-
    write('Escape key was pressed...'),nl.

कुछ और विवरणों और माउस के मूवमेंट से निपटने के उदाहरण के लिए plOpenGL के बढ़ते प्रकाश उदाहरण पर एक नज़र डालें ।

यदि आप एक ग्राफिक्स लाइब्रेरी का उपयोग करते हैं, तो यह संभवतः आपके लिए गेम लूप को संभाल लेगा। मूल रूप से, आप लाइब्रेरी पर नियंत्रण को उल्टा कर देते हैं और उचित होने पर निष्पादित होने के लिए नियम प्रदान करते हैं: सेट अप करना, पुनरावृत्ति करना, आईओ इवेंट आदि। यदि आप एफपीएस को सीमित करना चाहते हैं या कोड को सशर्त रूप से समय के आधार पर चलाना चाहते हैं, तो आप समय / तारीख का उपयोग करके समय को ट्रैक कर सकते हैं। भविष्यवाणी करता है और तदनुसार निर्णय लेता है।

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


1
एक ही साइट जिसे आपने लिंक किया है, उसमें एक लंबा ट्यूटोरियल, एडवेंचर इन प्रोलॉग शामिल है , जो मुझे उपयोगी लगा, और जो एक साधारण टेक्स्ट-आधारित एडवेंचर गेम के विकास में भी समाप्त होता है।
jscs

महान! यह वही है जिसे मैं देख रहा था। मुझे लगता है कि writeएक "तार्किक विधेय" में साइड इफेक्ट्स (जैसे ) के साथ संचालन सहित अवधारणा को दूर तक झुकना लगता है।
एलेक्स डी

2

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

ध्यान दें कि यद्यपि लॉजिक प्रोग्रामिंग में एक पूरा खेल लागू करना एक अच्छा व्यायाम है, अभ्यास में इसका प्रदर्शन अपर्याप्त होगा और इसीलिए SWI-Prolog जैसे विक्रेता निचले स्तर की भाषाओं (जैसे जावा, C ++, आदि) के लिए बाइंडिंग की पेशकश करते हैं। यहां तक ​​कि एक साधारण सुडोकू सॉल्वर को लागू करने के लिए सीएलपी पुस्तकालयों का उपयोग करने की आवश्यकता होती है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.