কখন আমার হার্ড-কোড ডেটা বনাম বাহ্যিক ডেটা লোড করা উচিত?


36

আমি আমার নিজস্ব 2 ডি স্পেস-ভিত্তিক গেমটি তৈরির লক্ষ্যে এক হাজার বা তার বেশি লাইনের কোড যা এলোমেলোভাবে উত্পন্ন তারকা সিস্টেমের নেটওয়ার্ক তৈরি করে এবং তাদের গ্রহ, স্টেশন, জাহাজ এবং অস্ত্রগুলির এলোমেলো নির্বাচনের মাধ্যমে জনপ্রিয় করে তোলে।

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

আমি এই প্রকল্পের একমাত্র ব্যক্তি এবং যেমনটি আমি বলেছিলাম, এটি কেবল শখের জিনিস যা আমি বিশ্ববিদ্যালয় থেকে ফাঁকা ফাঁকা সময়ে করছি। তবে সম্প্রদায়টি কি অতিরিক্ত ফাইলগুলিতে ডেটা সংরক্ষণের সম্পূর্ণ অতিরিক্ত সিস্টেম তৈরিতে বিনিয়োগের পরামর্শ দেবে?

সফটকোডিং ডেটা এর মতো উপায়ে কী আছে, বনামের মাধ্যমে কেবল এটি হার্ডকোডিং করা? বাহ্যিক ফাইলগুলি সংশোধন করার জন্য কি দীর্ঘমেয়াদী সুবিধা রয়েছে - যদি আমি 'মোড' রাখতে গেমটির সন্ধান না করি তবে বাহ্যিক ফাইলগুলি থাকা কি প্রয়োজনীয়? যদি এটি কেবল একটি শখের জিনিস যা আমি কয়েক সপ্তাহ বা মাসের মধ্যে ছেড়ে দিতে পারি তবে আমার কি এই বিষয়ে সময় নষ্ট করা উচিত?


10
আপনি যে শব্দটির সন্ধান করছেন তা হ'ল "ডেটা চালিত" এবং হ্যাঁ, আপনি এমনকি একটি ছোট প্রকল্পে যা করছেন তার থেকে এক্সএমএল (বা জেএসএন এর মতো কোনও ফর্ম্যাট) ফাইলগুলি সহ নতুন স্টেশন এবং জাহাজ তৈরি করা দীর্ঘ সময়ের মধ্যে অনেক দ্রুত it's । এছাড়াও পরে আপনি দ্বিতীয় বার সাশ্রয়ের জন্য কোড স্পর্শ না করে পুনরায় সংকলন ছাড়াই মুছে ফেলতে এবং সম্পাদনা করতে পারবেন।
প্যাট্রিক হিউজেস

@ পেট্রিকহাগস আমার উত্তরটি টাইপ করার সময়, আপনি ইতিমধ্যে এটি মন্তব্যে রেখেছেন!
মার্টিনটাইভার্গা

1
যদি আমরা "সফট-কোডিং" কে আসল পদ হিসাবে বৈধতা দেওয়ার চেষ্টা করি তবে আমি দৃ firm় কোডিংয়ের প্রস্তাব দিচ্ছি "একটি সফট কোডিং ডেটা ম্যাট্রিক্সে হার্ড-কোডিং ইনপুট ব্যবহার করে।"
শান মিডলডিচ

1
@ সিঙ্গুলার 1 এই সাইটটি অন্য কিছু এসই এর চেয়ে আলোচনার জন্য ক্ষমাশীল। আমি মনে করি আপনার প্রশ্ন "সু-আলোচনার" স্থিতির জন্য যোগ্যতা অর্জন করেছে।
শেঠ ব্যাটিন

2
@ সিঙ্গুলার 1 আঃ, এটি এখানে। আমি আমার প্রথম মন্তব্য পোস্ট করার সময় এটি খুঁজে পেলাম না। ব্লগ.স্ট্যাকওভারফ্লো.com
শেঠ

উত্তর:


62

হ্যাঁ। আপনার প্রধান ইঞ্জিনের বাইরে সামগ্রী লোড করার জন্য আপনার একটি সিস্টেম প্রয়োগ করা উচিত।

সংক্ষিপ্ত উত্তরগুলির জন্য শিরোনাম।

না এটি খুব বেশি সময় গ্রাস করে না।

আমি মনে করি এটি আপনার সীমিত সময়ের বৈধ বরাদ্দ কিনা তা নিয়ে প্রশ্নটি আসবে; এমনকি যদি এটি মোট প্রকল্পের সময়ের একটি ছোট অংশ হয়ে যায়।

