আমি কীভাবে আমার গেমটিতে স্মার্ট স্ক্রিপ্টিং বাস্তবায়ন করতে পারি?


18

আমি একটি গেম ইঞ্জিন বিকাশ করছি। এটি একটি সত্তা / উপাদান ভিত্তিক এক হিসাবে অনুমিত হয়। আমার গেমটি বিকাশের জন্য, আমি নিজেই সত্ত্বাগুলি তৈরি করতে কিছু স্ক্রিপ্টিং ভাষা ব্যবহার করার চিন্তা করেছি।

উদাহরণস্বরূপ, আমি যদি খেলোয়াড়ের কাছে আক্রমণাত্মক এক ধরণের দৈত্য যুক্ত করতে চাই তবে এটি বেশ কয়েকটি উপাদান সহ একটি সত্তা হবে; এই উপাদানগুলি দৈত্য প্রকারের সাথে পরিবর্তিত হবে, সুতরাং আমার কাছে যদি আমার গেমটিতে একশত বিভিন্ন ধরণের দানব থাকে তবে আমাকে সরাসরি আমার গেম কোডে তাদের প্রত্যেকের জন্য একটি নতুন পদ্ধতি তৈরি করতে হবে না।

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


কেবল সত্তার বর্ণনার জন্য আপনি কেবল এক্সএমএল বা অনুরূপ কিছু ব্যবহার করতে পারেন, স্ক্রিপ্টিংয়ের দরকার নেই। স্ক্রিপ্টিংয়ের জন্য আমি সি # ব্যবহার করব তবে কেবল আপনার ইঞ্জিন নেট নেট এ থাকলে ...
কিকাইমারু

@ কিকাইমারু সি # একটি স্ক্রিপ্টিং ভাষা নয়। লুয়া ব্যবহার করা আরও ভাল ধারণা বা অন্য কোনও ভাষা যা আপনার ইঞ্জিনে এম্বেড করা যেতে পারে।
জেডিএসওয়েটবিট

@ ডিজেমেথানম্যান "সি # স্ক্রিপ্টিং ভাষা নয়" এর অর্থ কিছু নয়, সি # তে লিখিত একটি খেলায় সি # তে স্ক্রিপ্ট লিখতে এবং সংকলনের জন্য রোজলিনের মতো কিছু ব্যবহার করা একেবারেই সমস্যা নেই ... তবে 4 বছর পরে আমি জসন এ ব্যবহার করব এক্সএমএল এবং সি # :) এর পরিবর্তে জাভাস্ক্রিপ্ট
কিকাইমারু

উত্তর:


17

আমার গেমটি সত্ত্বার উপাদান কাঠামো ব্যবহার করে এবং সত্ত্বাকে সংজ্ঞায়িত করতে স্ক্রিপ্টগুলি ব্যবহার করে (এটি সরাসরি আচরণের সংজ্ঞা দেয় না, আমি এ বিষয়ে আরও কথা বলব)। স্ক্রিপ্টগুলি প্রতিটি সত্তা তৈরির জন্য ব্যবহৃত প্রকৃত উপাদানগুলি সংজ্ঞায়িত করে। এটি আমার তৈরি একটি সহজ স্ক্রিপ্টিং ভাষা ব্যবহার করে। আমার স্ক্রিপ্টগুলির একটির সরলীকৃত সংস্করণ এখানে:

ENTITY:"Goblin"
{
    description="It's currently their age."
    commonname="goblin"
    pluralCommonName="goblins"
    childname="gob'in"
    pluralChildName="gob'ins"
    active=Nocturnal
    tags=Mobile
    baseAttributes="OrganicMobileCreature"

    [Model]{
            meshname="Goblin"
            texturename="GoblinTexture"
    }

    [Motion]{
            maxvelocity=0.01:0.015
            locomotion=Walk,Swim
    }

    [Skills]{
            ALL=0.01:0.05,Mine=8.3:8.8,PlaceCube=8.3:8.8
    }

    [Inventory]{
            maxItems=2
            Allow=ALL
            Disallow=NONE
    }
}

