ডায়লগ ট্রি কীভাবে কাজ করবে?


20

অর্থাত্, যখন একটি সাব-কথোপকথন শেষ হয় তখন কী এবং কীভাবে বক্তৃতার রেখার মাঝে সরব?

সি # তে যদি আপনার কাছে কোনও মৌলিক ডায়ালগ গাছের উদাহরণ থাকে তবে দয়া করে সেগুলি পোস্ট করুন।


আমার মনে হয় dialog-treeট্যাগ লাগলে দারুণ হত ।
ব্যবহারকারী1306322

কোডের নমুনাগুলি জিজ্ঞাসা করা সাধারণত অনুকূলভাবে দেখা হয় না।
মাইকেলহাউস

যদি এমন কিছু ডায়ালগ ট্রি 101 101 কোডের নমুনাগুলি ভাগ করে নেওয়া যায় তবে তা আঘাত করতে পারে না।
ব্যবহারকারী1306322

সমস্যাটি হ'ল এই সাইটটি প্রশ্নের সঠিক উত্তর পেতে চলেছে। এটি কোডের নমুনা সংগ্রহের জন্য নয়।
মাইকেলহাউস

এজন্য বাক্যটি "যদি" দিয়ে শুরু হয়। তবে আমি যা জিজ্ঞাসা করছি তা হল সংলাপের রেখাগুলি একে অপরের সাথে এমনভাবে কীভাবে সংযুক্ত হয় যে কোডে দক্ষতার সাথে অনুবাদ করা যায়। সর্বোপরি আমি এটি সি # তে লিখতে যাচ্ছি।
ব্যবহারকারী1306322

উত্তর:


24

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

বেশিরভাগ ক্ষেত্রে, গ্রাফটি Nodeডাটা স্ট্রাকচারের তালিকা হিসাবে স্মৃতিতে প্রতিনিধিত্ব করা হয় , প্রতিটি অন্তত একটি আইডি এবং 0..n Linkডেটা স্ট্রাকচারের একটি তালিকা রয়েছে । তালিকাটি এনপিসি বা বিশ্বব্যাপী স্থানীয় হতে পারে; দ্বিতীয় কেসটিকে অগ্রাধিকার দেওয়া হয় যদি আপনার কাছে প্রচুর জেনেরিক এনপিসি থাকে যার সাথে তথ্যের জন্য কথা বলা যেতে পারে তবে তাদের নিজস্ব কোনও নির্দিষ্ট কথোপকথন অফার করা হয় না। সিস্টেম নিজেই এনপিসির জন্য প্রারম্ভিক কথোপকথন নোড খুঁজে পায়, তার আইডিটিকে বর্তমান কথোপকথনের আইডি হিসাবে মনে রাখে, প্লেয়ারের (বা বৈধ লিঙ্ক না থাকলে "[" কথোপকথনের শেষ]] "বাছাই করার জন্য বর্তমানে বৈধ লিঙ্কগুলি উপস্থাপন করে এবং অপেক্ষা করে ইনপুট. যখন প্লেয়ার কোনও লিঙ্ক চয়ন করেন, তখন সম্পর্কিত ডায়ালগ লাইনগুলি প্রদর্শিত হয় এবং কোনও সম্পর্কিত স্ক্রিপ্টগুলি চলতে থাকে।

লিঙ্কগুলিতে জটিল নিয়মাবলী এবং শর্ত না থাকার পরিবর্তে আপনি একটি সাধারণ "বৈধ" বুলিয়ান ভেরিয়েবলের সাহায্যে পেতে পারেন, যা অন্য কথোপকথনের লিপিগুলির (যেটি শুরুর নোড থেকে পূর্বনির্ধারিত অন্তর্ভুক্ত) এর বাইরে থেকে বা বাইরে পরিবর্তিত হতে পারে with প্রক্রিয়া। সাধারণভাবে, এই পদ্ধতিটি সহজ তবে এই জাতীয় কথোপকথনের সাথে কেবল গেমগুলির জন্য উপযুক্ত, যেহেতু "এই প্রতিক্রিয়া কখন সম্ভব?" প্রতিক্রিয়া তথ্য নিজেই দূরে