আপনি একটি গেম প্রকল্পে সম্পূর্ণ করার জন্য নেওয়া কয়েক ঘন্টা (হাজার) ঘন্টা ব্যয় করবেন। সম্ভবত কোনও পং ক্লোনায় নেই, তবে আপনার জটিল স্পেস গেমের জন্য অবশ্যই। এটি একটি কনফিগার ফাইল পাঠকের সাথে তুলনা করুন। আপনার প্রধান কন্সট্রাকটর মধ্যে নল এক্সএমএল করার জন্য একটি সিস্টেম বাস্তবায়নকারী, এবং পরবর্তীকালে খেলা প্রক্রিয়া করার জন্য পুনরায় চালু, নিতে হবে হয়তো 10 বা 20 ঘন্টা। এমনকি যদি এটি আপনার 50 বা 100 লাগে তবে এটি প্রকল্পের মোট সময়ের একটি ক্ষুদ্র অংশ হবে।

এতে সময় সাশ্রয় হবে

এটি কোনও সময় ব্যয় নয়; এটি একটি সময় বিনিয়োগ। এবং এটি পরিশোধ করা হবে।

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

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

এক-সদস্যের দলগুলি সবচেয়ে বেশি উপকৃত হয়

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

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

নিজের সাথে তা করবেন না। সরঞ্জামগুলি তৈরি করুন এবং আপনার কাছে একটি গেম তৈরির জন্য আরও সময় থাকবে।


3
বাহ, আরও চমত্কার উত্তর! অনেক ধন্যবাদ. আমি স্পষ্টতই মানগুলি দ্রুত পরিবর্তন করার দক্ষতার সাথে - এবং বাগ-শিকারেও একমত হয়েছি। একটি বা দুটি ছোট জিনিস ভুলে যাওয়া খুব দ্রুত একটি দুঃস্বপ্নে পরিণত হচ্ছে এবং জোট, নাম এবং হাল / অস্ত্রের মূল্যবোধগুলির মধ্যে কেবলমাত্র ছোটখাটো পরিবর্তনগুলি দিয়ে অবিচ্ছিন্নভাবে কোডের একই লাইনগুলি পুনরাবৃত্তি করার জন্য যা প্রয়োজন তা আমি করতে চাই।
একক 1 ই

শেঠ, আপনার নতুন সুযোগ স্তরে আপনাকে স্বাগতম welcome আপনার ঘনিষ্ঠভাবে এবং পুনরায় খোলার ভোটগুলি ভালভাবে ব্যবহার করুন!
MichaelHouse

আমি এটি প্রশংসা করি, ধন্যবাদ। সেগুলি ব্যবহার করার জন্য আমি কিছুক্ষণ অপেক্ষা করতে যাচ্ছি। আমি আপ-ভোটিং অ্যাকাউন্টগুলি থেকে মুছে ফেলা কিছু রেপ ওঠানামা পেয়েছি।
শেঠ ব্যাটিন

10

এটি একটি ভাল প্রশ্ন এবং আমি যে সর্বোত্তম উত্তর দিতে পারি তা হ'ল আরও অভিজ্ঞ / সত্যিকারের সময় সাপেক্ষ যে পথটি গ্রহণ করা ভাল idea যদি কেউ আপনাকে বলে যে আপনার সর্বদা এটি 'যথাযথ' উপায়ে করা উচিত, তবে সেগুলি কেবল ভুল।

আপনি ইতিমধ্যে বুঝতে পেরেছেন যে এটি একটি বাণিজ্য off একদিকে, হার্ডকোডিং এত লোভনীয় কারণ এটি দ্রুত এবং সহজেই যাওয়া সহজ, তবে দীর্ঘকাল ধরে বৈশিষ্ট্যগুলি যুক্ত করা এবং ডিবাগিং দুঃস্বপ্ন হয়ে যাবে। অন্যদিকে, একটি দুর্দান্ত, নমনীয়, প্রসারণযোগ্য সিস্টেম লেখার জন্য একটি বৃহত প্রাথমিক বিনিয়োগের প্রয়োজন, তবে জীবনকে দীর্ঘমেয়াদে অনেক সহজ করে তুলেছে।

লক্ষ্যটি হ'ল কিছু শেষ করা এবং আপনি যদি দুর্দান্ত ব্যবস্থা তৈরিতে জড়িয়ে পড়ে তবে লক্ষ্যটি আরও কমবে এবং আপনি অনুপ্রেরণা হারাবেন। হার্ড-কোডিং স্টাফ কিছু পরিস্থিতিতে ঠিক আছে তবে আপনাকে এটি করার বিষয়টি বুঝতে হবে। হার্ডকোডিংটি একটি খারাপ ধারণা হওয়ার জন্য এখানে কিছু কারণ রয়েছে:

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

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

  • আপনি এই মুহুর্তে একা কাজ করতে পারেন, তবে এমন সময় আসতে পারে যখন আপনি অন্য কাউকে এই প্রকল্পে আনতে চান। আপনি কি আপনার ঘৃণ্য প্যারোকিয়াল সিস্টেমটি ব্যাখ্যা করতে এবং এর জন্য ডকুমেন্টেশন লেখার জন্য সময় নিচ্ছেন?

  • হার্ড-কোডিংয়ে প্রায়শই নির্দিষ্ট ম্যাজিক সংখ্যার অর্থ বা জটিল শ্রেণি নির্ভরতা কী তা জেনে থাকে। আপনি এখনই এটি সব মনে রাখতে সক্ষম হতে পারেন তবে কিছুক্ষণের জন্য আপনি কোড থেকে দূরে থাকুন না কেন কেবল অপেক্ষা করুন। এমনকি বিস্তৃত মন্তব্য সহ, একটি খারাপভাবে ডিজাইন করা কাঠামোটি ফিরে যেতে নরক।

