গেমস প্রোগ্রামিংয়ের জন্য সি ++ এর সাথে প্রতিযোগিতা


21

আমি আগ্রহী যে কেন গেমস বিকাশের জন্য সি ++ এত জনপ্রিয়, পরিবর্তে অন্যান্য ভাষা নয়। আমি জানি আপনি এটির সাথে খুব দ্রুত কোড তৈরি করতে পারেন, তবে এটি ঠিক কী এটি জনপ্রিয় করে তোলে?

এটা কি কেবল দ্রুত হওয়ার কারণে? ওও দৃষ্টান্ত বা বহনযোগ্যতার মতো ভাষাতেও কি এটি অন্য কোনও বৈশিষ্ট্য রয়েছে? সময়ের সাথে সাথে যে সমস্ত গ্রন্থাগার তৈরি হয়েছে তা কি এই কারণেই? অথবা এই সমস্ত (এবং অন্যান্য) কারণে কিছু সংমিশ্রণ?

যদি কেউ আমাকে এটি পূরণ করতে পারে তবে আমি খুব খুশি হব। :-)


7
গতি আমার পক্ষে যথেষ্ট কারণ, বিশেষত যেহেতু ভাষা সম্পর্কে প্রত্যেকের অভিযোগ আমার কাছে সত্যিকার অর্থে আসে না।
বেনিয়ামিন লিন্ডলি

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

@ ম্যাট ধন্যবাদ, জানেন না যে এর অস্তিত্ব আছে। আমি কি বিষয়টিকে সেখানে স্থানান্তর করতে পারি, বা আমি এটি মুছে ফেলা এবং এটি আবার তৈরি করতে পারি?

এটি ইতিমধ্যে বেশ কয়েকবার জিজ্ঞাসা করা হয়েছে।
জ্যান লিংস

1
@ বেঞ্জামিন: তারপরে আমি সাহস করি যে আপনি সি ++ তে যথেষ্ট লেখেননি, বা আপনি পাইথন (বা লিনকু সহ সি #) এর মতো আর কোনও ভাবপূর্ণ ভাষা ব্যবহার করেন নি। যাইহোক, যদি কিছু কৌতুকপূর্ণ কারণে আপনি 1 টিতে আরও অনেক ভাষা কী করতে পারে তার জন্য 20 লাইন কোড লিখতে পছন্দ করেন , সি ++ এর অত্যন্ত দুর্বল ব্যাকরণের অর্থ হল প্রোগ্রামগুলি যা করা উচিত তার চেয়ে কমপ্লেক্স করতে যথেষ্ট সময় নেয় এবং সঠিক আইডিই সরঞ্জামগুলি (রিফ্যাক্টরিং ইত্যাদি) etc. আরও কঠিন, যদি অসম্ভব না হয়, তৈরি করা।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

উত্তর:


29

অসংখ্য কারণ:

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

ঠিক আছে, আপনার উত্তরের জন্য প্রত্যেককে ধন্যবাদ, আমার যা প্রয়োজন তা আমার নিজেরাই কভার করেছেন। :-)
KasMA1990

14

কয়েকটি কারণ রয়েছে, যা আমি গ্রাহাম কীভাবে উত্থাপিত হয়েছে তা ছাড়াও আমি উল্লেখ করতে চাই।

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

আপনি নিম্ন স্তরের মানে না?
13:25 এপ্রিলকে ঝাঁকুনি করা

5
সি ++ একটি low-levelভাষা; তবে high-levelএকত্রিতকারী, আইএমও।
নাট

3
আমি একমত নই সি ++ হ'ল একটি উচ্চ-স্তরের ভাষা, যা বিল্ট-ইন সুবিধার সাথে সি-তে ফিরে আসে (যা নিম্ন স্তরের ভাষা)।
foo

7
সি ++ হ'ল একটি উচ্চ স্তরের ভাষা, সি। এসেম্বলি নিম্ন স্তরের। এখন, সি ++ সি এর চেয়ে উচ্চতর স্তর, ঠিক যেমন সি # সি ++ এর চেয়ে বেশি এবং রুবি / পাইথন সি # এর চেয়ে বেশি than
এএ গ্রেপাসাস

4
উত্তরাধিকারের কোডটি কেন অবচয় করা উচিত (অবমূল্যায়ন করা হয়নি)? "লিগ্যাসি কোড" এর অর্থ হ'ল এটি পুরানো, এটি খারাপ নয়।

8

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

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


3

সি ++ এ আপনি স্থানীয় পরিবর্তনগুলি বরাদ্দ করতে পারেন যা ফাংশন শেষ হওয়ার পরে অদৃশ্য হয়ে যায়। সাধারণত, এগুলি একটি স্ট্যাকের জন্য বরাদ্দ করা হয়।

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

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

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


