MCPcopy Index your code
hub / github.com/buraksenyurt/game-dev-with-rust

github.com/buraksenyurt/game-dev-with-rust @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
1,220 symbols 1,882 edges 366 files 66 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Hazır Oyun Motorlarını Kullanarak Rust Dili Yardımıyla Oyunlar Geliştirmek

Rust programlama dilinde oyun geliştirmek için popüler birkaç hazır çatıyı nasıl kullanacağımı öğrenmek istiyorum.

  • [ ] 33 - Fly: 2D platform oyun geliştirme ile ilgili denemeler yaptığım yer. Ana oyun motoru olarak bevy kullanıyorum ancak bu sefer fizik motoru için bevy_rapier' den yararlanıyorum. Rapier, RigidBody, Collider gibi hazır komponentler sağlıyor ve aynı zamanda çarpışma kontrolü, yer çekimi uygulanması, sürtünme kuvvetlerinin entegre edilmesi gibi daha birçok fizik motoru özelliğini destekliyor.
  • [ ] 32 - Shuttle Game: Bevy ECS sisteminin kullanıldığı bu örnekte Marcel Champagne öğretisinden yararlanarak ilerlemeye çalıştım. İlk kez 3D sistemde kamera kullanıyorum. Ağırlıklı olarka tüm yapı Plugin'ler üzerinden yürüyor. İncelemeye değer.
  • [x] 31 - Mathventure: Bu eğlenceli matematik oyununda farklı seviyeleri aşmak için çeşitli matematik sorularına doğru cevaplar vermemiz gerekiyor. Lunar-Landing ve Mono-Bird oyunlarında olduğu gibi yine SDL kütüphanesini kullandım. Var olan oyun motorları yerine state yönetimini kendi yapan bir motor yazmayı amaçladım.
  • [x] 30 - mono-bird: Lunar Landing oyununda olduğu gibi SDL2 kütüphanesini kullandığım ve Flappy Bird klonunu yapmaya gayret ettiğim çalışmadır. Bu seferkinde bir oyun motorunun da temellerini atmaya çalışıyorum. En azından Game nesnesi ile ortam ayarlarını alan, pencereyi ayarlayan, fps'i belirleyen bir Engine nesnesi inşa etmeye çalışıyorum.
  • [x] 29 - lunar_landing: SDL2 kütüphanesini kullanarak geliştirmeye çalıştığım 1969 yapımı Lunar Landing klonu.
  • [x] 27 - on-my-way Bevy oyun motorunu kullanarak yazmaya çalıştığım bir uzay savaş oyunu. Kendi yolunda uzayı keşfe çıkmış kahraman pilotumuz karşısına çıkan meteorları yok etmeye çalışıyor. Füzeleri pahalı ve yakıttan yiyor ve yakıt sürekli azalıyor. Lakin yol boyunca insanlığın gezegenler arasına koyduğu otonomo yakıt istasyonları ile de karşılaşıyor. Onların üstünden geçerken belli süreliğine yakıtını tekrarda yenileyebiliyor. Ve macera bu şekilde gayet anlamsızca devam ediyor :D Maksat Rust kodlamak, Bevy ve ECS ile haşırneşir olmak.
  • [x] 26 - baller-game Bu çalışmada Fredericj Joubert'in Bevy ECS sistemini örnek bir oyun yazarak anlattığı video serisini uyguluyorum.
  • [x] 25 - learning-bevy-ecs Bevy ECS sistemindeki query kullanımını denediğim basit örnek.
  • [x] 24 - mini-quiz Bu basit terminal oyununda kullanıcıya bir test havuzundan karışık sorular sorulmakta. Esasında Rust ile programlamaya giriş konusunda tasarladığım örneklerden birisi. Hem eğlenceli hem de bir şeyler öğretir türden.
  • [x] 23 - qa: Yakın zamanda oyun programlama ile ilgili vereceğim bir seminerde, rust dilini tanıtmak için kullanacağım bir örneğe ihtiyacım vardı. Readme dosyasındaki maddeleri takip etmenizde yarar var. Klasik bir hello world'den ziyade dilin kendine has birkaç özelliğini vurgulamaya çalıştım.
  • [x] 22 - one-more-time: #bevy Daha önce bevy ile birkaç denemem olmuş ve hep hüsranla sonuçlanmıştı. Bu kez şu adreste güzel bir youtube öğretisi buldum. O seriyi takip edip Bevy oyun motorunu ve özellikle ECS (Entity Component System) yapısını anlamaya çalışıyorum. Tabi oyundan esinlenerek değişiklikler yapmaya da gayret ediyorum. Mesela kahramanımız hayali bir restoranda Donut'lar hazırlayıp satıyor. Birkaç çeşit donut var ve rastgele üretiliyorlar...
  • [x] 21 -radar: #ggez Ggez küfesi kullanılarak geliştirmek istediğim bir terminal oyunu. Ekranda bir radar var ve arada sırada beliren nesneleri tıklayarak yok etmeye çalışacağız. Bazıları dost bazıları düşman kuvvetler. Dost kuvvetlere ateş edersek puanımız eksilecek düşman kuvvetleri vurursak puanımız artacak.
  • [x] 19 - mystery: Robert Kerr'ün şu adresteki harika öğretisini takip ederek metin tabanlı bir macera oyunu nasıl geliştirilir öğrenmeye çalışıyorum. Bu sırada Rust'ın temel bilgilerini de tekrar etmiş oluyorum.
  • [x] 17 - pacman: #piston Klasik pacman oyununu şu repodaki örneğine bakarak yazmaya ve rust kodlama bilgimi artırmaya çalıştığım örnek.
  • [x] 16 - pod-race: #rusty_engine Ultimate Rust 2 kursundaki son örnek bir araba yarış oyunu. O bölümü tamamlamaya çalışıyorum.
  • [x] 15 - racer-ferris: #rusty_engine Aldığım Ultimate Rust 2: Intermediate Concepts isimli Udemy eğitimde rusty engine kullanılarak geliştirilen bir oyun var. Bunu tamamlamaya çalışacağım.
  • [x] 12 - wing-pilot-2024: #macroquad Bu sefer Commodore 64'te sıkça oynadığım 1942 oyununun bir benzerini Macroquad çatısını kullanarak gerçekleştirmeye çalışıyorum.
  • [x] 11 - missile-commander: #macroquad Bu örnekte 80lerin meşhur Atari oyunlarından Missile Command'in bir benzerini yazmaya çalışıyorum. Amacım Missile Command arkasındaki matematiği keşfetmek ve Rust örneğinde uygulayabilmek. Ayrıca stage mantığını kurgulamaya ve seviyelerde ilerledikçe oyunu zorlaştırmaya çalışıyorum.
  • [x] 10 - life-game: #macroquad Conway'in life game oyununu Rust ile yazmaya çalıştım.
  • [x] 09 - Wolf-Tank: #macroquad Macroquad motorunu kullanarak yazmaya çalıştığım basit bir RPG. Minik bir tankı kontrol etmeye çalışıyoruz.
  • [x] 08 - Tetra-Pong: #tetra Basit 2D oyun geliştirme çatılarından olan Tetra geliştirilen bir başka Ping-Pong örneği. Sitedeki tutorial'ı takip ediyorum.
  • [x] 07 - Spining-Square: #piston Popüler oyun motorlarından olan Piston ile ilgili Getting Started örneği.
  • [x] 05 - Math101: isimli projede oyun programlama için gerekli temel matematik enstrümanlara bakılıyor. MathForGames isimli dokümanda biraz daha fazla detay bulunabilir.
  • [x] 04 - walls_coming: #macroquad Sıradaki örnekte tekrardan Tantan'a uğruyorum. Bu kez Breakout oyununun yazılışını anlattığı öğretiyi çalışmaktayım. Bu örnekte macroquad isimli başka bir oyun kütüphanesi kullanılmakta.
  • [x] 03 - rockstroid: #ggez isimli örnek aslında Asteroids türevli bir oyunun klonu. Ggez paketinin örnekleri arasında yer alan oyunu kodundan bakarak yazmaya çalışıyorum. Adım adım anlatımı yapılan bir öğreti olmadığından orta seviyede olsa Rust bilgisine ihtiyaç var. Building Block'ları keşfetmek açısından oldukça yararlı bir çalışma. Kod tarafında net olarak bir Entity Componenet System bulunmuyor ama ona epeyce yaklaşılmış.
  • [x] 02 - ggez_101: #ggez ggez küfesinin nasıl kullanıldığını anlamaya çalıştığım bu temel örnekte ekrana rastgele konumlarda ve farklı renklerde dikdörtgenler çizen bir kod parçası yer alıyor. Alt ok tuşuna basınca işleyiş duruyor üst ok tuşuna basınca rastgele konumlarda üretimler devam ediyor.
  • [x] 01 - ping_pong: #ggez İlk örnek ile paralel başladığım bu çalışmada ise severek takip ettiğim Youtuber'lardan birisi olan Tantan'ın Ping Pong oyununu yapmaya çalışıyorum. Şu adreste yer alan örnekte GGEZ crate kullanılıyor.
  • [x] 00 - crayz_invaders: #bevy isimli ilk örnekte Jeremy Chone'un şu adresteki öğretisini birebire takip ederek ilerlemekteyim. Bu örnekte Bevy isimli Crate kullanılıyor ve Space Invaders benzeri bir konsol oyunu geliştiriliyor. Bevy'nin kullanılması dışında Entity Component System odaklı oyun motorlarının nasıl kullanıldığı da öğreniliyor.

