অর্থাত্, যখন একটি সাব-কথোপকথন শেষ হয় তখন কী এবং কীভাবে বক্তৃতার রেখার মাঝে সরব?
সি # তে যদি আপনার কাছে কোনও মৌলিক ডায়ালগ গাছের উদাহরণ থাকে তবে দয়া করে সেগুলি পোস্ট করুন।
অর্থাত্, যখন একটি সাব-কথোপকথন শেষ হয় তখন কী এবং কীভাবে বক্তৃতার রেখার মাঝে সরব?
সি # তে যদি আপনার কাছে কোনও মৌলিক ডায়ালগ গাছের উদাহরণ থাকে তবে দয়া করে সেগুলি পোস্ট করুন।
উত্তর:
"কথোপকথন গাছ" নামটি কিছুটা বিভ্রান্তিকর - এগুলি সাধারণত কেবল গাছ নয়, সাধারণ নির্দেশিত গ্রাফ হয় । এই জাতীয় গ্রাফের প্রাথমিক তথ্য কাঠামোতে সাধারণত নোডগুলির জন্য কিছু ধরণের "ডেটা" থাকে, যা আমরা কথোপকথনে যে পয়েন্টগুলি উপস্থাপন করি এবং তাদের থেকে অন্য নোডগুলিতে লিঙ্কগুলি উপস্থিত করে, যা অংশগ্রহণকারীদের দ্বারা যা বলা এবং করা হচ্ছে তার প্রতিনিধিত্ব করে এবং additionalচ্ছিকভাবে বিভিন্ন অতিরিক্ত ক্রিয়া সম্পাদন করার জন্য তাদের দৃশ্যমানতা বা স্ক্রিপ্টগুলিকে সীমাবদ্ধ করার শর্তাদি রয়েছে conditions সাধারণত নোডগুলির মধ্যে একটি হ'ল ডিফল্ট শুরুর নোড (এর জন্য আদর্শ লেবেলগুলি "রুট", "স্টার্ট" এবং "গ্রেটিং"), এবং যে নোডগুলির কোনও বৈধ লিঙ্ক নেই তাদের কথোপকথনটি শেষ করে।
বেশিরভাগ ক্ষেত্রে, গ্রাফটি Node
ডাটা স্ট্রাকচারের তালিকা হিসাবে স্মৃতিতে প্রতিনিধিত্ব করা হয় , প্রতিটি অন্তত একটি আইডি এবং 0..n Link
ডেটা স্ট্রাকচারের একটি তালিকা রয়েছে । তালিকাটি এনপিসি বা বিশ্বব্যাপী স্থানীয় হতে পারে; দ্বিতীয় কেসটিকে অগ্রাধিকার দেওয়া হয় যদি আপনার কাছে প্রচুর জেনেরিক এনপিসি থাকে যার সাথে তথ্যের জন্য কথা বলা যেতে পারে তবে তাদের নিজস্ব কোনও নির্দিষ্ট কথোপকথন অফার করা হয় না। সিস্টেম নিজেই এনপিসির জন্য প্রারম্ভিক কথোপকথন নোড খুঁজে পায়, তার আইডিটিকে বর্তমান কথোপকথনের আইডি হিসাবে মনে রাখে, প্লেয়ারের (বা বৈধ লিঙ্ক না থাকলে "[" কথোপকথনের শেষ]] "বাছাই করার জন্য বর্তমানে বৈধ লিঙ্কগুলি উপস্থাপন করে এবং অপেক্ষা করে ইনপুট. যখন প্লেয়ার কোনও লিঙ্ক চয়ন করেন, তখন সম্পর্কিত ডায়ালগ লাইনগুলি প্রদর্শিত হয় এবং কোনও সম্পর্কিত স্ক্রিপ্টগুলি চলতে থাকে।
লিঙ্কগুলিতে জটিল নিয়মাবলী এবং শর্ত না থাকার পরিবর্তে আপনি একটি সাধারণ "বৈধ" বুলিয়ান ভেরিয়েবলের সাহায্যে পেতে পারেন, যা অন্য কথোপকথনের লিপিগুলির (যেটি শুরুর নোড থেকে পূর্বনির্ধারিত অন্তর্ভুক্ত) এর বাইরে থেকে বা বাইরে পরিবর্তিত হতে পারে with প্রক্রিয়া। সাধারণভাবে, এই পদ্ধতিটি সহজ তবে এই জাতীয় কথোপকথনের সাথে কেবল গেমগুলির জন্য উপযুক্ত, যেহেতু "এই প্রতিক্রিয়া কখন সম্ভব?" প্রতিক্রিয়া তথ্য নিজেই দূরে ।
নোট করুন যে আমি এখানে যে কাঠামোটি বর্ণনা করছি তা বাইট 5 এর থেকে কিছুটা আলাদা যে নোডগুলিতে কোনও সংলাপের রেখা থাকা দরকার নেই; লিঙ্কগুলি সব থাকতে পারে। সর্বাধিক মৌলিক রূপে, এটি নিম্নলিখিত কাঠামোটিতে অনুবাদ করে।
ডায়ালগ গাছগুলি নির্দেশিত গ্রাফ কাঠামো দিয়ে তৈরি করা হয় ।
খেলোয়াড় যে সংলাপের সিদ্ধান্ত নেয় তার উপর ভিত্তি করে গ্রাফটি আবর্তিত হয়। ব্যবহারকারীকে দেওয়া ডায়ালগ বিকল্পগুলি এমন প্রান্তগুলি থেকে আসে যা অন্যান্য ডায়ালগ নোডের পাথগুলি সংজ্ঞায়িত করে।
নির্দেশিত গ্রাফগুলি একটি প্রাথমিক তথ্য কাঠামো। এগুলি সহজেই প্রয়োগ করা যেতে পারে এবং আপনি সম্ভবত এটি নিজেরাই প্রয়োগ করতে চাইবেন। যেহেতু আপনি আপনার ডায়ালগের প্রয়োজন অনুসারে গ্রাফটি তৈরি করতে চান।
কিছু নোডের দেখাতে বিশেষ শর্ত পূরণ করার প্রয়োজন হতে পারে। উদাহরণস্বরূপ, খেলোয়াড়ের এক্স এর উপরে বক্তৃতাটির দক্ষতা প্রয়োজন Or বা খেলোয়াড়টির ডায়ালগের একটি শাখায় অগ্রসর হওয়ার আগে মিশন জেডটি সম্পন্ন করা দরকার। অথবা এনপিসি তাদের সাথে এটি আলোচনা করার আগে তাদের 4 বার কিছু জিজ্ঞাসা করতে হবে। এই বৈশিষ্ট্যগুলি আপনার গেমটিতে কাস্টম হবে। তবে আপনি নোড এবং প্রান্তের ট্র্যাভারসাল বাস্তবায়ন করার সময় উল্লেখযোগ্য worth অবশ্যই সর্বদা সবচেয়ে সহজ সর্বোত্তম ফর্মটি দিয়ে শুরু করে সেখান থেকে তৈরি করা।
আমি একটি সাধারণ কথোপকথন সিস্টেম তৈরি করেছি: http://iki.fi/sol/d3/ "ইঞ্জিন" নিজেই বর্তমানে সরল সি, তবে সম্পাদকের দ্বারা উত্পাদিত ডেটা যে কোনও ভাষায় ব্যবহার করা বেশ সহজ। সরঞ্জামটি এক্সএমএল, জেএসএন এবং একটি কাস্টম বাইনারি ফর্ম্যাটকে আউটপুট করে।
মূল ধারণাটি বেশ সহজ:
কথোপকথনের প্রতিটি নোড (যা আমি "কার্ড" বলি, উপরের এনালগের মতো) প্রশ্ন পাঠ্য এবং শূন্য বা আরও বেশি উত্তর নিয়ে গঠিত। প্রতিটি উত্তর অন্য কার্ডে নিয়ে যায়।
একটি ট্যাগ সিস্টেম রয়েছে যেখানে নির্দিষ্ট ট্যাগগুলি কেবলমাত্র ট্যাগ সেট (বা ট্যাগ সেট না করা থাকলে) ব্যবহারকারীকে দেখানো হয়। একটি কার্ড সেট (বা আনসেট) নির্দিষ্ট ট্যাগ প্রবেশ করানো।
একটি গেমের যে কোনও ধরণের ডায়ালগ সম্পর্কে আপনার যা করা দরকার তা হ'ল এটি। "প্রশ্ন পাঠ্য" সরল পাঠ্য হতে পারে, বা এটি অ্যানিমেশন বা হোয়াট নোট চালনার স্ক্রিপ্ট হতে পারে।
আপনি একটি ডায়ালগ সিস্টেমের মডেল করতে ট্রিশার্প এবং আচরণ গাছ ব্যবহার করতে পারেন। ট্রিশার্প একটি লাইব্রেরি যা একটি সাধারণ আচরণ ট্রি প্রয়োগকরণ সরবরাহ করে। বাহ জন্য আইএ বটগুলি এটি দিয়ে সম্পন্ন হয়, তাই এটি পরিপক্ক ... :)
আমার প্রয়োগের নোড রয়েছে যা উত্তরগুলির মধ্যে চয়ন করতে দেয় এবং প্রতিটি উত্তর সংলাপ বা একটি ক্রিয়া, বা ক্রিয়াগুলির ক্রম, বা একটি নোড যা যোগ করতে পারে অন্য সংলাপে যেতে দেয় ... বা আপনি কী চান ...
আমি এটিকে দৃষ্টিভঙ্গি করতে ব্রেইনিয়াক এডিটর ব্যবহার করেছি ... তবে শেষ পর্যন্ত এটি ট্রি-শাপের ভিত্তিতে সি # কোড তৈরি করে ...
আপনি একটি নির্দেশিত (সম্ভবত চক্রযুক্ত) গ্রাফ চান।
আপনি নোডকে অবজেক্ট হিসাবে মডেল করবেন এবং গ্রাফের নোডের সমস্ত বহির্গামী তীরগুলিও পৃথক বস্তু হিসাবে মডেল করা হবে। নোডের বহির্গামী তীরগুলির একটি তালিকা রয়েছে এবং প্রতিটি "তীর" অবজেক্টে প্রদর্শন করার জন্য একটি পাঠ্য এবং গন্তব্য সম্পর্কিত একটি রেফারেন্স রয়েছে। নিশ্চিত নয়, তবে আমি মনে করি সি # অবজেক্টগুলিতে সর্বদা রেফারেন্স করা হয়, তাই আপনি প্রথমে অবজেক্টগুলি তৈরি করেন এবং তারপরে আপনি যখন তীরের বস্তু তৈরি করেন, একই বস্তুকে দুটি তীরের গন্তব্য ক্ষেত্রটিতে প্লাগ করুন। (সি ++ এ আপনি একটি রেফারেন্স বা পয়েন্টার প্রকার, নোড এবং বা নোড * ব্যবহার করবেন)
ডিস্ক থেকে এই জাতীয় জিনিস লোড করার জন্য, প্রতিটি প্রতিটি নোডকে একটি অনন্য আইডি নম্বর দেয়, তারপরে সমস্ত নোডকে একটি অ্যারেতে লোড করে যেখানে সূচকটি সেই অনন্য নম্বর। তারপরে তীরগুলি সংখ্যাটি লিখে ক্রমিক করা হয়, আসল বস্তুটি আউট করে না।
আপনি যখন একটি তীর লোড করেন, আপনি নোডের দিকে ইঙ্গিত করে তার রেফারেন্স পেতে আপনি অ্যারে এবং আইডি ব্যবহার করেন। যদি আপনি দু'বার অবজেক্টটি লিখে রাখেন তবে আপনি দুটি পৃথক অবজেক্ট পাবেন যা দেখতে অভিন্ন দেখায়, যা সম্ভবত আপনি চেয়েছিলেন তা নয়।
একটি ডায়লগ ট্রি প্রসেস করা খুব সহজ হয়ে যায়। আপনি কেবল রুট নোডটি একটি currentNode
পরিবর্তনশীলতে রেখেছেন, পুরো জিনিসটি কোনওরকমে প্রদর্শন করুন, তারপরে কোনও পছন্দ rootNode
হয়ে গেলে তীরের গন্তব্যটিতে সেট করুন । সিউডোকোডে:
Node& currentNode = dialogTree.node[0];
while( currentNode != END_CONVERSATION_PSEUDO_NODE )
{
stage.displayNode( currentNode );
currentNode = stage.waitForUserToChoose();
}
আমাকে সম্প্রতি নোড ব্যবহার করে এরকম কিছু বিকাশ করতে হয়েছিল এবং কথোপকথন নোডের নির্দেশিত গ্রাফ উপস্থাপন করার জন্য খুব বেসিক পাঠ্য ফাইল কাঠামোর জন্য বেছে নিয়েছি।
আপনি ফলাফল কোড এবং পাঠ্য বিন্যাস এখানে দেখতে পারেন:
https://github.com/scottbw/dialoguejs
এটি শর্ত বা ইভেন্ট ট্রিগারগুলি (এখনও) সমর্থন করে না, তবে বেশিরভাগ গেম ডেভসের সাথে শুরু করার জন্য এটি যথেষ্ট সহজ।
(জিপিএলে কোডটি নিজেই, বিটিডাব্লু)
dialog-tree
ট্যাগ লাগলে দারুণ হত ।