লজিক প্রোগ্রামিং ব্যবহার করে কীভাবে ইন্টারেক্টিভ প্রোগ্রামগুলি (গেমস / সিমুলেশনগুলির) প্রয়োগ করতে হবে?


20

আমি শুনেছি লজিক প্রোগ্রামিং অন্যান্য প্রোগ্রামিং দৃষ্টান্তগুলির যেমন ওও বা ফাংশনাল প্রোগ্রামিংয়ের সাধারণ উদ্দেশ্যে বিকল্প হিসাবে কাজ করতে পারে। (যেহেতু প্রোলোগ টিউরিং-সম্পূর্ণ, তাই এটি অবশ্যই হওয়া উচিত!)

যাইহোক, প্রোগল ভাষায় কোনও সরল, গ্রাফিকাল কনসোল গেম বা অনুরূপ ভাষার মতো কীভাবে কোনও ইন্টারেক্টিভ প্রোগ্রাম বাস্তবায়ন করতে পারে তা দেখতে আমার সমস্যা হচ্ছে। আপনার কাছে তথ্য আছে, নিয়ম রয়েছে যা আরও তথ্য উত্থাপন করতে পারে এবং কোয়েরি যা তথ্য পুনরুদ্ধার করে। সুডোকু সলভারের মতো কিছু তৈরি করতে আপনি কীভাবে সেইসব মৌলিক উপাদানগুলি ব্যবহার করতে পারেন তা দেখতে সহজ। তবে প্যাক-ম্যান, বা আরও সহজভাবে, পং সম্পর্কে কীভাবে?

দয়া করে নোট করুন: আমি নিম্ন-স্তরের বিশদটি খুঁজছি না, তবে একটি ধারণাগত ওভারভিউ করছি। (উদাহরণস্বরূপ: উচ্চ-স্তরের পদগুলিতে, আপনি কীভাবে আই / ও পরিচালনা করবেন? আপনি গেমের স্টেটটি কীভাবে সংরক্ষণ করবেন? কীভাবে আপনি "মেন লুপ" এর মতো কিছু বাস্তবায়ন করবেন? আপনি কীভাবে সময়কে পরিমাপ করবেন এবং প্রতিক্রিয়া জানবেন? )


1
আমি আপনার প্রশ্নটি সত্যিই পছন্দ করি - আমি দীর্ঘদিন আগে প্রোলোগকে ত্যাগ করেছিলাম এবং নিজেকে একই প্রশ্ন জিজ্ঞাসা করেছি এবং এটি করার উপায় সম্পর্কে কখনও ভাবতে সক্ষম হইনি।
খ্রিস্টান সৌর

আমি ব্যক্তিগতভাবে এসডাব্লুআই প্রোলগে ফ্রোজেন বুদবুদ ক্লোন প্রয়োগ করে একটি লজিক প্রোগ্রামিং কোর্স চালিয়েছি। মনোমুগ্ধকর মতো কাজ করেছেন (দশম দিনের উত্পাদনশীলতা হ্রাস পেয়েছে কারণ এটি খেলে কার্যকারিতা যুক্ত করার চেয়ে মজাদার ছিল)। ইউনি ওয়েবসাইটের লিঙ্কটি নষ্ট হয়ে গেছে, তবে আমি কোডটি আবার উপলব্ধ করতে পারি কিনা তা দেখার চেষ্টা করব।
কিলিয়ান ফুট

2
"যেহেতু প্রোলোগ টিউরিং-সম্পূর্ণ, তাই এটি অবশ্যই হওয়া উচিত!" - আসলে তা না. প্রোলোগ টিউরিং-সম্পূর্ণ হওয়ার অর্থ হ'ল প্রাকৃতিক সংখ্যাগুলিতে যে কোনও গাণিতিক ক্রিয়াকলাপ যা একটি ট্যুরিং মেশিন দ্বারা গণনা করা যায় সেগুলি প্রোলোগ দ্বারা গণনা করা যায়। তবে এটি অ্যালগরিদমগুলি সম্পর্কে কিছু বলে না যা প্রাকৃতিক সংখ্যায় গাণিতিক ফাংশন নয়। উদাহরণস্বরূপ: একটি অপারেটিং সিস্টেমটি প্রাকৃতিক সংখ্যার গাণিতিক ফাংশন? একটি ওয়েব সার্ভার? একটি খেলা? কনসোল মুদ্রণ? রোবট চালাচ্ছেন? আমার কোনও সন্দেহ নেই যে এই সমস্তগুলি প্রোলগে করা যেতে পারে, তবে এটি প্রোলোগ টিউরিং-সম্পূর্ণ হওয়ার কারণে অগত্যা অনুসরণ করে না।
জার্গ ডব্লু মিট্টাগ

@ জার্গডব্লিউমিত্যাগ: অন্য কথায়, এটি সম্ভব হতে পারে, এটি কেবল ব্যবহারিক হতে পারে না?
রবার্ট হার্ভে