এর বেশিরভাগটি স্ব-বিবরণ দেওয়া হলেও এখানে কয়েকটি হাইলাইট রয়েছে:

  • প্রথম বিভাগে সত্তার জন্য সাধারণ তথ্য বর্ণনা করে। এতে সত্তার বিভিন্ন দিকের জন্য একটি বর্ণনা এবং প্রদর্শনের নাম অন্তর্ভুক্ত রয়েছে।
  • baseAttributesট্যাগ রেফারেন্স অন্য স্ক্রিপ্ট যে ফাইলটি সাধারণ উপাদান সংজ্ঞায়িত যে আমি চাই না একাধিক বার পুনরায় সংজ্ঞায়িত আছে। মনে হচ্ছে উপাদান রয়েছে position, liferequirementsইত্যাদি। যদি কোনও উপাদান এখানে আবার সংজ্ঞায়িত করা হয় তবে এই উপাদানটি সাধারণটিকে ওভাররাইট করে।
  • প্রতি [NAME] { } সেট একটি নতুন উপাদান সংজ্ঞায়িত করে যা এই সত্তাগুলিতে যুক্ত হবে।
  • এই বিবরণটি কেবল একটি একক সত্তার জন্য নয়, এটি তৈরি সমস্ত গলবিনগুলির জন্য। আপনি দেখতে পাবেন যে কয়েকটি মানগুলির ব্যাপ্তি (যেমন 0.01:0.015) থাকে, যখন একটি নতুন গাবলিন তৈরি করা হয় তখন এটি এমন একটি উপাদান দিয়ে তৈরি হয়ে যায় যা এর পরিসরে একটি এলোমেলো মান রয়েছে। সুতরাং প্রতিটি গাবলিনের সামান্য আলাদা দক্ষতা এবং কিছুটা আলাদা গতি থাকবে। এই সেটআপটি সংজ্ঞায়িত করে যে সমস্ত গাবলিনগুলি কিউব স্থাপন এবং খনির ক্ষেত্রে সত্যিই ভাল দক্ষতার সাথে শুরু করবে, যা সত্যই কেবল আমার নিজের পরীক্ষার উদ্দেশ্যে। তবে আমি যেহেতু নিশ্চিত যে আপনি অনুমান করতে পারেন, তাই মানগুলি যা চাই তা পরিবর্তন করা খুব সহজ।

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

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

  • তারা কীভাবে সন্ধান করে (সাধারণ দৃষ্টিতে চলাচল, সরল এ *, ভবিষ্যদ্বাণীমূলক এ * ইত্যাদি)
  • তারা কতটা আক্রমণাত্মক / রক্ষণাত্মক। সত্তাগুলিতে হোম জোন থাকতে পারে যা ডিফেন্ড করা হবে, তবে সম্ভবত এই অঞ্চলগুলির বাইরে আক্রমণাত্মক নয়।
  • প্রযুক্তি সচেতনতা (খোলা দরজা, গ্যাজেটগুলি ব্যবহার, ফাঁদ এড়ানো ইত্যাদি)
  • এবং আরও ...

তবে আপনার সংজ্ঞায়িত করা হয়, এটি আপনার সিস্টেম যা সেই উপাদানটির ডেটা চালায় যা ফলস্বরূপ আপনার প্রবেশকারীদের আচরণকে প্রভাবিত করে।


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

1
@ নাথান আমি সম্মতি জানাই আপনার এক্সএমএল নিয়ে যাওয়া উচিত। আমার পোস্টের কারণটি ছিল আপনার এক্সএমএলে কী ডেটা অন্তর্ভুক্ত করবেন এবং কীভাবে এটি ব্যবহার করবেন। ডেটা ফর্ম্যাট আপনার পছন্দ মত হতে পারে। আপনি যে ডেটা অন্তর্ভুক্ত করতে বেছে নিয়েছেন এবং কীভাবে আপনি এর ব্যবহার প্রয়োগ করেন তা অনেক বেশি গুরুত্বপূর্ণ।
MichaelHouse

