কীভাবে কোনও অবজেক্ট-ভিত্তিক ভাষায় গেম ইঞ্জিন ডিজাইন করবেন? [বন্ধ]


26

আমি যখনই কোনও অবজেক্ট-ভিত্তিক ভাষায় একটি গেমটি চেষ্টা করি এবং লিখি তখন প্রথম সমস্যাটি আমার সর্বদা মুখোমুখি হয় (কী ধরণের খেলা লিখতে হবে তা ভেবে) কীভাবে ইঞ্জিনটি ডিজাইন করা যায় is এমনকি যদি আমি বিদ্যমান গ্রন্থাগারগুলি বা এসডিএলের মতো ফ্রেমওয়ার্কগুলি ব্যবহার করি, তবুও আমি নিজেকে প্রতিটি গেমের জন্য নির্দিষ্ট সিদ্ধান্ত নিতে বাধ্য করি, যেমন মেনুগুলি পরিচালনা করতে কোনও রাষ্ট্রীয় মেশিন ব্যবহার করতে হবে, সংস্থান লোডের জন্য কোন ধরণের শ্রেণি ব্যবহার করা হবে ইত্যাদি etc.

একটি ভাল নকশা কী এবং এটি কীভাবে কার্যকর করা হবে? কিছু ট্রেড অফস কী কী সেগুলি করতে হবে এবং তাদের উপকারগুলি / কনসগুলি কী কী?


12
প্ররোচনাটি চালিয়ে যাওয়া এবং বিশ্লেষণ পক্ষাঘাতের পরিবর্তে সেখান থেকে রিফ্যাক্টরেটিংয়ের ক্ষেত্রে কী ভুল?
কমিউনিস্ট হাঁস

7
@ দ্য কম্যুনিস্টডাক কারণ আমার পূর্ববর্তী সমস্ত প্রকল্পগুলিতে আমি প্রবণতা চালিয়ে যাচ্ছি - এবং কয়েক মাস পরে যখন প্রত্যেকে দেখতে পেল যে কোনও নতুন বৈশিষ্ট্য যুক্ত করার জন্য স্মরণীয় প্রচেষ্টা এবং জটিলতা দরকার তখন প্রতি একক একটি দেয়ালে আঘাত করে। এই মুহুর্তে আমি নিজেই গেমটি লেখার চেয়ে আমার ইঞ্জিনগুলি পুনরায় লেখার জন্য বেশি সময় ব্যয় করছি, তাই আমি আশা করছি যে কিছুটা আগে থেকেই এবং পরিকল্পনার মাধ্যমে আমি নিজেকে দীর্ঘমেয়াদে সময় সাশ্রয় করব।
এক্সট্রোপিক-ইঞ্জিন

3
@ চুজুম, ভালো কথা। তারপরে আমি একটি জিনিস সুপারিশ করব সি সি ইঞ্জিনের আর্কিটেকচারটি পরীক্ষা করা, এটি; terathon.com/c4engine/images/architecture.png এটি একটি অনেক উচ্চ মাত্রার থেকেও বেশি আপনার যা দরকার হতে পারে, কিন্তু আপনি কিছু ধারনা ;-) দিতে পারে
হাঁসের কমিউনিস্ট


3
এছাড়াও এই প্রশ্নটি এক ধরণের অস্পষ্ট। সম্ভবত আপনার উদাহরণগুলির মধ্যে একটি নিন এবং এটি একটি গভীর প্রশ্ন বা দুটি করুন।
টেট্রাড

উত্তর:


24

আমি সন্দেহ করি যে কেউ বলতে সক্ষম হবেন যে 'আপনাকে এটি করতে হবে এবং এটি এবং এই এবং এই স্লটগুলি প্যাটার্ন এক্স ব্যবহার করে'।

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

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

সম্পাদনা: আমি ভুলে গেছি নতুন সাইট থেকে গেমদেব নিবন্ধগুলি সংরক্ষণাগারভুক্ত করা হয়েছে, স্থির :)


