আমি কীভাবে আমার খেলায় ডায়লগ গাছগুলি প্রয়োগ করতে পারি?


51

আমার গেমটিতে একটি ডায়ালগ ট্রি সিস্টেম কার্যকর করার সর্বোত্তম উপায় কী? আমি একটি এনপিসি খেলোয়াড়কে বিভিন্ন প্রতিক্রিয়ার সেট দিতে চাই, এমন কিছু উপস্থিতি কেবল তখনই উপস্থিত হতে পারে যখন প্লেয়ারের কোনও আইটেম থাকে বা কোনও পূর্ববর্তী ঘটনা ঘটে থাকে।


2
বাউন্টি বিশেষত কীভাবে ট্রিগার বাক্যাংশ এবং এনপিসি পাঠ্যের অনুবাদগুলি পরিচালনা করতে পারে সে সম্পর্কে ভাল ধারণার জন্য। যাতে কথোপকথন শুরু হওয়া খেলোয়াড়ের উপর নির্ভর করে এনপিসি বিভিন্ন ভাষা বুঝতে এবং বলতে পারে। এমনকি গেমদেভে.স্ট্যাকেক্সেঞ্জঞ্জ / প্রশ্নগুলি / tions১ / 31 / এ বিল্ডিং ব্লক পদ্ধতির সাথে টেক্সট সংগ্রহস্থলের ভিতরে যুক্তি থাকা ভাল ধারণা বলে মনে হয় না। তবে এগুলিকে বিভক্ত করা কোডটি বোঝা আরও অনেক কঠিন করে তোলে।
হেন্ডরিক ব্রুমারম্যান

উত্তর:


17

এক্সএমএল ব্যবহার করে ডায়ালগ ট্রি করা উচিত। যদি আপনাকে আরও জটিল কিছু করার দরকার হয় তবে আপনি প্রতিক্রিয়াগুলির জন্য শর্তাদি এবং নেস্টেড ট্রিগুলিতে প্রতিক্রিয়ার জন্য কোনও স্ক্রিপ্ট ফাইলের রেফারেন্স সহ সঞ্চয় করেন।

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

এসও তে একই উদাহরণ রয়েছে যার একটি উদাহরণ রয়েছে: https://stackoverflow.com/questions/372915/game-logic-in-xml-files


এক্সএমএলের জন্য +1। কোডটি নিজের মধ্যে এম্বেড করার চেয়ে অনেক ভাল, কোডটি পুনরায় সংশোধন না করে পরিবর্তনের জন্য অনুমতি দেয় এবং এটি একটি স্ট্যান্ডার্ড ফর্ম্যাট যা কিছু শক্তিশালী সম্পাদক দ্বারা পড়া যেতে পারে।
অ্যাটাকিংহোব

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

5
ঠিক যেমন, এক্সএমএল কেবল ধারক, আপনি লুয়া বা অন্যান্য স্ক্রিপ্টিং ভাষা ব্যবহার করে এটিও (এবং সংজ্ঞায়িতভাবে আরও বেশি হুমন্ড-পঠনযোগ্য এবং মানব-সম্পাদনযোগ্য) প্রয়োগ করতে পারেন।
শিখুন কোকোস 2 ডি

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

1
এক্সএমএল এর জন্য -1। আমি @ ইপসকিগল এবং @ বিগস্যান্ডউইচ
o0 'এর

20

আমি লুয়া বা রুবি এর মতো স্ক্রিপ্টিং ভাষার এম্বেডিং এবং এর মধ্যে কোডিং ডায়ালগ ইন্টারঅ্যাকশন দেখতে চাই।

সুতরাং একটি ডায়ালগ স্ক্রিপ্ট দেখতে পারে:

switch showDialog "Why don't you just leave me along!", "Okay", "But I found your dog!"
    case 1:
        showDialog "And stay gone!"
    case 2:
        if playerHasObject "dog"
            showDialog "Thank you!"
        else
            showDialog "Liar!"

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


1
আপনি যুক্তি যুক্ত করতে পারেন হিসাবে আমি এটি সরাসরি এক্সএমএলকে পছন্দ করি। তবে আমি বলব পাঠ্যটি সম্ভবত কোডের পরিবর্তে এক্সএমএলে থাকা উচিত। (সম্পাদনা করা সহজ, অন্যান্য ভাষায় স্থানীয়করণ ইত্যাদি)।
আইয়েন

