পয়েন্ট-ও-ক্লিক শৈলীর অ্যাডভেঞ্চার গেমের জন্য আমি কীভাবে একটি কমান্ড সিস্টেমটি প্রয়োগ করতে পারি?


11

আমি একটি পয়েন্ট করছি এবং অ্যাডভেঞ্চার গেমটি ক্লিক করছি এবং আমি বর্তমানে একটি কমান্ড সিস্টেম বাস্তবায়নের সর্বোত্তম উপায়টি বের করার চেষ্টা করছি।

ক্রিয়াপদগুলির একটি প্যালেট, এবং দৃশ্যে এবং জায়গুলিতে বস্তুগুলির সাথে একটি বানর দ্বীপ বা ম্যানিয়াক ম্যানশন স্টাইল ইন্টারফেসটি ধরে নিন। এগুলি ক্লিক করে, আপনি কার্যকর করতে একটি বাক্য গঠন করেন।

উদাহরণস্বরূপ, আপনি look at"গাছের দিকে নজর" পেতে বা একটি আপেল ক্লিক করতে এবং তারপরে একটি গাছ ক্লিক করতে পারেন giveএবং তারপরে একটি মেয়ে, "মেয়েকে আপেল দিতে" পেতে পারেন।

বাক্যটির তিনটি সম্ভাব্য রূপ রয়েছে:

  • verbউদাহরণস্বরূপ, "সংরক্ষণ করুন"
  • verb nounউদাহরণস্বরূপ, "আপেল নিন", "অক্টোপাসটি দেখুন"
  • verb noun nounউদাহরণস্বরূপ, "রেবিড কুকুরটিকে আচার দিন", "আচারের জারের সাথে কোড়বার ব্যবহার করুন"

বিভিন্ন পরিস্থিতিতে, আমি চাইব যে পদক্ষেপটি বিভিন্ন বস্তুর দ্বারা সংজ্ঞায়িত করা হোক।

উদাহরণস্বরূপ, giveক্রিয়াপদের জন্য, একটি ডিফল্ট ক্রিয়া সংজ্ঞায়িত হতে পারে যা চরিত্রটিকে "আমি তার সাথে ঝুলতে পছন্দ করি" এর মতো কিছু বলতে বাধ্য করে, বা অভদ্র কুকুর এমন কোনও ক্রিয়া সংজ্ঞায়িত করতে পারে যেখানে আপনি এটি দেওয়ার চেষ্টা করে কিছু খায় ।

যদি ইন্টারফেসটি ম্যানিয়াক ম্যানশনের মতো কাজ করতে হয়, তবে আপনি বাক্যটি তৈরি করেন এবং তারপরে এটি কার্যকর করতে বলুন (ম্যানিয়াক ম্যানশনে, বাক্যটি ক্লিক করে বা আপনি যে সর্বশেষে ক্লিক করেছেন তাতে ক্লিক করে)।

যদি এটি মঙ্কি আইল্যান্ডের মতো কাজ করে তবে বাক্যটি সম্পূর্ণ হওয়ার সাথে সাথেই এটি কার্যকর হয়, যা ক্রিয়াপদের জন্য একটি সমস্যা তৈরি করে useযা কখনও কখনও একটি বিশেষ্য এবং অন্য দুটি ক্ষেত্রে নিতে পারে।

সুতরাং আপনি কীভাবে এমন একটি সিস্টেম কার্যকর করবেন যে এটি পরিচালনা করে?


1
মনে হয় তিন প্রকারের ক্রিয়া, এক প্রকারের শূন্য বিশেষ্য, অন্যটির জন্য দুটি, ইত্যাদি তারা একই শ্রেণীর অবজেক্ট নয়। তুমি "জরান বয়াম সঙ্গে অক্টোপাস তাকান" তাই করতে lookএকটি একক বিশেষ্য ক্রিয়া, ইত্যাদি হয়
tenpn

উত্তর:


10