কৌতূহল লিঙ্কটি নষ্ট হয়ে গেছে, এবং নিবন্ধগুলি গুগল করে মনে হচ্ছে যে তারা আর ওয়েবে নেই। (?) বইগুলি যদিও ভাল সংস্থান হিসাবে দেখায় এবং আমি আরও প্রোগ্রামিং বইয়ের জন্য সর্বদা নজর রাখছি;)
এক্সট্রোপিক ইঞ্জিন

এছাড়াও, আপনার প্রথম মন্তব্যের প্রসঙ্গে, আমি প্রত্যাশা করছি না যে প্রতিটি গেমের সাথে মানানসই একটি মাস্টার প্ল্যান আসে। আমি কেবল লক্ষ্য করেছি, কয়েকটি গেম বিকাশের সময়, সেই সাধারণ প্যাটার্নগুলি অনেক বেশি আসে, তাই আমি ভাবলাম যে অন্যান্য লোকেরা তাদের গেমগুলিতে কী ব্যবহার করেছিল।
এক্সট্রোপিক ইঞ্জিন

1
লিঙ্কটি স্থির করে।
কমিউনিস্ট হাঁস

কৌতূহলের জন্য +1। @ চুজুম কেবল কয়েকটি গেম ইঞ্জিন পরীক্ষা করুন, সেগুলি আপনাকে অনুপ্রাণিত করতে এবং নিজের জন্য অনুকূল আর্কিটেকচার গ্রহণ করতে দিন। তত্সহ: এটা প্রায়ই ভাল আপনার খেলা ইঞ্জিন উপাদান হায়ারারকিকাল চেয়ে ভিত্তিক করা হয় দেখতে cowboyprogramming.com/2007/01/05/evolve-your-heirachy
ডেভ মন্ত্রণালয়

1
আমি এটি বলব না যে এটি ইঞ্জিন যা একত্রিত হওয়া দরকার, আরও সত্তার কাঠামোর অংশ।
কম্যুনিস্ট হাঁস

7

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

class Game
এই শ্রেণিটি রাষ্ট্রের মেশিন স্থাপন করে যা গেমের বর্তমান অবস্থা পরিচালনা করে। (একটি মেনুতে বনাম একটি নতুন গেম শুরু করা বনাম একটি সংরক্ষিত খেলা খেলতে)

interface State
প্রতিটি রাজ্য শ্রেণিতে দুটি লুপ থাকে: যুক্তি আপডেট করার জন্য একটি লুপ এবং রেন্ডারিংয়ের জন্য একটি লুপ। Gameএগুলিতে ক্লাসে কল করার এবং আলাদা রাজ্যে পরিবর্তনের জন্য অনুরোধ করার কোডও রয়েছে।

class ResourceManager
একটি সিঙ্গলটন যা Gameক্লাস দ্বারা শুরু করা হয় যা সমস্ত প্রয়োজনীয় সংস্থান লোড করে এবং তাদের অ্যাক্সেসের অনুমতি দেয়। আমি এই নকশাটি পছন্দ করি না কারণ এটি বিভিন্ন স্তরে উত্স লোড / আনলোড করা শক্ত করে তোলে, উদাহরণস্বরূপ। আমি যদি শুরু করতাম তবে আমি সম্ভবত এটি অন্যভাবে ডিজাইন করব would

class Map
একটি মানচিত্রে টাইলগুলির একটি অ্যারে এবং মানচিত্রে সমস্ত প্রাণী এবং আইটেমগুলির একটি তালিকা রয়েছে। এটি একটি সুন্দর বেসিক ক্লাস।

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

interface AITask
প্রাণীগুলিতে AITasks এর একটি তালিকা থাকতে পারে, যা প্রতিটিবার প্রাণীর লজিক লুপটি চালানোর সময় কার্যকর করা হয়। এইআইটিস্কের নিজস্ব যুক্তিযুক্ত লুপ রয়েছে যা জীবকে আদেশ দেয় এবং একটি সমাপ্তির শর্ত যা নির্ধারণ করে যে কার্যটি সফলভাবে সম্পন্ন হয়েছে কিনা।