আমি বলব যে আপনি কেবলমাত্র ক্ষুদ্রতম বিবরণে হার্ড কোড স্টাফ থেকে মুক্ত মনে করুন। আপনি যদি অন্য কারও দ্বারা ব্যবহার করা, অনেক বেশি বড় হওয়া বা অন্য কোনও প্রকল্পে ব্যবহৃত হচ্ছে এমন উপাদানটির সামান্যতম ধারণাও থাকে তবে এখনই এটি করার জন্য সময় নিন।

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


উত্তর করার জন্য ধন্যবাদ. আমি ইতিমধ্যে খুঁজে পেয়েছি যে আমার সিস্টেমটি বেশ হাতছাড়া হয়ে যাচ্ছে। জাভাতে জিনিসগুলি প্রসারিত করার কারণে, আমার ক্লাসগুলিতে প্রায়শই প্রায় দশ থেকে পনেরো কনস্ট্রাক্টর যুক্তি থাকে এবং আমি সর্বদা ভুলে যাই যে তারা কোন আদেশে চলে I'm আমি 'দ্রুত এবং নোংরা' জিনিসগুলি করতে অভ্যস্ত, কারণ আমার মনোযোগ স্প্যান্সটি খুব কম, তবে আমি আসলে একবারের জন্য একটি প্রকল্প শেষ করতে চাই। এছাড়াও যদি আমি পরে জিনিসগুলির জন্য পরিসংখ্যানগুলি টুইঙ্ক করার প্রয়োজন বোধ করি তবে আমি হাজার হাজার লাইন হার্ড-কোডড বস্তুগুলিতে ট্রলিংয়ে আটকাতে চাই না ...
সিঙ্গুলার 1

@ Singular1ty সেক্ষেত্রে আপনি এখনই যা করছেন তা বন্ধ করুন। সময় এসেছে পাগলের মতো রিফ্যাক্টর করার। যে কোনও নতুন বিষয়বস্তু সম্পর্কে ভুলে যান এবং বিদ্যমান সামগ্রিক কাঠামোর উন্নতিতে মনোনিবেশ করুন। আমি একটি গেমস সংস্থায় কাজ করি এবং আমি সর্বদা একটি শ্বাস নিতে এবং রিফ্যাক্টরিংয়ের সময়কালের জন্য চাপ দিচ্ছি। তবে অবশ্যই, এটি বধির কানে পড়ে এবং আমরা সর্বদা পাগলের মতো ক্র্যাঞ্চিং করে শেষ করি / বাগ / হ্যাকের দ্বারা আক্রান্ত কুয়াশাঘেরা দিয়ে বেড়াচ্ছি। হো হাম
ডেলিপ্লে

8

আপনি যে বিষয়ে কথা বলছেন তা হ'ল ডেটা-চালিত প্রোগ্রামিং

ছোট প্রকল্পগুলির জন্য এটি সময় বিনিয়োগের উপযুক্ত নাও হতে পারে, কারণ আপনারা আরও অনেক বেশি গুরুত্বপূর্ণ বৈশিষ্ট্যগুলি উন্নত করতে পারেন।

তবে ডেটা চালিত প্রোগ্রামিং প্রয়োগ করা খুব সহজ হতে পারে। আপনি যদি এটি সম্পর্কে গুরুতর হন তবে আপনার সম্ভবত XML, JSON বা YAML ব্যবহার করা উচিত, তবে আপনি সরল পাঠ্য ফাইলও ব্যবহার করতে পারেন।

ডেটা-চালিত প্রোগ্রামিং

পেশাদাররা

  1. ডিজাইনারদের প্রোগ্রামিং জ্ঞান ছাড়াই গেম ডেটা অ্যাক্সেস এবং সংশোধন করার অনুমতি দেয়
  2. আপনি পুনরায় কম্পাইল করার প্রয়োজন ছাড়াই গেমটি পরিবর্তন করতে পারেন । এটিকে অবমূল্যায়ন করা উচিত নয়, কারণ আপনি এইভাবে আরও দ্রুত গেমটি বিকাশ করতে পারেন। ভাল গেমগুলি অনেকগুলি পুনরাবৃত্তির পরে আসে।

কনস

  1. এটি বাস্তবায়নে সময় এবং প্রচেষ্টা প্রয়োজন।
  2. এটি প্রোগ্রামটির জটিলতা বাড়াতে পারে।

এগুলি আমি এখনই ভাবতে পারি এমন কিছু উপকারিতা এবং বিপরীতে; আপনি যদি আরও কিছু মনে করেন তবে আমাকে জানান!
নিক ক্যাপলিংগার

1
আমি আমার শিরোনামে আপনার সম্পাদনা অনুমোদিত।
একক 1 ই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.