Örnek Çalışma Zamanları

Monochrome Bird oyununa ait çalışma zamanı görüntüsü aşağıdaki gibidir.

Monochrome-Bird

1969 yapımı Lunar Landing oyunundan esinlenerek SLD2 kütüphanesini kullanarak yazmaya çalıştığım oyuna ait bir çalışma zamanı görüntüsü.

Lunar Landing 2029

Bevy ile yazdığım On My Way isimli oyuna ait bir ekran görüntüsü. Oyunda Mars'a ulaşmak isteyen kahraman uzay gemimiz yoluna çıkan göktaşlarını yok etmeye uğraşıyor.

assets/on-my-way.gif

racer-ferris olarak adlandırdığım ama esasında boşluktaki bataryaları toplayan bir robotun yer aldığı örneğin çalışma zamanı. Wagner ile birlikte :D

assets/eat_the_garbage.gif

WingMand 2042 oyununa ait bir ekran görüntüsü de aşağıdaki gibidir.

assets/wingman2042.gif

Atari Missile Command oyununa ait bir çalışma zamanı görüntüsü aşağıdaki gibidir.

assets/miscmdgp.gif

Conway'in Game of Life oyununa ait bir çıktı aşağıdaki gibi oldu.

assets/game_of_life.gif

Tank Wolf oyununa ait çalışma zamanı görüntüsü aşağıdaki gibidir. Bu ilk sürümde tankın kendi ekseni etrafında dönmesi, döndüğü yöne doğru ateşe edebilmesi, ileriye veya geriye doğru hareket edebilmesi, askeri birliklerin rastgele dizilerek ilkel bir AI mantığında tanka doğru hareket etmesi gibi özellikler yer almaktadır. Çarpışma hesaplamalarında birkaç bug var. Bazı koordinatlarda tank askeri birliğin altından geçmekte ve çarpışma hesabı suya düşmektedir ha haaa :D Bu tip şeyleri düzeltmek lazım ama Macroquad ile çalışmayı öğrenme noktasında bana epeyce deneyim kattığını söyleyebilirim. Diğer yandan AI tarafına iyice çalışmam lazım. Bunun için sanırım Pac Man'in arkasındaki AI matematiğini öğrenmem gerekiyor. Daha zamanım var.

