Професионална програма
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 372 Точки

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

Да започва с това, че си супер и силно ти се кефя! :)
Мисля, че курса 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