1
-1 (যদি আমি পারতাম) - স্থানীয় আদিম দুটি জাভা এবং সি # তে স্ট্যাকের উপর বরাদ্দ করা হয়, এবং সি # তে আপনি স্ট্যাক-বরাদ্দ তৈরি করতে পারেন structs। আরো বিন্দু, অত্যন্ত অত্যন্ত গতি ছোট বৃদ্ধি এই জাল আপনি নয় প্রায় অন্য এক ভাষা ন্যায্যতা যথেষ্ট। @ গ্রাহাম পার্কস দ্বারা আসল কারণটি বর্ণিত হয়েছে: গেম ডেভেলপাররা এটি প্রত্যাশিত যা তাই নতুন গেম ডেভেলপাররা কী শিখেন এবং নতুন এসডিকে কী জন্য টার্গেট করা হয়। প্রচুর ভাষা রয়েছে (উদাঃ Go) যা ঠিক তত দ্রুত বা দ্রুত এবং প্রায় লিখতে অসুবিধে হয় না ।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

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

1
@ জো ফ্রেসনিগ: সি ++ স্ট্যাক বরাদ্দে দুর্দান্ত, কেবল একটি অ্যাসেম্বলি ভাষার তালিকা ফেলে দিন। তবে বেশিরভাগ সংকলক বিক্রেতারা স্ট্যাকটিতে বিশাল পরিমাণ মেমরি বরাদ্দ করে না। অভিজ্ঞ সি ++ প্রোগ্রামারদের একটি সাধারণ উপলব্ধি হ'ল বিশাল বস্তুগুলি স্থানীয় স্টোরেজ (স্ট্যাক) নয়, গতিশীলভাবে বরাদ্দ করা হয় (গাদা)। স্ট্যাকের বিশাল আকারের বস্তুগুলি কিছু প্ল্যাটফর্মের স্তূপের মধ্যে স্ট্রাক এবং হিপগুলি একে অপরের দিকে বাড়ার সাথে সাথে ছড়িয়ে পড়ে।
টমাস ম্যাথিউজ

1
আরও অভিজ্ঞ সি ++ প্রোগ্রামারগুলির একটি সাধারণ উপলব্ধি, বিশেষত গেম কনসোলগুলিতে যারা স্ট্যাককে উপচে পড়বে না তা হ'ল স্ট্যাক বরাদ্দ বা পূর্বনির্ধারিত। সি এটি সহজ করে তোলে কারণ বরাদ্দকারী বস্তুর কাঠামোগত ধরণের অংশ নয়। এটি ভুলভাবে কোনও কিছুকে মুক্ত করাও সম্ভব করে তোলে তবে আমার অভিজ্ঞতায় stdlib- সামঞ্জস্যিক বরাদ্দকরণ বাস্তবায়ন / সামঞ্জস্যতা স্ক্রু করা কেউ তুলনায় একটি বিরল সমস্যা। প্লেসমেন্ট নতুন সহ কিছু কৌশল রয়েছে তবে এটি আবার সি এর

2
নং C ++ গতি সুবিধার জন্য আপনার নিজস্ব লেখা মেমরির ম্যানেজার ব্যবহার করার ক্ষমতা কারণে গাদা বরাদ্দ। প্রতিটি বুদ্ধিমান ভাষা স্থানীয় লোকদের স্ট্যাকের জন্য বরাদ্দ করে।
14:51

3

গেমগুলি একবার মেশিনের ভাষায় লেখা হয়েছিল, কারণ তাদের কাছে ছিল বহিরাগত হার্ডওয়্যার যার জন্য কোনও সংকলক ছিল না। এই হার্ডওয়্যারটিতে এমন বৈশিষ্ট্যও নেই যা সি প্রোগ্রামাররা গ্রহণযোগ্যতার জন্য গ্রহণ করে, যেমন দক্ষ 16-বিট পূর্ণসংখ্যার গণিত।

গেমগুলি পরিচিত হার্ডওয়্যারগুলিতে স্থির হয়ে গেলে, সি সংকলকগুলি উপলভ্য হয়ে যায় এবং অল্প সময়ের মধ্যে সমস্ত গেম সিতে লেখা হয়

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

কম্পিউটারগুলি কয়েক বছর আগের তুলনায় 1000x দ্রুত গতিতে এখন মনে হচ্ছে, একটি উচ্চ স্তরের ভাষা বিকাশের সময়কে ($) সি অচল করে তুলবে।