আপনার যদি স্থানীয়করণ / সহজ সম্পাদনের প্রয়োজন হয় তবে আপনি একটি ফাংশনে টেক্সটটি মোড়ানো করতে পারেন যা একটি পৃথক ফাইলে সংযুক্ত পাঠ্যকে কিউটিতে টিআর (কিউ স্ট্রিং) ফাংশন / ম্যাক্রোর মতো লিখবে। pepper.troll.no/s60prereleases/doc/linguist-hellotr.html
পেরেকনির্মাতা

আপনি এখানে যুক্তি অনুকরণ করতে এক্সএমএলগুলিতে অ্যাট্রিবিউটস বা অতিরিক্ত ট্যাগ ব্যবহার করা থেকে বিরত করবেন কী?
lathomas64

16

গেম স্টেনডাল আমরা এনপিসি বাস্তবায়নের জন্য একটি সসীম স্টেট মেশিন ব্যবহার করি।

নিম্নলিখিত চিত্রটি কীভাবে কোয়েস্ট টিউটোরিয়াল লিখবেন তার থেকে সামান্য উদাহরণ দেখায় ।

আইডিএল, সংযোজন এবং কোয়েসT_OFFERED এফএসএম

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

আমরা শর্তগুলির একটি সেট সংজ্ঞায়িত করেছি যা রূপান্তরের সাথে সংযুক্ত থাকতে পারে। উদাহরণস্বরূপ কোনও খেলোয়াড়ের কাজ সম্পূর্ণ করা কেবল তখনই সম্ভব যখন কোনও প্লেয়ারহ্যাসআইটেমটি উইথহিম কনডিশন পূরণ হয়।

কোনও রূপান্তর কার্যকর হওয়ার পরে এনপিসি কিছু পাঠ্য বলতে পারে এবং / অথবা কোনও ক্রিয়াকলাপ চালায়। শর্তের অনুরূপ আমরা ইক্যুইপ আইটেমএक्शन এর মতো পুনরায় ব্যবহারযোগ্য ক্রিয়াগুলির সংজ্ঞা দিয়েছি যা কোনও খেলোয়াড়কে সন্ধানের পুরষ্কার দিতে ব্যবহৃত হয়।

অ্যান্ডকন্ডিশন , অরকন্ডিশন এবং নোটকন্ডিশন ব্যবহার করে একাধিক শর্ত একত্রিত করা যেতে পারে । কোয়েস্ট সমাপ্তিতে সাধারণত বেশ কয়েকটি ক্রিয়া করতে হয়, তাই একাধিক কর্ম শ্রেণিও রয়েছে।

যদিও স্টেনডালের আসল বাস্তবায়ন অন্যান্য (মানব) ভাষায় সহজে অনুবাদযোগ্য না হয়ে ভোগে, আমি মনে করি সাধারণ ধারণাটি ভাল।


5

আপনি ওপেন সোর্স আরপিজি ইঞ্জিন অ্যাডন্টেল এর Dlgedit সরঞ্জামটি একবার দেখে নিতে পারেন । এটি অত্যন্ত উন্নত এবং আপনার প্রয়োজনীয় সমস্ত কিছু থাকতে পারে (উত্সগুলি সহ;))


5

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

উদাহরণস্বরূপ আপনার থাকতে পারে:

<dialogue id="101" condition="!npc.carsFixed">
  <message>Localize.FixMyCar</message>
  <choices>
    <choice condition="hero.carFixingSkill > 5" priority="7" id="Localize.Sure">
      <command>hero.carFixingSkills += 1</command>
      <command>npc.carFixed = true</command>
      <command>hero.playSmokeAnimation()</command>
      <command>nextDialogue = 104</command>
    </choice>
    <choice condition="hero.carFixingSkill <= 5" id="Localize.CantFix">
      <command>nextDialogue = 105</command>
    </choice>
    <choice id="Localize.FixYourself">
      <command>npc.likesHero -= 1</command>
    </choice>
  </choices>
</dialogue>

তারপরে আপনার কাছে কোয়েস্ট পাঠ্য রেন্ডারারের উপযুক্ত স্থানান্তরিত পাঠ্যের সাথে "লোকালাইজ.ফিক্সমাইকার" প্রতিস্থাপন করা হবে।

আপনার সরঞ্জামটি সম্পাদনাযোগ্য কাঁচা এক্সএমএল পাশাপাশি খেলোয়াড়কে বাছাইযোগ্য ভাষায় কী দেখায় তা প্রদর্শন করবে।