interface UIElement
আমি এই ইঞ্জিনের জন্য আমার নিজস্ব ইউআই প্রয়োগ করেছি। প্রতিটি ইউআইইলেমেন্টের একটি রেন্ডারিং লুপ এবং লজিক লুপ থাকে। কীবোর্ড / মাউস ইনপুট প্রসেস করার জন্য তাদের কাছে একটি লুপ রয়েছে। সমস্ত উপাদানগুলির মধ্যে অনেকগুলি শিশু উপাদান থাকতে পারে, যা তাদের পিতামাতার পরে রেন্ডার করা হয় এবং কীবোর্ড / মাউস ইনপুট নেয়। উদাহরণস্বরূপ, এটি আপনাকে সাবমেনাস সহ মেনুগুলি দেয়।


এর সাথে ঠিক কী ভুল হচ্ছে? এটা আমার কাছে পুরোপুরি ঠিক আছে।
কমিউনিস্ট হাঁস

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

1
না না. কোন । নাঃ। অনুগ্রহ করে না. ওহ অপেক্ষা করুন আপনি বলেছিলেন যে এটি আপনার পছন্দ নয়।
বারটেক বানাচেউইচজ

6

প্রথম গুরুত্বপূর্ণ বক্তব্যটি হ'ল এই প্রশ্নের কোনও 'উত্তম' উত্তর নেই।

সঠিক উত্তরের নিকটতম জিনিসটি এমন কিছু হতে পারে: এটি গেমের ধরণের উপর নির্ভর করে, লক্ষ্য প্ল্যাটফর্ম, সীমাবদ্ধতা (সময়) ইত্যাদি etc.

এটি বলেছিল যে এখানে কিছু সত্যই ভাল নিবন্ধ রয়েছে যা আপনাকে দেখিয়ে দেবে যে অন্যান্য লোকেরা কীভাবে এই সমস্যার উত্তর দেওয়ার চেষ্টা করেছে (যেমন আমি অতীতে এই বিষয়ে তথ্য অনুসন্ধান করার চেষ্টা করেছি)।
কম্যুনিস্ট হাঁস গেম দেব সম্পর্কিত কৌতূহল নিবন্ধের উল্লেখ হিসাবে আমাকে খেলা আর্কিটেকচারের কিছু অংশ বুঝতে সাহায্য করেছিল understand

আমার বর্তমান নকশা Quake3 / একটি সংকর হয় Doom3 এবং .NET বর্গ গ্রন্থাগার একটি সামান্য বিট :)

আমার দুটি গ্রন্থাগার রয়েছে (স্থির বা গতিশীল আপনি কীভাবে তৈরি / বিতরণ করতে চান তার উপর নির্ভর করে) Frameworkএবং Library

লাইব্রেরিতে সমস্ত সহায়ক ক্লাস রয়েছে যা গেম সফ্টওয়্যার তৈরিতে সহায়তা করার জন্য রয়েছে তবে এই ধরণের পণ্যটিতে সীমাবদ্ধ নয়। অর্থাত্ এটিতে কোনও লিঙ্কযুক্ত তালিকার একটি বাস্তবায়ন রয়েছে যা গেম কোডের জন্য অনুকূলকৃত তবে কোনও লিঙ্কযুক্ত তালিকার পরিষেবা প্রয়োজন এমন কোনও কিছু দ্বারা এটি ব্যবহার করা যেতে পারে।

ফ্রেমওয়ার্কটি 'ইঞ্জিন' এর সাহস হয় যদি আপনি এটির কল করতে চান। এর অনেকগুলিই কোয়েক 3 এর নকশার দর্শনগুলি অনুসরণ করে (কেবলমাত্র আরও একটি বস্তুর উপর ভিত্তি করে)। এটিতে সিএলআই , টাইমিং ম্যানেজমেন্ট, ওএস নির্দিষ্ট কোড এবং শেষ পর্যন্ত নেটওয়ার্কিং স্তর ইত্যাদি রয়েছে

এই দুটি তখন উত্পাদিত আসল অ্যাপ্লিকেশনের বিরুদ্ধে লিঙ্কযুক্ত। Gameআপনার মত, যা খেলার নির্দিষ্ট কোড রয়েছে পারেন। কোমক 3 একইভাবে ডিএলএল বোঝায় যার উপর নির্ভর করে কোন 'মোড' প্লে হচ্ছে।