এটি ঘটেনি কারণ গেমের ক্রেতারা জানেন যে হার্ডওয়্যারটি 1000x আরও ভাল, এবং এমন একটি গেমের জন্য তাদের ডলারগুলি বাণিজ্য করতে চায় যা দেখতে আরও ভাল এবং 1000x ভাল দেখায়। এটি উচ্চ স্তরের ভাষা গ্রহণ করবে এমন সিস্টেম থেকে theিলটিকে সরিয়ে দেয়।

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

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

* যদি কোনও পয়েন্টারটি ক্যাশে মিস না করে, তবে কেন 32 টি বিট এটি সঞ্চয় করতে ব্যয় করবে? যদি কোনও পয়েন্টার ক্যাশে মিসের কারণ হয়ে থাকে তবে সেরা সেই ক্যাশে মিস থেকে মুক্তি পান।


1
"সি ++ তে নতুন কোনও বৈশিষ্ট্য নেই যা আমার মনে হয় গেমগুলিকে উন্নত করে।" হাঃ হাঃ হাঃ? গলি? humanডেরিভেটস সহ একটি শ্রেণি playerএবং enemy?
orlp

2
@ নাইটক্র্যাকার: বুনিয়াদি সি-এ উত্তরাধিকার সূক্ষ্মভাবে কাজ করে; আপনি যে সম্পর্কটি বর্ণনা করেছেন তা কার্যকারিতা এবং পরিষ্কার-পরিচ্ছন্নতার কারণে হ্যাড-এ ব্যবহার করে আরও কার্যকর করা হয়েছে।

3
একটি ক্রমবর্ধমান sensকমত্য আছে যে সি ++ এর ওওপি বৈশিষ্ট্যগুলি গেমসের জন্য উপযুক্ত নয়, কারণ এই বৈশিষ্ট্যগুলি অনুমানগুলি নিয়ে কাজ করে যা ক্যাশে পারফরম্যান্সের বিরুদ্ধ।
বিএমসিনেট

এমনকি যদি আপনি বিশ্বাস করেন যে সি ++ সি এর চেয়ে কোনও সুবিধা দেয় না তবে অবশ্যই আপনাকে অবশ্যই সনাক্ত করা উচিত যে সিটিতে ফিরতি সি ++ এর চেয়ে কোনও সুবিধা দেয় না।
ড্যান ওলসন

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

3

প্রতিটি প্রোগ্রামিং ভাষার বিভিন্ন কারণের জুড়ে শক্তি এবং দুর্বলতা থাকে। এই কারণগুলির উদাহরণগুলি:

  • একটি নির্দিষ্ট প্ল্যাটফর্মের গতি
  • একটি নির্দিষ্ট প্ল্যাটফর্মে মেমরির ব্যবহার
  • এটি কী কার্যকারিতা এটি আরও সহজেই প্রকাশ করে
  • এটি কোন প্ল্যাটফর্মে রয়েছে
  • কোনও প্রোগ্রামার অন-বোর্ডে কী বিবেচনা করে

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

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

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

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

শেষ কথাটি হ'ল এর কয়েকটি historicalতিহাসিক এবং রাজনৈতিক। বিভিন্ন প্রোগ্রামিং ভাষার মধ্যে অনেক শিখা যুদ্ধ যুদ্ধ করা হয়েছে। উদাহরণস্বরূপ সি # গেমস বিকাশের জন্য ঠিক ততটাই উপযুক্ত হতে পারে তবে এটি সি ++ পরে এসেছে। বা লোকেরা এটি মাইক্রোসফ্ট থেকে পছন্দ করে না। কিছু লোক সি # তে সরানো হয়েছে, কেউ তা করেনি। কিছু লোক এখনও বেসিক, পাস্কাল এবং সি-তে গেমস প্রোগ্রাম করে থাকে যাই হোক না কেন প্রোগ্রামাররা স্বাচ্ছন্দ্য বোধ করে, তারা দৃ to় থাকবে। গেমস প্রোগ্রামাররা বেশিরভাগ সি ++ এর সাথে আরামদায়ক হয়েছে, সম্ভবত তারা সি এবং সি ++ দিয়ে বেড়েছে এবং এটি তাদের চাহিদা পূরণ করে met কম্পিউটার শিল্প যদি এমন একটি স্থানে থাকে যেখানে জাভার পারফরম্যান্স এবং উপভোগ যথেষ্ট লোককে সন্তুষ্ট করে, তবে সম্ভবত জাভা হ'ল ডি গ্লোবাল স্ট্যান্ডার্ড গেম ডেভলপমেন্ট ল্যাঙ্গুয়েজ।


