Loading...
Smeshan avatar Smeshan 89 Точки

Console game engine

Здравейте,

след като имам няколко идеи за конзолни игри, които искам да направя, реших че може би ще е хубаво да направя някакъв вид game engine. Което ще рече библиотека, която да мога да вкарам в други мои проекти и да има основни неща, които се "повтарят" във всяка една игра - четене от файл, обекти от char, екран и опресняване на екрана, обработка на команди от клавиатурата, и т.н. И вече от там аз само единствено да пиша логиката на играта без да се занимавам с основните неща.

И ето докъде стигнах:
Console Game Engine v1.0.zip

Като идеята е да можеш да създаваш обект игра, която има в себе си screen, който всъщност представлява 2d вектор от pixels (като pixel е просто x, y, char symbol). И вече на този екран да добавяш различни видове windows и objects, които създаваш, триеш, управляваш и т.н.
Разкоментирайте примера в mainExample.cpp и тествайте сами да добавите някакви прозорци. Тук виждам много потенциал за Inheritance и polymorphism и чакам лекцията, преди да пиша глупости.

Но основният въпрос е как правя всички тези файлове да са в една библиотека? Буквално да е #include "ConsoleGameEngine.h" и това да е. Със сигурност всичко трябва да е в един и същ namespace (доколкото разбрах), но не вярвам, че начина е просто да вкарам всичко в един header file, че иначе било ужасно за редактиране и надграждане? Или това е? Четох в интернет, но не намерих нещо супер конкретно как да стане. Така, че ако някой знае как, ще се радвам да сподели :)

Иначе ще добавя да е cross platform, също така да ще има и рендер, който да добавя цветове и да трансоформира int-ове към разширената ASCII таблица (където са яките символи), да добавя controls, звук, Logger - който да пробвам да позлваме за save/load функция, опция между game loop и turn-based game, и т.н. и т.н..

Ще се радвам за коментари :)

П.С. Съответно в интернет има подобни начинания, но не съм разглеждал нищо конкретно в дълбочина, тъй като искам сам да опитам да измисля цялата концепция и да се поблъскам със самата архитектура.

Поздрави,
Илиян

Тагове:
2
C++ OOP 12/08/2021 18:33:10
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, Илиян,

Да започва с това, че си супер и силно ти се кефя! :)
Мисля, че курса Applications Development with C++ би ти харесал много.

Като начало мога да посъветвам да инвестираш малко време на научиш git. Или поне някой основни неща за него.
След това си създай собтвено хранилище (repository) и започвай да качвай проекта си там.
Така хем ще има проследимост, хем ще е лесно да го споделяш с други хора (а не да си разменяме архиви), хем евентуален бъдеш работодател ще може да надзърне какво си правил.

Опитваш се да си отговориш на одски много въпроси наведнъж, което е прекрасно. Силно си влязъл във фазата, в която копнееш за още и още знания и всичко ново ти е интересно. Чак направо ти завидях! :)

Ще се опитам да ти отговоря на някой от въпросите, но няма да мога на всички, защото са си направо цели теми...

1) Има 2 вида библиотеки в света на С++. Статични(static) и Споделини(shared objects/dll).Това което описваш ти е статична библиотека.  
Random useful link: https://medium.com/@StueyGK/static-libraries-vs-dynamic-libraries-af78f0b5f1e4#:~:text=Static%20libraries%2C%20while%20reusable%20in,outside%20of%20the%20executable%20file.&text=In%20contrast%2C%20a%20dynamic%20library,a%20need%20to%20re%2Dcompile.

2) Искаш Буквално да е #include "ConsoleGameEngine.h" . Това не е добра идея. Вече учихме защо. Искаш да държиш include-ите ти малки за да не компилираш излишни файлове.

3) Би било хубаво да вземеш знанията за Inheritance and Polymorphism както каза преди да се впуснеш в такова приключение.
Определено ще решиш проблема с Renderer-а ти out-of-the-box.

Поздрави

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.