@ বাইট 56 আমি জানি এই পোস্টটি পুরানো, তবে আপনি কীভাবে পিতামাতার সন্তানের সম্পর্ক পরিচালনা করতে পারেন? বলুন আমাদের একটি দক্ষ গাছ আছে এবং আপনার [A] সক্ষম করার জন্য আপনার দক্ষতার A [0] 10 পয়েন্ট এবং এ [2] ইত্যাদি সক্ষম করার জন্য 10 পয়েন্ট প্রয়োজন I অভিভাবক আইডি? স্পষ্টতই তারা যুক্তিযুক্তভাবে সমতুল্য, তবে আমি আশা করি আপনার কিছু বাস্তব-বিশ্ব অন্তর্দৃষ্টি রয়েছে।
সুপারস্টারংচিংস

@ সুপার্সট্রিংচিিজ if player.hasPoints(10) then i++ end skillTree[i]কিছু সিউডোকোড হবে। তবে এই প্রশ্নটি পোস্টের সাথে কীভাবে প্রাসঙ্গিক তা আমার কোনও ধারণা নেই।
জেডিএসওয়েটবিট

4

আপনার যদি সত্যই প্রয়োজন হয় তবে একটি মনস্টারটির উপাদানগুলি সংজ্ঞায়িত করার উপায় যদি এক্সএমএল হয় তবে সি # এবং জাভা উভয়ই এটির বজ্রপাত দ্রুত বাস্তবায়ন করতে পারে।

আপনার এক্সএমএল হতে পারে

<?xml version="1.0" encoding="UTF-8"?>
<mobs>
  <mob>
    <personality>Aggressive</personality>
    <intelligence>20</intelligence>
  </mob>
</mobs>

তারপরে আপনার মোব ক্লাসটি দেখতে দেখতে পারে। (জাভা)

public class Mob {
  private IPersonality personality;
  private Integer intelligence

  //**  Getters & Setters **//
}

যেখানে IPersonality একটি ইন্টারফেস।

তারপরে আপনি আপনার এক্সএমএল লোড করতে এবং কারখানার মাধ্যমে প্রতিটি মান পার্স করতে পারেন।

উদাহরণস্বরূপ, ব্যক্তিত্বের কারখানায় ব্যক্তিত্বের মানটি পার্স করুন যা কেবলমাত্র:

public IPersonality getPersonality(String personalityName) {
  if(personalityName.equals("Aggressive")) {
    return new AggressivePersonality();
  }
  else if(personalityName.equals("Passive")) {
    return new PassivePersonality();
  }
  else {
     //Maybe allow for no personality (We all know monster like that ;) )
     return null; 
  }
}

তারপরে আপনি এমন একটি জনসভা স্থাপন করতে পারেন

Mob mob = new Mob();
mob.setPersonality(getPersonality(xmlValue));
mobList.add(mob);

মূলটি হ'ল আপনি ইঞ্জিনটি এক্সএমএলটির ফর্ম্যাটটি জানেন এবং এটির প্রয়োজনীয় সমস্তগুলির জন্য একটি কারখানা রয়েছে।

XML একটি সুবিধা যে আপনার তা নিশ্চিত করার জন্য বিন্যাস সবসময় সঠিক দেখতে আপনার নিজের স্কিমা নির্ধারণ করতে পারেন এখানে

আশাকরি এটা সাহায্য করবে