2

উত্তরাধিকার এবং গতি।

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

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


2

আপনি যদি কনসোলগুলির জন্য বিকাশ করছেন তবে আপনার কোনও বিকল্প নেই: পেশাদার এসডিকে কেবল সি ++ স্বাদে আসে। সাধারণত তাদের বেশিরভাগ জিনিসে সি অ্যাক্সেস থাকে।

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

কারণ এটি যেখানে প্রো ইন্ডাস্ট্রি বাস করে এবং বেশিরভাগ প্রত্যেকেই এর অংশ হতে চায়, বেশিরভাগ গেম প্রোগ্রামাররা সি ++ প্রোগ্রামার।

যেহেতু সব ঘটে যায়, বেশিরভাগ ইঞ্জিন বিকাশকারীরাও সি ++ বিকাশকারী, তাই পেশাদার গ্রেড ইঞ্জিনগুলির মূল্যায়ন করার সময় আপনার সমস্ত পছন্দ সি ++ হবে।

এটি সমস্ত একটি বড় স্বনির্ভর ইঞ্জিন। এটি ব্যাহত করার জন্য কেবল প্রযুক্তিগত অগ্রগতির চেয়ে আরও বেশি প্রয়োজন।


2

এফডাব্লুআইডাব্লু: গ # বিকাশের জন্য সি # জনপ্রিয়তা অর্জন করছে। দেখুন দেন মিগুয়েল ডি কাজা এর ব্লগ পোস্টে । খুব আকর্ষণীয় পড়া, আইএমএইচও।


2
যথারীতি মিগুয়েল তার পছন্দসই (সাধারণত প্রান্তিক) প্রযুক্তিগুলিকে ঠেলে দেয় যেখানে সি # আসলে শিল্পের বড় খেলোয়াড় হয়ে উঠেছে, যেমন এক্সএনএ।

2

যদিও আমি মোটামুটি ভারী সি-এন্টি, সি ও সি +++ করি, তাদের কাছে যে কয়েকটি জিনিস রয়েছে তা হ'ল যে প্ল্যাটফর্মটি চলছে তার উপর সম্পূর্ণ নিয়ন্ত্রণ রয়েছে, আপনি নিশ্চিত হতে পারেন যে সর্বদা কী চলবে, না জিসি, কোনও গ্লিটস নেই।

আজকাল এটি অতটা গুরুত্বপূর্ণ নয়, তবে এটি আন্ডারপাওয়ারযুক্ত প্ল্যাটফর্মগুলির জন্য হতে পারে।

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

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


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

@ ক্রিস: নন-গেম প্রোগ্রামারদের কাছে এটি বর্ণনা করার সেরা উপায়টি হ'ল গেমগুলি এমন একটি ডোমেন যেখানে গতি প্রতিযোগিতামূলক সুবিধা। যদি আপনার ওয়ার্ড প্রসেসরটি 5 সেকেন্ডে শুরু হয় যেখানে এমএস ওয়ার্ড 10 লাগে বা 0.1 সেকেন্ডে রিফ্লো হয়ে যায় যেখানে ওয়ার্ড 0.2 নেয়, এটি মূল্যহীন। তবে যদি আপনার গেমটি আরও 10% টুকরো টুকরো টুকরো করে ফেলতে পারে বা আরও একটি বিশদ চরিত্র প্রদর্শন করতে পারে তবে এটি একটি বিশাল প্রতিযোগিতামূলক সুবিধা হতে পারে।

তাহলে কি সমাবেশের বাইরে কোনও কিছুর কোড করা বোকামি হবে না? এটি অবশ্যই কমপক্ষে 10% দ্রুত হবে। এমন একটি পয়েন্ট রয়েছে যেখানে আপনি বিকাশের রক্ষণাবেক্ষণ এবং গতির জন্য কার্য সম্পাদন বন্ধ করার জন্য কল করেন। সাধারণত পয়েন্টটি এই দিনগুলিতে সি ++ হয়। মাইনক্রাফ্টের মতো ক্রস প্ল্যাটফর্মে যাওয়ার দক্ষতার ওজন যদি বেশি থাকে তবে এটি ভালো লাগবে।
বিল কে

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

এসেম্বলার এবং সি / সি ++ এর মধ্যে প্রোগ্রামার দক্ষতার ধাপটি সি এবং সি ++, বা সি ++ এবং সি # / জাভার মধ্যে প্রোগ্রামার দক্ষতার ধাপের চেয়ে বৃহত্তরতার একটি ক্রমও। ফ্রেড ব্রুকস 25 বছর আগে এটি চিহ্নিত করেছিলেন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.