assets/wolf_tank.gif

Tetra framework kullanan öğretidekilerden yola çıkarak yazdığım tetra-pong isimli oyunun çalışma zamanı çıktısı da aşağıdaki gibi. GS ile FB karşı karşıya :P Aslında bir ping pong oyunu denemiştim ama farklı bir çatı kullanarak aradaki kolaylıkları kıyaslamaya çalıştım.

assets/tetra-pong.gif

Ping Pong örneğine ait çalışma sonuçlarım aşağıdaki gibi. Ekran kaydını mp4'ten gif formatına çevirdiğim için epey dandik ama az da olsa fikir veriyor :) Güncellenen sürümde oyuncular için kendi taraflarına hareket eden birer iksir var. İksirleri yakaladıklarında ekstradan puanlar kazanıyorlar.

assets/ping_pong.gif

Rockstroid oyununa ait örnek ekran görüntüsü de aşağıdaki gibidir. Farklı bir örneğe geçeceğim için onu da yarım bıraktım :D Birçok bug içeriyor.

  • Söz gelimi bazı açılardaki lazer atışlarında lazer ters açıdan tekrar içeri girip belli bir mesafe kat ediyor. Oyuncu için hile kayalar için kötü :)
  • Lazer materyalinin açısı yanlış ve düzeltilmesi gerekiyor.
  • Uzay gemisine S tuşuna basınca yavaşlama fonksiyonelliği eklenebilir. Lineer interpolasyona göre yavaşlayabilir. Yani yavaşlama hızı artarak devam edip durur.
  • Kayalara hareket ettirilebilir. Çok yavaş da olsa gemiye doğru yönlenebilirler.

