আমি কীভাবে আমার গেম ইঞ্জিনে স্ক্রিপ্টিং বাস্তবায়নের সাথে লড়াই করছি। আমার কেবল কয়েকটি প্রয়োজনীয়তা রয়েছে: এটি স্বজ্ঞাত হওয়া উচিত, আমি কোনও কাস্টম ভাষা, পার্সার এবং দোভাষী লিখতে চাই না এবং থ্রেডিং ব্যবহার করতে চাই না। (আমি নিশ্চিত যে এর আরও সহজ সমাধান আছে; আমার একাধিক গেম লজিক থ্রেডের ঝামেলা দরকার নেই)) পাইথনের (ওরফে সিউডোকোড) এখানে একটি উদাহরণ স্ক্রিপ্ট রয়েছে:
def dramatic_scene(actors):
alice = actors["alice"]
bob = actors["bob"]
alice.walk_to(bob)
if bob.can_see(alice):
bob.say("Hello again!")
else:
alice.say("Excuse me, Bob?")
গল্প বলার সেই মহাকাব্যটি বাস্তবায়নের সমস্যা তৈরি করে। আমি কেবল একবারে পুরো পদ্ধতিটি মূল্যায়ন করতে পারি না, কারণ walk_to
গেমের সময় লাগে। যদি এটি এখনই ফিরে আসে, অ্যালিস ববের দিকে হাঁটা শুরু করবে এবং (একই ফ্রেমে) হ্যালো বলবে (বা অভিনন্দন জানাবে)। তবে যদি walk_to
সে কোনও ব্লকিং কল আসে যা সে ববকে পৌঁছানোর পরে ফিরে আসে, তবে আমার খেলা আটকে যায়, কারণ এটি মৃত্যুদন্ড কার্যকর করার একই থ্রেডকে ব্লক করে যা অ্যালিসকে হাঁটাচলা করে।
আমি প্রতিটি ক্রিয়াকলাপটিকে একটি ক্রিয়া তৈরি করার বিষয়টি বিবেচনা করেছিলাম - alice.walk_to(bob)
কোনও বস্তুকে একটি কাতারে ঠেকিয়ে দেব, যা এলিস ববয়ের কাছে পৌঁছে যাওয়ার পরে পপ আপ হয়ে যাবে, যেখানেই সে ছিল। এটি আরও সূক্ষ্মভাবে ভেঙে গেছে: if
শাখাটি অবিলম্বে মূল্যায়ন করা হয়, সুতরাং বব অ্যালিসের পিছনে ফিরে গেলেও তাকে শুভেচ্ছা জানাতে পারে।
অন্যান্য ইঞ্জিন / লোকেরা থ্রেড তৈরি না করে স্ক্রিপ্টিং পরিচালনা করে কীভাবে? আমি jQuery অ্যানিমেশন চেইনের মত নন-গেম-দেব অঞ্চলে, ধারণাগুলির জন্য দেখতে শুরু করছি। দেখে মনে হচ্ছে এই ধরণের সমস্যার জন্য কিছু ভাল নিদর্শন থাকা উচিত।