নোট করুন যে আমি এখানে যে কাঠামোটি বর্ণনা করছি তা বাইট 5 এর থেকে কিছুটা আলাদা যে নোডগুলিতে কোনও সংলাপের রেখা থাকা দরকার নেই; লিঙ্কগুলি সব থাকতে পারে। সর্বাধিক মৌলিক রূপে, এটি নিম্নলিখিত কাঠামোটিতে অনুবাদ করে।

enter image description here


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

+1 আমি সেই কাঠামোটি আরও ভাল পছন্দ করি। যদিও, আমি এটি প্রথম পাস হিসাবে সুপারিশ করব না। আমি সহজ কিছু দিয়ে শুরু করব। এটি অবশ্যই শুট করার জন্য একটি ভাল লক্ষ্য।
মাইকেলহাউস

+1 একটি খুব বিস্তারিত উত্তরের জন্য। এটি পরে আমার কাজে আসবে।
মার্টন

এই চিত্রটি আমার পক্ষে খুব সহায়ক হয়েছে, তবে আমাকে ভাবতে হবে যে ডায়ালগলাইন লিংক থেকে আলাদা কেন? প্রতিটি লিঙ্কের নিজস্ব প্রতিক্রিয়া পাঠ্য থাকবে না? এবং এনপিসির পাঠ্যটি কোথায় যাবে? এটি নোডে থাকা কি বোধগম্য হবে না?
কাইল বারান

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

16

ডায়ালগ গাছগুলি নির্দেশিত গ্রাফ কাঠামো দিয়ে তৈরি করা হয় ।

এখানে চিত্র বর্ণনা লিখুন

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

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

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


এই ছবিতে "নিউটন-ঝামেলা" এর মতো ক্ষেত্রে কী করা উচিত তা আমি ঠিক বুঝতে পারি না। কীভাবে সেই লাইনের ক্রমটি পুনরায় না বলে কোডে সেট করবেন।
ব্যবহারকারীর 306322

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

1
এটি সাধারণত কোডের রেখার ক্রম দিয়ে সম্পন্ন হবে না, তবে ডেটা কাঠামোর রেফারেন্সগুলির মাধ্যমে।
কাইলোটন

7

আমি একটি সাধারণ কথোপকথন সিস্টেম তৈরি করেছি: http://iki.fi/sol/d3/ "ইঞ্জিন" নিজেই বর্তমানে সরল সি, তবে সম্পাদকের দ্বারা উত্পাদিত ডেটা যে কোনও ভাষায় ব্যবহার করা বেশ সহজ। সরঞ্জামটি এক্সএমএল, জেএসএন এবং একটি কাস্টম বাইনারি ফর্ম্যাটকে আউটপুট করে।

মূল ধারণাটি বেশ সহজ:

আপনি ছোট্ট ছোট ছোট প্যাসেজের গোলকধাঁধায় রয়েছেন, সব মিলিয়ে

কথোপকথনের প্রতিটি নোড (যা আমি "কার্ড" বলি, উপরের এনালগের মতো) প্রশ্ন পাঠ্য এবং শূন্য বা আরও বেশি উত্তর নিয়ে গঠিত। প্রতিটি উত্তর অন্য কার্ডে নিয়ে যায়।

একটি ট্যাগ সিস্টেম রয়েছে যেখানে নির্দিষ্ট ট্যাগগুলি কেবলমাত্র ট্যাগ সেট (বা ট্যাগ সেট না করা থাকলে) ব্যবহারকারীকে দেখানো হয়। একটি কার্ড সেট (বা আনসেট) নির্দিষ্ট ট্যাগ প্রবেশ করানো।

একটি গেমের যে কোনও ধরণের ডায়ালগ সম্পর্কে আপনার যা করা দরকার তা হ'ল এটি। "প্রশ্ন পাঠ্য" সরল পাঠ্য হতে পারে, বা এটি অ্যানিমেশন বা হোয়াট নোট চালনার স্ক্রিপ্ট হতে পারে।


4