একইভাবে আপনি যেমন উল্লেখ করেছেন তা থেকে এরকম কিছু ব্যবহার করতে পারেন :

npc.add(ConversationStates.ATTENDING,
        ConversationPhrases.QUEST_MESSAGES, 
        null,
        ConversationStates.QUEST_OFFERED, 
        Localization[ "BringMeABeer" ],
        null);

যদি আপনার কীগুলি সম্পূর্ণরূপে বর্ণনামূলক থাকে তবে পুরো পাঠ্যটি সমস্যা না হওয়া উচিত।

এর মতো কিছু কার্যকর হতে পারে:

Localization[ "<Location>.<NPC_name>.<Dialogue_text_key>" ];

4

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

এইভাবে করা থেকে সবচেয়ে বড় লাভ হ'ল আপনি সহজেই ডায়লগটি প্রবেশ করতে পারেন এবং নতুন অক্ষর যুক্ত করতে পারেন etc. ইত্যাদি each আপনি প্রতিটি কোডকে পরিচালনা করার ক্ষেত্রে বিশেষ যুক্তি দিয়ে আপনার কোড বেসকে উপহাস করা এড়াতে পারেন।


1
এটি লুয়া, এলইউএ নয়। :)
আরসিআইএক্স

2
আমি এটা তোমার জন্যই করেছি ;)
ডেভিড ম্যাকগ্রা

4

আপনি যদি এক্সএমএল ব্যবহার করেন তবে এক্সএমএল ফাইল সম্পাদনা করার জন্য আপনি একটি ছোট সরঞ্জাম তৈরি করেছেন তা নিশ্চিত করুন। তুমি অন্যথায় পাগল হয়ে যাবে


এটি সম্পাদনা করার জন্য যদি ইতিমধ্যে কোনও সরঞ্জাম না থাকে তবে প্রথমে এটি ব্যবহার করা অর্থহীন: নিজের ফর্ম্যাটটিও তৈরি করুন!
o0 '

3

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


1

যদি আপনার ডায়লগগুলি কোনও জটিলতার হয় তবে আপনার ডায়ালগ বাস্তবায়নের জন্য সবচেয়ে গুরুত্বপূর্ণ জিনিসটি হ'ল আপনার মিথস্ক্রিয়াটির জটিলতা বোঝার উপায়। আমি এটি কল্পনা করার জন্য কোনও ধরণের নোড সম্পাদককে প্রস্তাব দিচ্ছি, যদিও আমার কাছে সুপারিশ করার মতো কোনও ভাল ওপেন সিস্টেম নেই।


1

আমি মনে করি, আপনি এই জাতীয় গেমটি পরিচালনা করার জন্য আপনার নিজের স্ক্রিপ্ট ভাষা ব্যবহার করেন (যদি না হয় তবে আপনার উচিত) hen
ডায়লগ যুক্তি তৈরির সময় আপনি অন্যান্য গেম ভেরিয়েবলের সাথে কাজ করতে পারেন। গেম ইঞ্জিনগুলি লেগোয়ের মতো। আপনি কেবল ইট প্রোগ্রাম করেছেন এবং স্ক্রিপ্ট সেগুলি ব্যবহার করে। আপনি কিছু স্ক্রিপ্ট দোভাষী বা সংকলক তৈরি করে তা বিবেচ্য নয়। তবে স্ক্রিপ্ট সর্বদা দরকারী।


0

সাধারণ অটোমেটন এটি করতে পারে:

(dialogueline_id, condition) -> (next_id, response)

এটি দেখতে এরকম কিছু দেখাচ্ছে:

(1, troll is hungry?) -> (2, say "troll be hungry")
(2, player has bananas?) -> (3, say "hey, you have bananas!")
(3, ) -> (-1, (say "i like bananas, i take them and eat, you may pass, bye", remove bananas, feed the troll))
(2, player does not have bananas?) -> (-1, say "go away!!!")

গেমটিতে আপনি আইডি খুঁজে পান এবং আইডি এবং শর্তটি মেলাতে চেষ্টা করুন।

আপনার শর্ত এবং ক্রিয়াগুলির মডেল করা দরকার। অবজেক্টস, ফাংশন পয়েন্টার, এক্সএমএল দ্বারা ...

ভাল কথোপকথন সম্পাদকও কাজে আসবে।

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