আসলে আমার গেম গেম ডেভলপমেন্ট প্রসেসের মাধ্যমে সহজেই নতুন সত্তা তৈরির উপায় খুঁজে বের করতে হবে। এক্সএমএল কি যথেষ্ট নমনীয় হবে? অভ্যন্তরীণ গেম যুক্তির জন্য আমাকে যেভাবেই স্ক্রিপ্টিং যুক্ত করতে হবে।
নাথান

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

0

পাইথন ঠিক আছে আমার মনে হয়। আপনি যদি আপনার প্রোগ্রামগুলিতে স্ক্রিপ্টিং ক্ষমতা যুক্ত করতে চান তবে প্রায়শই LUA একটি ভাল বিকল্পও হয়।

আপনি হয় আপনার দানবদের আচরণ বর্ণনা করার জন্য এক্সএমএল ব্যবহার করতে পারেন, এটি আসল গেম কোডে কিছু কোডিং জড়িত কারণ আপনি আচরণের অনুসারে কেবল "নাম" বা কিছু বৈশিষ্ট্য সংরক্ষণ করতে পারবেন (গতি, দৈত্য যে ধরণের অস্ত্র ব্যবহার করে, ইত্যাদি) আপনার গেম কোডে ব্যবহারের আচরণ of

আপনি যদি স্ক্রিপ্টেঞ্জাইন ব্যবহার করেন (যেমন LUA) আপনি এই কোডটি আপনার পূর্বনির্ধারিত প্রোগ্রাম থেকে রানটাইমের সময় লোড হওয়া স্ক্রিপ্ট ফাইলগুলিতে স্থানান্তর করতে পারেন। এটি করতে আপনাকে আপনার "দানবগুলির" এর এপিআই স্ক্রিপ্টেঞ্জিনে প্রকাশ করতে হবে। এটি আপনাকে দৈত্য-গেম কোডের পদ্ধতিগুলি বাইরে থেকে কল করতে দেয়।


আমার দানবের এপিআই? মানে, আমাকে স্ক্রিপ্ট (ইনস্ট্যান্সেশন) থেকে নতুন উপাদান তৈরি করতে সক্ষম হতে হবে। এটা কি সম্ভব?
নাথান

আফাইক এটি সম্ভব হওয়া উচিত। আপনি বাহ্যিক স্টোরেজ (যেমন অ্যাবস্ট্রাকচোস বা বাইট 56 দ্বারা উল্লিখিত) এবং স্ক্রিপ্টিং ল্যাঙ্গুয়েজের (এলইউএ, পাইথন ...) এর একটি মিশ্র পদ্ধতি ব্যবহার করতে পারেন। উদাহরণস্বরূপ LUA এর প্রধান সুবিধাটি হ'ল আপনি রানটাইমে আপনার কোডটি পরিবর্তন করতে পারেন এবং এটি আপনার চলমান গেম / ইঞ্জিনে তাত্ক্ষণিকভাবে উপলভ্য
Aron_dc

হো সিরিয়াসলি? এটি আসলে একটি বিশাল সুবিধা। "গেমের টাইমলাইন" এর জন্য আমার কাছে LUA (বা অন্যান্য স্ক্রিপ্টিং ভাষা) রয়েছে। আমি বোঝাতে চাইছি এমন কিছু দৃশ্যের দৃশ্য তৈরি করতে যেখানে প্লেয়ারকে অবরুদ্ধ করতে হবে, এই স্প্রিটটি এখানে চলে যেতে হবে, এখানে এবং সেখানে আলোকপাত করতে হবে ... সুতরাং আমিও সত্তা লোডিংয়ের জন্য কোনও স্ক্রিপ্টের ভাষা ব্যবহার করতে পারি? এছাড়াও আমি আরও ভাল করে যাচ্ছি কিনা তা দেখতে "ম্যানেজার" বলি তার উপর সত্তা / উপাদানগুলি পরিচালনা করার আমার বর্তমান পদ্ধতিটি প্রকাশ করার জন্য আমি আরও একটি প্রশ্ন পোস্ট করতে যাচ্ছি।
নাথান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.