উন্নয়নের পরবর্তী পর্যায়ে আপনি কীভাবে নেটওয়ার্কিং কোডটি লেখার অনুমতি দিবেন?


12

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

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

সম্পাদনা করুন: এটি শীর্ষ ডাউন আরপিজি হওয়ার পরিকল্পনা করেছে। সরল মাল্টিপ্লেয়ার যেখানে আপনি আপনার বন্ধুদের জন্য একটি সার্ভার হোস্ট করেন তা হ'ল আমি যা ভাবছি তাই প্রতারণা কোনও সমস্যা নয় (প্রতারণাকারী বন্ধুদের সাথে কে খেলতে চায়?)। তবুও আমি একটি "সার্ভার সর্বদা সঠিক" -প্রসূচনা দিয়ে যেতে চাই।

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


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

আমার মনে যা ছিল তা সাজানো। হতে পারে কিছু আন্তঃ প্রক্রিয়া যোগাযোগ যাতে আপনি যখন একা খেলতে চান বা ক্লায়েন্টের মতো একই কাজ করে এমন ক্লাস যা এখনই সার্ভারের মতো এটি পরিচালনা করে এমন কোনও ক্লাসের দরকার হয় না।
ঘোর্খ

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

আপনি যদি এটির কথা চিন্তা করেন তবে একক প্লেয়ার গেমগুলিতে মাইনক্রাফ্টের একটি স্থানীয় সার্ভার রয়েছে। সার্ভারটি ইঞ্জিন, ক্লায়েন্ট কেবল উপস্থাপক।
18.33 এ স্পার্ক করুন

উত্তর:


12

আপনি কী সঠিক গেমটি লিখছেন এবং কীভাবে আপনি এটি লিখছেন সে সম্পর্কে আরও না জেনে আপনার সমস্যার জেনেরিক সমাধান বলা খুব কঠিন।

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

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

এটি বিবেচনা করা হয়েছে, আপনি যদি নেটওয়ার্কিং কোডের জন্য প্রত্যাশিত প্রভাবটি কম করেন (যেমন, নেটওয়ার্কিং কোড না থাকা মোটেই গেম-ব্রেকার নয়) তবে এটি পরবর্তী (তবে খুব বেশি দেরি না) পর্যায়ে রেখে দেওয়া উপযুক্ত হবে।

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

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

এইভাবে, আপনি আপনার গেমটি তৈরি করার সাথে সাথে আপনি জানতে পারবেন কোন অংশটি নেটওয়ার্কিং কোড দ্বারা প্রভাবিত হয় এবং নেটওয়ার্কিং কোডটি লেখার সময় আসলে আপনি বেশ কয়েক ধাপ এগিয়ে রয়েছেন steps

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

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


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

2
@ খোরক: আহ, আপনি আপনার পণ্যটি যত তাড়াতাড়ি সম্ভব সুন্দর জিনিসগুলি দেখতে দেখতে চান! আচ্ছা, হ্যাঁ, আমরা সবাই করি। কিন্তু সেই প্রলোভনে কাটিয়ে ওঠার ফলে কোনও সু-নকশাকৃত ও সুচিন্তিত প্রোগ্রাম পরিচালিত হয় না।
হালকাতা রেস

আমি এই উত্তরটি গ্রহণ করব, যদিও আমি অন্যান্য উত্তরগুলিও পছন্দ করি। বিশেষত
@

2

আমি একইরকম পরিস্থিতিতে আছি, তবে আমি একটি গেমের চেয়ে নেট নেটওয়ার্ক সিমুলেশন করার চেষ্টা করছি; তবে আমি মনে করি যে আমার দৃষ্টিভঙ্গিটি আপনার নকশা প্রক্রিয়াটিতে সহায়তা করতে পারে।

আমার দৃষ্টিভঙ্গি আইপিসিতে আপনার মন্তব্যের লাইনের সাথে রয়েছে (আন্তঃ-প্রক্রিয়া যোগাযোগ)।

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

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

এটি আপনার যুক্তিকে পৃথক রাখতে সহায়তা করবে এবং নেটওয়ার্ক বিলম্বের কারণগুলিকে প্রক্রিয়াতে সিমুলেট করার অনুমতি দেয় যাতে আপনি বিলম্বের প্রভাবও দেখতে পান।


মনে হয় আমাকে তখন বইটি পরীক্ষা করে দেখতে হবে! আপনি যা বলেছিলেন তা করতে সক্ষম হবেন বলে প্রতিশ্রুতিবদ্ধ শোনায়।
ঘোর্খ

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

1

আপনি যদি এই সমস্ত জিনিস সম্পর্কে শিখছেন, তবে কেন একটি সাধারণ একক প্লেয়ার সংস্করণ 1 লিখবেন না এবং আপনার গভীর জ্ঞান দিয়ে একবার কাজ করার পরে, সংস্করণ 2 -র পুরো বিষয়টি গভীরভাবে পুনর্বিবেচনা করুন যা মাল্টি প্লেয়ার হবে?


0

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

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