Hedra یک بازی جهان باز سه بعدی است که در دوران دبیرستان از ابتدا نوشتم
آدرس مقاله: https://github.com/maxilevi/project-hedra/tree/pre-ai آدرس نظرات: https://news.ycombinator.com/item?id=50199389 امتیاز: 234 # نظر: 48
Project Hedra یک RPG جاه طلبانه جهان باز و کم پلی است. کلاس خود را انتخاب کنید، جهانهای بیپایان تولید شده را کشف کنید، مهارتهای مختلف را باز کنید و ماموریتهای رویهای تولید شده را کامل کنید.
من این پروژه را زمانی که در دبیرستان بودم (حدود 15 سالگی) شروع کردم تا یاد بگیرم OpenGL چگونه کار می کند.
Scope creep به سرعت فرا رسید و پس از چند سال به یک موتور بازی و بازی سه بعدی کامل تبدیل شد. پایگاه کد حدود 100 هزار LOC دارد و بازی از لینوکس و ویندوز پشتیبانی درجه یک دارد.
میلیون ها خط کد بیهوده نیستند. بازی و موتور هر دو پر از امکانات هستند :)
WorldRenderer.cs. کل جهان را تنها در 3 رندر می کند (در واقع این بستگی به نحوه پارتیشن بندی بافر داده دارد، اما به صورت 3 طراحی شده است) با استفاده از glMultiDrawElements فراخوانی (آب، زمین، نمونه) رسم می کند.
Block.cs جزء اصلی جهان در https://maxilevi.com/blog/procedural-meshing-hedra بیشتر بخوانید
Fishing.py . نوشته شده در پایتون به عنوان یک اسکریپت مد با استفاده از IronPython، به طور مستقیم با C# API در تعامل است.
NativeArray.cs پیاده سازی یک آرایه اولیه با استفاده از یک تخصیص دهنده سفارشی. همین پروژه تخصیص دهنده های مبتنی بر پشته و همچنین تخصیص دهنده های مبتنی بر stac را با استفاده از stackalloc فراهم می کند. ایده این بود که تخصیص خودکار پشته (و در نتیجه اجتناب از GC) در طول فریم های بازی به حداقل برسد.
این بازی یک مود برای موتور پایه است. ایده معماری به این روش این بود که خودم را مجبور کنم که API مود را به روز نگه دارم، بنابراین دسترسی به ساخت مودها را تشویق کنم.
اساسا کل بازی. این شامل منطق هوش مصنوعی، اجزا، تولید جهان، سیستم های ماژول، قرار دادن اشیا و بسیاری موارد دیگر است.
بخش های اصلی موتور، این همه انتزاعات را برای جهان تعریف می کند. این رندر، صدا، سیستم های پایه مختلف و همچنین ویژگی های کلی پنجره، حلقه بازی و پلتفرم را کنترل می کند. این تقسیم در ابتدا انجام نشد، بنابراین ممکن است برخی چیزها هنوز بیرون باشند.
هسته اولیه مورد استفاده در موتور. این شامل تخصیصدهندههای پشته و پشته، پیادهسازی سفارشی لیستها و آرایهها و همچنین بستهبندیها به اشارهگرهای بومی و برخی دیگر از موارد اولیه مفید است.
ابزار خط فرمان برای فشرده سازی دارایی های بازی به فایل های باینری مناسب. تصاویر، مدلها، فایلهای صوتی، سایهزنها را در یک فایل باینری با ساختاری طراحیشده برای بازیابی سریع دادهها ترکیب میکند.
زمانی هدرا از چند نفره پشتیبانی می کرد. با انجام UDP Hole Punching و برقراری ارتباط کلاینتها با P2P کار میکرد، این سرور مسئول آن بود. همچنین ممکن است برخی از بقایای شبکه را در کد Engine مشاهده کنید.
میتوانید گردشهای کاری GitHub را برای نمونههایی در لینوکس و ویندوز بررسی کنید.
متن اصلی (انگلیسی)
Hedra is a 3D open world game I wrote from scratch while in highschool
Article URL: https://github.com/maxilevi/project-hedra/tree/pre-ai Comments URL: https://news.ycombinator.com/item?id=50199389 Points: 234 # Comments: 48