Fatih Demirağ — Kişisel Portfolyo, Sistem Mimarisi & Teknik Blog
İletişim
25 Ekim 2026 • 5 dk okuma

Flutter ile 2D Futbol Simülasyonu ve Dinamik Maç Motoru Geliştirme

Fatih Demirağ
Fatih Demirağ
Yazılım Geliştirici & Sistem Mimarı
Flutter ile 2D Futbol Simülasyonu ve Dinamik Maç Motoru Geliştirme

Mobil Oyunlarda Dinamik Maç Motoru Neden Zordur?

Mobil platformlarda bir spor kariyer simülasyonu geliştirirken en kritik mühendislik meydan okuması, maç motorunun hem adil hem heyecan verici hem de cihaz kaynaklarını tüketmeden 60 FPS akıcılıkta çalışmasını sağlamaktır. Efsane Futbol: Futbol Kariyeri oyununu geliştirirken, her maçın rastgele bir zar atışından ibaret olmaması için fiziksel ve taktiksel bir olasılık motoru kurguladım.

1. Pozisyon Olasılık Matrisi ve Karar Ağacı

Maç motoru, dakikalık tick sistemine dayanır. Her hücum fazında futbolcunun mevkiisi, kondisyonu, maç içi formu ve rakip takımın savunma direnci hesaba katılır:

// Örnek Olasılık Hesaplama Metodu
double calculateGoalProbability({
  required int playerFinishing,
  required int playerEnergy,
  required int goalkeeperReflex,
  required int defensivePressure,
}) {
  final baseRate = (playerFinishing * 0.6) + (playerEnergy * 0.4);
  final resistance = (goalkeeperReflex * 0.7) + (defensivePressure * 0.3);
  final netChance = (baseRate - resistance + 50).clamp(5.0, 95.0);
  return netChance / 100.0;
}

2. Kullanıcı Etkileşimi (Kritik Karar Anları)

Maç sırasında oyuncu yalnızca izleyici konumunda kalmaz. Ceza sahası yayında topla buluştuğunda oyun duraklar ve kullanıcının önüne 3 kritik seçenek sunulur: Plase Vuruş, Sert Şut veya Boştaki Arkadaşına Pas. Kullanıcının seçtiği opsiyon, oyuncunun yetenek puanlarına göre hesaplanan dinamik bir animasyonla sonuçlanır.

3. Çevrimdışı (Offline-First) SQLite Veri Kalıcılığı

Kariyer oyunlarında kullanıcılar metroda, uçakta veya internetin olmadığı anlarda kesintisiz oynayabilmelidir. Bu nedenle lig puan durumu, fikstür, transfer teklifleri ve istatistikler SQLite üzerinde ilişkisel bir şemayla saklanır. Cihaz internete bağlandığında ise Google Play Cloud Save ve liderlik tablolarıyla senkronize edilir.