আপনি যদি নির্বাচনের ক্রমটি বিপরীত করেন তবে আপনার ব্যবহার করা সহজ হতে পারে। সুতরাং ব্যবহারকারী একটি বিশেষ্য ক্লিক করে এবং তারপরে গেমটি সেই বিশেষ্যটিতে সঞ্চালিত ক্রিয়াগুলির সেটটি প্রদর্শন করে। যদি ক্রিয়াটির জন্য কোনও অবজেক্টের প্রয়োজন হয় (যেমন "___ দিতে" হয়), তখন গেমটি ক্রিয়াটি সম্পাদনের আগে ব্যবহারকারীটি বস্তুটি নির্বাচন করার জন্য অপেক্ষা করে।

কিছুটা এইরকম:

  1. ব্যবহারকারী একটি পিজারবার্গার ক্লিক করে।
  2. গেমটি একটি মেনু দেখায়: "তুলুন, খাবেন, দেখুন, ___ দিন"।
  3. ব্যবহারকারী "দিতে ___" নির্বাচন করে।
  4. গেম বলে "কাকে দাও?" এবং ব্যবহারকারীটি অন্য একটি বিশেষ্যটি (বা বাতিল বোতাম) ক্লিক করার জন্য অপেক্ষা করে।
  5. ব্যবহারকারী একটি বানর ক্লিক করে।
  6. গেমটি বানরকে চিজবার্গার দেয়।

বাস্তবায়ন অনুসারে, গেমের প্রতিটি বস্তুর জন্য ডেটা থাকা দরকার:

  1. আপনি এটি প্রয়োগ করতে পারেন কোন ক্রিয়াপদের সেট।
  2. ক্রিয়াপদের জন্য এটি এমন একটি অবজেক্ট গ্রহণ করতে দেয় যা কোন সামগ্রীর সেট প্রয়োগ করতে পারে।
  3. প্রতিটি ক্রিয়া বা ক্রিয়া-বস্তুর জুটির জন্য, ব্যবহারকারী যখন এটি করে তখন আচরণটি।

যেহেতু ব্যাকরণটি আসলে বাসা বা অন্য কিছু নয়, আপনার দোভাষী দের মতো জটিল কিছু দরকার নেই।


+1, উভয় জিনিসের মডেলিংয়ের দিক এবং জিনিসের ইন্টারফেসের দিক থেকে। হ্যাঁ, বেশিরভাগ ক্ষেত্রে আমি সম্মত হয়েছি কারণ আমি এটি এটিই করতাম তবে আমি এই উত্তরটি পছন্দ করি।
শুক্র

যদি আমরা একমত হয়, তবে স্পষ্টতই আমাদের উভয়কেই সঠিক হতে হবে। ;)
উপুড়হস্ত

সুতরাং, কার্যকরভাবে, আপনি কি আচরণটি সর্বদা প্রথম বিশেষ্য দ্বারা সংজ্ঞায়িত করা উচিত বলে মনে করেন?
চামচমিজার

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

এটি সম্পূর্ণ থ্রোটল এটি কীভাবে করেছে তা।
জারি কম্প্পা

2

আমি সরলবাদী সমাধান উপস্থাপন করি। এটি অবশ্যই বাড়ানো যেতে পারে।

আমি মনে করি (ক্রিয়া, অবজেক্ট 1, অবজেক্ট 2) এর সহজ তালিকা এটি সমাধান করবে:

  • যদি প্লেয়ার অবজেক্টে ক্লিক করেন (ক্রিয়াপদ) "ব্যবহার" এবং ক্লিক করা অবজেক্ট "বেলুন" এবং প্লেয়ার অবজেক্ট "পাম্প" এবং সেখানে ট্রিপলেট উপস্থিত রয়েছে ("ব্যবহার", "ব্যালন", "পাম্প") তবে আপনি "পাম্প সহ ব্যালন ব্যবহার করেছেন"
  • কখনও কখনও অবজেক্ট 2 "হিলিয়াম ব্যবহার করুন" (ব্যবহার, হিলিয়াম, নুল) এর মতো ন্যূনল হবে
  • প্রথমে অবজেক্ট ক্রিয়াতে ক্লিক করতে প্লেয়ারের প্রয়োজন
  • যদি খেলোয়াড় কোনও কিছুর সাথে মেলে না এমন কিছুতে ক্লিক করে বলে "আমি এটি করতে পারি না, এটি আজেবাজে কথা"
  • ক্রমটি সঠিক কিনা আপনার অবশ্যই প্রতিটি ক্লিকের পরে পরীক্ষা করা উচিত।