1
@ জার্গডব্লিউমিত্যাগ - হ্যাঁ, এঁরা সকলেই তাদের হৃদয়ে, কেবলমাত্র গণিত এবং সংখ্যায় সঞ্চয়।
ববসন

উত্তর:


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 Prolog , তাই আমি সুপারিশ করব plOpenGL একটি আদ্যস্থল হিসাবে। এটি আপনাকে কেবল ওপেনগিএল এর রেন্ডারিং ক্ষমতাগুলিতে অ্যাক্সেস দেয় না, এটি মাউস এবং কীবোর্ড ইভেন্টগুলির জন্য বাইন্ডিংগুলিও অন্তর্ভুক্ত করে। উদাহরণস্বরূপ, এস্কেপ কীটির একটি প্রেস পরিচালনা করতে আপনি একটি কীবোর্ড নিয়ম এর মতো সংজ্ঞায়িত করেন:

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

আরও কিছু বিশদ এবং মাউস চলাচল পরিচালনা করার উদাহরণের জন্য plOpenGL এর চলমান আলো উদাহরণটি একবার দেখুন।

আপনি যদি কোনও গ্রাফিক্স লাইব্রেরি ব্যবহার করেন তবে এটি সম্ভবত আপনার জন্য গেম লুপটি পরিচালনা করবে। সেট আপ, repainting, আই ঘটনা, ইত্যাদি আপনি শর্তসাপেক্ষে সময়ের উপর ভিত্তি করে fps বা রান কোড সীমিত করতে চান, করতে পারেন, আপনাকে ট্র্যাক অতিবাহিত সময় ব্যবহার করছে: মূলত, আপনি লাইব্রেরিতে নিয়ন্ত্রণ বিপরীতমুখী এবং নিয়ম প্রদান উপযুক্ত ক্ষেত্রে নিষ্পন্ন করা হবে সময় / তারিখ পূর্বাভাস দেয় এবং সেই অনুযায়ী সিদ্ধান্ত নেয় make

অনেক প্রোলগ স্বাদ রয়েছে, সুতরাং গেমটি তৈরির একমাত্র উপায় এটি অবশ্যই নয়। বিভিন্ন বিতরণ এবং সম্পর্কিত ভাষা বিভিন্ন লাইব্রেরি / বাইন্ডিং ব্যবহার করবে যা বিভিন্ন পদ্ধতির উত্সাহ দিতে পারে। এছাড়াও, বহুগ্লাট প্রোগ্রামাররা রেন্ডারিং এবং আইও পরিচালনা করার জন্য আপনাকে আরও "গ্রাফিক্স ফ্রেন্ডলি" হোস্ট ভাষা / রানটাইম ব্যবহার করতে উত্সাহিত করতে পারে যখন প্রোলোগ গেম সত্তা আচরণ এবং সিদ্ধান্ত গ্রহণের মডেল করতে ব্যবহার করে।


1
আপনি যে সাইটের সাথে লিঙ্ক করেছেন একই সাইটের মধ্যে একটি দীর্ঘ টিউটোরিয়াল রয়েছে, প্রলগ এডভেঞ্চার , যা আমি দরকারী বলে খুঁজে পেয়েছি এবং এটি একটি সাধারণ পাঠ্য-ভিত্তিক অ্যাডভেঞ্চার গেমের বিকাশেও শেষ হয়।
jscs

গ্রেট! এই আমি খুঁজছিলাম ছিল। আমি মনে করি যে write"লজিক্যাল প্রিডিকেট" এর পার্শ্ব প্রতিক্রিয়াগুলি (যেমন ) এর সাথে অপারেশনগুলি অন্তর্ভুক্ত করার পরে ধারণাটি অনেকটা বাঁকানো বলে মনে হচ্ছে।
অ্যালেক্স

2

কর্বিনের উত্তরের শীর্ষে : সাধারণ অবস্থায় প্রোগলে সংরক্ষণ / পুনরায় প্রত্যাহার পূর্বাভাস ব্যবহার করে সংরক্ষণ করা / পুনরুদ্ধার করা যেতে পারে। কিন্তু অনেক RDF, এক্সএমএল, রিলেশনাল ডাটাবেস, ইত্যাদি মধ্যে সংরক্ষণ যদি আপনি চান গুই একটি উদাহরণ যদি মত অ-মানক অপশন আছে XPCE SWI-Prolog দ্বারা প্রদত্ত।

মনে রাখবেন যে লজিক প্রোগ্রামিংয়ে একটি সম্পূর্ণ গেম বাস্তবায়ন করা একটি ভাল অনুশীলন, বাস্তবে এর কার্যকারিতা অপর্যাপ্ত হবে এবং এজন্য এসডাব্লুআই-প্রোলোগের মতো বিক্রেতারা নিম্ন স্তরের ভাষাগুলির (যেমন। জাভা, সি ++ ইত্যাদি) বাইন্ডিং সরবরাহ করে। এমনকি একটি সাধারণ সুডোকু সলভার প্রয়োগের জন্য সিএলপি লাইব্রেরি ব্যবহার করা দরকার ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.