আপনি একটি ডায়ালগ সিস্টেমের মডেল করতে ট্রিশার্প এবং আচরণ গাছ ব্যবহার করতে পারেন। ট্রিশার্প একটি লাইব্রেরি যা একটি সাধারণ আচরণ ট্রি প্রয়োগকরণ সরবরাহ করে। বাহ জন্য আইএ বটগুলি এটি দিয়ে সম্পন্ন হয়, তাই এটি পরিপক্ক ... :)

আমার প্রয়োগের নোড রয়েছে যা উত্তরগুলির মধ্যে চয়ন করতে দেয় এবং প্রতিটি উত্তর সংলাপ বা একটি ক্রিয়া, বা ক্রিয়াগুলির ক্রম, বা একটি নোড যা যোগ করতে পারে অন্য সংলাপে যেতে দেয় ... বা আপনি কী চান ...

আমি এটিকে দৃষ্টিভঙ্গি করতে ব্রেইনিয়াক এডিটর ব্যবহার করেছি ... তবে শেষ পর্যন্ত এটি ট্রি-শাপের ভিত্তিতে সি # কোড তৈরি করে ...

http://www.youtube.com/watch?v=6uGg6bUYyUU


2

আপনি একটি নির্দেশিত (সম্ভবত চক্রযুক্ত) গ্রাফ চান।

আপনি নোডকে অবজেক্ট হিসাবে মডেল করবেন এবং গ্রাফের নোডের সমস্ত বহির্গামী তীরগুলিও পৃথক বস্তু হিসাবে মডেল করা হবে। নোডের বহির্গামী তীরগুলির একটি তালিকা রয়েছে এবং প্রতিটি "তীর" অবজেক্টে প্রদর্শন করার জন্য একটি পাঠ্য এবং গন্তব্য সম্পর্কিত একটি রেফারেন্স রয়েছে। নিশ্চিত নয়, তবে আমি মনে করি সি # অবজেক্টগুলিতে সর্বদা রেফারেন্স করা হয়, তাই আপনি প্রথমে অবজেক্টগুলি তৈরি করেন এবং তারপরে আপনি যখন তীরের বস্তু তৈরি করেন, একই বস্তুকে দুটি তীরের গন্তব্য ক্ষেত্রটিতে প্লাগ করুন। (সি ++ এ আপনি একটি রেফারেন্স বা পয়েন্টার প্রকার, নোড এবং বা নোড * ব্যবহার করবেন)

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

আপনি যখন একটি তীর লোড করেন, আপনি নোডের দিকে ইঙ্গিত করে তার রেফারেন্স পেতে আপনি অ্যারে এবং আইডি ব্যবহার করেন। যদি আপনি দু'বার অবজেক্টটি লিখে রাখেন তবে আপনি দুটি পৃথক অবজেক্ট পাবেন যা দেখতে অভিন্ন দেখায়, যা সম্ভবত আপনি চেয়েছিলেন তা নয়।

একটি ডায়লগ ট্রি প্রসেস করা খুব সহজ হয়ে যায়। আপনি কেবল রুট নোডটি একটি currentNodeপরিবর্তনশীলতে রেখেছেন, পুরো জিনিসটি কোনওরকমে প্রদর্শন করুন, তারপরে কোনও পছন্দ rootNodeহয়ে গেলে তীরের গন্তব্যটিতে সেট করুন । সিউডোকোডে:

Node&    currentNode = dialogTree.node[0];
while( currentNode != END_CONVERSATION_PSEUDO_NODE )
{
    stage.displayNode( currentNode );
    currentNode = stage.waitForUserToChoose();
}

1

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

আপনি ফলাফল কোড এবং পাঠ্য বিন্যাস এখানে দেখতে পারেন:

https://github.com/scottbw/dialoguejs

এটি শর্ত বা ইভেন্ট ট্রিগারগুলি (এখনও) সমর্থন করে না, তবে বেশিরভাগ গেম ডেভসের সাথে শুরু করার জন্য এটি যথেষ্ট সহজ।

(জিপিএলে কোডটি নিজেই, বিটিডাব্লু)


প্রশ্নটি সি # এর জন্য জিজ্ঞাসা করে।
শেঠ ব্যাটিন

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