Bu proje, C++ ve SDL2 kullanilarak gelistirilmis (Orjinali Süper Mario olan) 2D platform oyunu prototipidir. Proje; menu sistemi, karakter secimi, seviye yukleme, carpisma, dusman davranisi ve HUD gibi temel platform oyunu bilesenlerini icerir.
Not: Proje, klasik Mario deneyiminden ilham alınıp ve bazı yerlerini kopyalanmış ozgun bir uygulamadir. Bu uygulama kesinlikle eğlenme ve eğlendirmek amacıyla yapılmamıştır, sadece C++ kod yapısını ve düzenini anlamak üzere yazılmıştır.
- SDL2 ile gercek zamanli 2D render
- Menu ekrani, karakter secim ekrani ve oyun akisi
- Tile tabanli seviye sistemi
- .txt dosyasindan seviye okuma (fallback destekli)
- Soru bloklari, tugla bloklar, borular, zemin ve sert bloklar
- Bayrak diregi ve kale hedef sistemi
- Goomba benzeri dusmanlar ve temel AI hareketi
- Coin toplama, skor sistemi ve can sistemi
- Oyun sonu / seviye tamamlama ekranlari
- C++17: Oyun mantigi, veri yapilari, render cagirilari, seviye parse islemleri
- PowerShell / Batch: Derleme ve yerel gelistirme komutlari
- SDL2 (SDL.h):
- Pencere yonetimi (SDL_Window)
- Render altyapisi (SDL_Renderer)
- Olay sistemi (SDL_Event, klavye/fare girisleri)
- Basit 2D cizim (SDL_RenderFillRect, SDL_RenderDrawLine)
- MSVC (cl.exe): Windows uzerinde C++ derleme
- VS Code: Kod duzenleme, gorevler ve C/C++ IntelliSense
- mario.cpp: Oyunun ana kaynagi (render, update, input, seviye yukleme, carpisma)
- level_world_1_1_like.txt: Tile tabanli dis seviye dosyasi
- SDL2.dll: Calistirma zamani SDL2 bagimliligi
- build_mario.bat: Windows icin derleme kolaylastirici script
- .vscode/c_cpp_properties.json: IntelliSense include/derleyici ayarlari
- .vscode/tasks.json: VS Code gorevleri
Seviye dosyasi oyun basinda okunur:
- Dosya yolu: level_world_1_1_like.txt
- Kod tarafi: mario.cpp icindeki initLevel()
Eger dosya okunamazsa, oyun icinde fallback harita devreye girer.
- . : Gokyuzu / bosluk
- X : Zemin (GROUND)
- ? : Soru blogu (QUESTION)
- [ : Boru sol ust
- ] : Boru sag ust
- | : Boru govdesi
- H : Sert blok (merdiven benzeri yapi)
- B : Bayrak diregi isaretleyici
- K : Kale isaretleyici
Boru parse mantigi [] + || satirlarini birlestirerek tek bir boru govdesi olusturur.
GameState enum ile uc temel durum yonetilir:
- MENU
- CHAR_SELECT
- PLAYING
- Event polling (SDL_PollEvent)
- Duruma gore update/render
- Basit frame pacing (SDL_GetTicks, SDL_Delay)
- AABB tabanli carpisma
- MTV (minimum translation vector) ile ayristirma
- X/Y ekseninde ayri cozumleme
- Player
- Enemy
- Platform
- Coin
- Particle
Bu yapilar vektorlerde tutulur ve her frame update edilir.
- Karakter secim ekrani (kilitli karakterler / puanla acma)
- HUD: skor ve can
- Oyun sonu ekrani + menuye donus
- Seviye tamamlandi ekrani + toplam skor gosterimi
- Windows
- Visual Studio C++ toolchain (cl.exe)
- SDL2 headers + libs + dll
cl.exe /EHsc /MD /I "C:\SDL2_extract\SDL2-2.30.3\include" mario.cpp /link /LIBPATH:"C:\SDL2_extract\SDL2-2.30.3\lib\x64" SDL2.lib SDL2main.lib /SUBSYSTEM:CONSOLEDerleme sonrasi:
- mario.exe
SDL2.dll dosyasi ayni klasorde bulunmalidir.
- A / D: Hareket
- W veya Space: Zipla
- ESC: Cikis
- Menu/ekran gecisleri: klavye + fare destegi
- Seviye verisi kod icinden dis dosyaya tasindi (.txt loader)
- Harita sembol standardi genisletildi ve parser uyumlulugu artirildi
- Boru parse mantigi ([] + ||) duzeltildi
- Boru gorseli NES stiline daha yakin hale getirildi
- Menu/karakter secim hitbox ve etkilesim hatalari giderildi
- Derleme sonrasi gecici dosya/artik temizligi standardize edildi
- Proje tek dosya (mario.cpp) uzerinde ilerlemektedir.
- Bir sonraki dogal adim, kodu modullere bolmektir:
- renderer.*
- level_loader.*
- entities.*
- game_state.*
Bu ayrim test edilebilirlik, bakim ve yeni ozellik ekleme hizini ciddi bicimde artirir.
Depoya eklenecek lisans dosyasina gore guncellenmelidir (oneri: MIT).