একটি কার্যকরী প্রোগ্রামিং ভাষায় রাষ্ট্র (সাধারণভাবে) পরিচালনা করার জন্য কি কোনও সাধারণ কৌশল আছে? গ্লোবাল স্টেট পরিচালনা করার জন্য প্রতিটি (ক্রিয়ামূলক) প্রোগ্রামিং ভাষায় সমাধান রয়েছে তবে আমি যতদূর পেরেছি এড়াতে চাই।
খাঁটি কার্যকরী পদ্ধতিতে সমস্ত রাজ্য হ'ল ফাংশন পরামিতি। সুতরাং আমাকে পুরো গেমের স্টেটটি (বিশ্ব, খেলোয়াড়, অবস্থান, স্কোর, সম্পদ, শত্রু, ...) সহ একটি বিশাল হ্যাশম্যাপ লাগাতে হবে যা একটি প্রদত্ত ইনপুট বা ট্রিগারটিতে বিশ্বকে পরিচালনা করতে চায় । ফাংশনটি নিজেই গেমস্টেট ব্লব থেকে প্রাসঙ্গিক তথ্য বাছাই করে, এটি দিয়ে কিছু করে, গেমস্টেটটি পরিচালনা করে এবং গেমস্টেটটি ফেরত দেয়। তবে এটি সমস্যার জন্য দরিদ্র ম্যানসোলিউশনের মতো দেখাচ্ছে। যদি আমি পুরো গেমস্টেটটি সমস্ত ফাংশনে রাখি তবে আমার পক্ষে বৈশ্বিক পরিবর্তনশীল বা অপরিহার্য পদ্ধতির বিপরীতে কোনও লাভ নেই।
আমি কেবল প্রাসঙ্গিক তথ্য ফাংশনগুলিতে রাখতে পারি এবং প্রদত্ত ইনপুটটির জন্য নেওয়া পদক্ষেপগুলি ফিরিয়ে দিতে পারি। এবং একটি একক ফাংশন গেমস্টেটে সমস্ত ক্রিয়া প্রয়োগ করে। তবে বেশিরভাগ ফাংশনের জন্য প্রচুর "প্রাসঙ্গিক" তথ্য প্রয়োজন। move()
অবজেক্টের অবস্থান, বেগ, সংঘর্ষের মানচিত্র, সমস্ত এনেমিগুলির অবস্থান, বর্তমান স্বাস্থ্য, প্রয়োজন ... সুতরাং এই পদ্ধতির কোনও কাজ হয় না বলে মনে হয়।
সুতরাং আমার প্রশ্নটি হল আমি কীভাবে একটি কার্যকরী প্রোগ্রামিং ভাষায় বিশেষত গেম বিকাশের জন্য প্রচুর পরিমাণে রাজ্য পরিচালনা করব?
সম্পাদনা: ক্লোজুরে গেমস তৈরির জন্য কয়েকটি গেম ফ্রেমওয়ার্ক রয়েছে। এই সমস্যাটিকে আংশিকভাবে সমাধান করার জন্য গেমের সমস্ত বস্তুকে "সত্তা" হিসাবে থ্রেড করা এবং এটিকে একটি বিশাল ব্যাগে রেখে দেওয়া। একজন gigant প্রধান ফাংশন পর্দা ধারণ করা হয় এবং সত্ত্বা এবং হাতল ইভেন্টগুলি ( :on-key-down
, :on-init
, ...) এই সত্তার জন্য এবং প্রধান প্রদর্শন লুপ চালানো। তবে এটি পরিষ্কার সমাধান নয় যা আমি অনুসন্ধান করছি।
move()
, আপনি সম্ভবত এ 'বর্তমান' বস্তু ক্ষণস্থায়ী হবে (অথবা এটা একটি আইডেন্টিফায়ার), প্লাস বিশ্ব এটা মাধ্যমে চলন্ত, এবং মাত্র আহরণ বর্তমান অবস্থান ও গতিবেগ ... আউটপুট তারপর সমগ্র পদার্থবিদ্যা দুনিয়া, অথবা অন্তত পরিবর্তিত বস্তুর একটি তালিকা।