ডিফল্টগুলি কীভাবে পরিচালনা করবেন:

  • প্রথম ক্লিকটি যদি ক্রিয়া অবজেক্টে না থাকে, সম্ভাব্য ডিফল্ট ক্রিয়াটি অনুসন্ধান করুন।
  • ডিফল্ট সঞ্চয় করার একটি উপায় হ'ল চতুর্ভুজ তৈরি করা হ'ল (ক্রিয়া, অবজেক্ট 1, অবজেক্ট 2, ডিফল্ট)
  • এগুলি সংরক্ষণ করার অন্যান্য উপায়ের মধ্যে ডিফল্ট ট্রিপল্টের তালিকা থাকবে
  • ...

কিছু উদাহরণ:

  • (ব্যবহার, ব্যালন, পাম্প)
  • (দিন, জন, আলু)
  • (হাঁটুন, পিরানহাস, NUL)
  • (ব্যবহার, ব্যালন-ইন-ইনভেন্টরি, পাম্প)
  • (খোলা, দরজা থেকে ছাদ, NULL), ডিফল্ট .... ডিফল্ট ক্রিয়া উদাহরণ

এটি বাড়ানো যেতে পারে:

  • ট্রিগার হওয়ার জন্য কিছু ইভেন্ট যুক্ত করুন (প্লেয়ারকে কিছু দিন, খেলোয়াড় বলবেন "আমি এটি করতে পারি না কারণ আমি একজন শক্তিশালী জলদস্যু", কাট দৃশ্য শুরু করুন, বিশ্বের কিছু পরিবর্তন করুন ...)
  • কিছু পূর্বশর্ত যুক্ত করুন। কখনও কখনও ব্যালন খাঁচায় থাকতে পারে, সুতরাং আপনাকে "যদি ব্যালন খাঁচায় না থাকে" তবে আপনাকে প্রকাশ করতে হবে। আমি মনে করি আমি ইভেন্ট ক্যালকুলাস বা প্রোলগের সাথে এটির কাছে যেতে পারি বা এটি ফাংশন পয়েন্টার দিয়ে করতে পারি ...
  • কখনও কখনও কমান্ডলাইনে বাক্যটি "গর্তের দিকে তাকান" না হয়ে "গর্তের দিকে তাকান" তে আবার লেখা হয়, এটির জন্য কেবল একটি পরিবর্তনশীল প্রয়োজন :)

1

এখানে দুটি সমস্যা রয়েছে: প্লেয়ারের ইনপুটটিকে সিনট্যাক্স ট্রিতে ব্যাখ্যা করা, তারপরে সেই গাছটিকে সন্ধান করা।

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

প্রতিটি বোতাম টিপানোর পরে, আপনি ক্রিয়া গাছটি জিজ্ঞাসা করতে পারেন যদি এটি বৈধ অবস্থায় থাকে তবে (মনকি আইল্যান্ড-স্টাইল ইনপুটটির জন্য)।

দ্বিতীয় পর্যায়ে যাওয়ার পরে, কংক্রিট ক্রিয়াটি তার নিজের গাছকে বিশ্লেষণ এবং গেমের অবস্থা আপডেট করার জন্য দায়ী।

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

পরীক্ষা করে দেখুন ইন্টারপ্রেটার পার্সিং মঞ্চে আরও তথ্যের জন্য প্যাটার্ন।


1
আমি মনে করি না প্লেয়ারদের ইনপুট ব্যাখ্যা করা একটি সমস্যা। অবশ্যই, এখানে প্রয়োজনীয় একটি পাঠ্য অ্যাডভেঞ্চারের ইনপুট পার্স করার মতো পরিশীলিত কিছুই নেই। প্রকৃতপক্ষে, প্রশ্নটি কীভাবে আপনার অবজেক্টের শ্রেণিবিন্যাস এবং মিথস্ক্রিয়াগুলি কীভাবে অবজেক্টটি বাস্তব কার্য সম্পাদনকে সংজ্ঞায়িত করে তার চেয়ে সর্বাধিক নমনীয়তাটিকে ডিজাইন করতে পারে তা সম্পর্কে উত্থিত হয়।
চাঁদমাইজার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.