assets/rockstroid.gif

Extension points exported contracts — how you extend this code

Drawable (Interface)
(no doc) [4 implementers]
sdl2/mathventure/src/entity/mod.rs
DirectionCommand (Interface)
(no doc) [4 implementers]
sdl2/lunar_landing/src/setup/command.rs
Scene (Interface)
(no doc) [3 implementers]
tetra/tetra-pong/src/scenes.rs
Entity (Interface)
(no doc) [2 implementers]
sdl2/mono-bird/src/entity/mod.rs
GameObject (Interface)
(no doc) [1 implementers]
sdl2/mathventure/src/factory/mod.rs
MenuCommand (Interface)
(no doc) [3 implementers]
sdl2/lunar_landing/src/setup/command.rs
Drawable (Interface)
(no doc) [2 implementers]
sdl2/mono-bird/src/entity/mod.rs
Entity (Interface)
(no doc) [1 implementers]
sdl2/mathventure/src/entity/mod.rs

Core symbols most depended-on inside this repo

spawn
called by 127
macroquad/wing-pilot-2042/src/entity/bullet.rs
load
called by 60
sdl2/mathventure/src/entity/map.rs
getArray
called by 34
macroquad/wing-pilot-2042/static/gl.js
load_texture
called by 29
piston/pacman/src/common/utility.rs
tick
called by 22
piston/pacman/src/entities/pacman.rs
assert
called by 18
macroquad/wing-pilot-2042/static/gl.js
run
called by 16
sdl2/mono-bird/src/factory/engine.rs
add
called by 14
bevy/boxes/src/components.rs

Shape

Function 431
Method 399
Class 319
Enum 60
Interface 11

Languages

Rust98%
TypeScript2%

Modules by API surface

macroquad/wing-pilot-2042/static/gl.js22 symbols
macroquad/wing-pilot-2042/src/entity/fighter.rs21 symbols
bevy/another-space-invader/src/main.rs20 symbols
ggez/ping_pong/src/main_state.rs17 symbols
bevy/one-more-time/src/systems.rs17 symbols
macroquad/wing-pilot-2042/src/game/game.rs15 symbols
misc/mystery/src/game_world.rs14 symbols
misc/slam-dunk-manager/src/data/model.rs13 symbols
bevy/crayz-invaders/src/components.rs13 symbols
bevy/shuttle_game/src/shuttle.rs12 symbols
bevy/fly/src/systems.rs12 symbols
bevy/bevy-getting-started/src/main.rs12 symbols

For agents

$ claude mcp add game-dev-with-rust \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact