ফিলিপের উত্তর ইতিমধ্যে সঠিক দিক দেখায়। আমি কেবলমাত্র মনে করি যে ডেটা স্ট্রাকচারটি অকারণে ভার্বোজ। ছোট লেখাগুলি লিখতে এবং পড়তে সহজ হত।
এমনকি যদি ছোট লেখাগুলি অ্যালগরিদমকে আরও জটিল করে তোলে তবে এটি করা মূল্যবান কারণ আপনি কেবল একবার অ্যালগরিদম লেখেন তবে আপনার বেশিরভাগ সময় গল্পটি রচনা ও বজায় রাখতে ব্যয় হবে। অতএব আপনি যে অংশটি বেশিরভাগ সময় ব্যয় করবেন সেই অংশটি আরও সহজ করার জন্য অনুকূলিত হন।
var story = [
{ m: "Hi!" },
{ m: "This is my new game." },
{ question: "Do you like it?", answers: [
{ m: "yes", next: "like_yes" },
{ m: "no", next: "like_no" },
] },
{ label: "like_yes", m: "I am happy you like my game!", next: "like_end" },
{ label: "like_no", m: "You made me sad!", next: "like_end" },
{ label: "like_end" },
{ m: "OK, let's change the topic" }
];
এই নকশার জন্য কিছু ব্যাখ্যা:
পুরো কাহিনীটি একটি অ্যারেতে রচিত। আপনাকে সংখ্যা সরবরাহ করতে হবে না, সেগুলি অ্যারে সিনট্যাক্স দ্বারা স্বয়ংক্রিয়ভাবে সরবরাহ করা হয়: প্রথম আইটেমের সূচক 0 থাকে, পরেরটির সূচক 1 থাকে ইত্যাদি etc.
বেশিরভাগ ক্ষেত্রে নিম্নলিখিত পদক্ষেপের সংখ্যা লিখতে হবে না। আমি ধরে নিই যে বেশিরভাগ পাঠ্যের লাইনগুলি শাখা নয় । আসুন "পরবর্তী পদক্ষেপটি হ'ল নিম্নলিখিত আইটেমটি" একটি পূর্বনির্ধারিত অনুমান করা যাক, এবং অন্যথায় হলে কেবল নোটগুলি তৈরি করুন।
জাম্পের জন্য, সংখ্যা নয়, লেবেল ব্যবহার করুন । তারপরে, আপনি যদি পরে কয়েকটি লাইন যুক্ত করেন বা সরিয়ে থাকেন তবে গল্পটির যুক্তি সংরক্ষণ করা হবে এবং আপনাকে সংখ্যাগুলি সামঞ্জস্য করতে হবে না।
স্বচ্ছতা এবং স্বল্পতার মধ্যে একটি যুক্তিসঙ্গত আপস খুঁজে নিন। উদাহরণস্বরূপ, আমি "বার্তা" এর পরিবর্তে "এম" লেখার পরামর্শ দিচ্ছি, কারণ এটি এখন পর্যন্ত সর্বাধিক ব্যবহৃত কমান্ড হবে, সুতরাং এটি সংক্ষিপ্ত করে পাঠ্যটিকে আরও সুগঠিত করে তুলবে। তবে অবশিষ্ট কীওয়ার্ডগুলি ছোট করার দরকার নেই। (যাইহোক, আপনি ইচ্ছা না। গুরুত্বপূর্ণ বিষয় এটা সবচেয়ে সহজপাঠ্য করা হয় আপনার জন্য । অন্যথা, আপনি উভয় "M" এবং বৈধ কীওয়ার্ড হিসাবে "বার্তা" সমর্থন পারে।)
গেমটির জন্য অ্যালগরিদম এমন কিছু হওয়া উচিত:
function execute_game() {
var current_line = 0;
while (current_line < story.length) {
var current_step = story[current_line];
if (undefined !== current_step.m) {
display_message(current_step.m);
if (undefined !== current_step.next) {
current_line = find_label(current_step.next);
} else {
current_line = current_line + 1;
}
} else if (undefined !== current_step.question) {
// display the question: current_step.question
// display the answers: current_step.answers
// choose an answer
// and change current_line accordingly
}
}
}
যাইহোক, এই ধারণাগুলি রেনপি দ্বারা অনুপ্রাণিত হয়েছিল , যা আপনি যা চান তা ঠিক নয় (জাভাস্ক্রিপ্ট নয়, ওয়েব নয়), তবে যাইহোক আপনাকে কিছু দুর্দান্ত ধারণা দিতে পারে।