আপনাকে কাঠামোর ধারণা দেওয়ার জন্য এখানে প্রতিটি লিবারের জন্য ফোল্ডার এবং সামগ্রীগুলির দ্রুত ভাঙ্গন রয়েছে:


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

  • গ্রন্থাগার
    • সংগ্রহ (ক্লাস যা ডেটা সংগ্রহের লিঙ্ক, লিঙ্কযুক্ত তালিকাগুলি / হ্যাশ টেবিল ইত্যাদি উপস্থাপন করে)
    • গণিত (ভেক্টর এবং ম্যাট্রিক্সের মতো বেসিক গণিত সহায়ক ক্লাস)
    • প্রভৃতি

আছে HTH! আপনাকে কিছু পয়েন্টার দেওয়া উচিত ...


কিছু করতে বিকল্প লিংক Enginuity সিরিজ
Musaffa

-3

বিবেচনা করার বিষয়গুলি

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

ভাল নকশা

  • ইআর ডায়াগ্রাম তৈরি করুন
  • এটি সঠিক করুন
  • এটি থেকে আপনার ডাটাবেস, অবজেক্টস বা ডেটা স্ট্রচার তৈরি করুন

ডেটা প্রোগ্রামিংয়ের মূল চাবিকাঠি। আপনি যদি নিজের ডেটাটি ভাল রাখেন, সাধারণত তাদের থেকে অ্যালগরিদম উত্থিত হয় (যদি আপনি সংখ্যার অ্যালগরিদমগুলি গণনা করেন না, যেমন কম্পিউটিং নির্ধারক)।


-1 যেহেতু এই উত্তরটি খুব অস্পষ্ট এবং বিভ্রান্তিকর। রিলেশনাল ডেটাবেসগুলির কোনও ওও ইঞ্জিনের সাথে একেবারে কোনও সম্পর্ক নেই। আমি বুঝতে পারি যে ইংরেজি আপনার প্রথম ভাষা নয় তবে আপনি সম্ভবত আপনার প্রথম অনুচ্ছেদে কী বোঝাতে চেয়েছিলেন তা ব্যাখ্যা করতে পারেন? এটি পরস্পরবিরোধী বলে মনে হয় (ওও ভাষাগুলিতে সমস্যা রয়েছে তবে ডিজাইনের ধরণগুলির সাথে ভাষাগুলিতে প্রোগ্রাম করা সহজ..এছাড়াও নকশার নকশাগুলি প্রায় সর্বদা OO কাঠামোতে থাকে)।
কমিউনিস্ট হাঁস

@duck বিপরীতে? ওওর সমস্যা আছে যা অন্য ভাষায় বিদ্যমান নেই, ডিপি তাদের সমাধান করুন c2.com/cgi/wiki?DesignPatternsInDynamicProgramming দেখুন
ব্যবহারকারী 712092

@ ডাক ১) আপনি সি ++ তে এসকিউএল ব্যবহার করতে পারেন) আপনি ইআর থেকে অবজেক্টের বৈশিষ্ট্যগুলি নির্ধারণ করতে পারেন (এটি অনুশীলন করার প্রস্তাব দেওয়া হয় না) 3) আপনি সম্পর্কগুলি থেকে স্ট্রুকট্রেসকে ডেটা করতে পারেন (এটি একটি তালিকা কারণ আমাকে ইলিমেন্টকে উইল এ পুনরায় অর্ডার করতে হবে) এটি একটি হ্যাশ কারণ আমার দ্রুত অনুসন্ধান প্রয়োজন)
ব্যবহারকারী 712092

@ ডাক আমি ক্ষমা চাইছি, পুনরায় অর্ডার দিয়ে ভুল করেছি। আমি দাবি করতে চাইনি "ডিপি এক্সওয়াইয়ের পক্ষে সহজ" তবে "প্রথম শ্রেণি করতে পারে এমন ভাষা হ'ল ..."। :)
ব্যবহারকারী 712092

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