1. Genel Mantık

12ADAM maç simülasyonu rastgele zamanlayıcı ile değil, ağırlıklı olasılık + durum sistemi ile çalışır.

  • 90 tick = 90 oyun dakikası — her dakika bir tick işlenir.
  • Skor, xG, top payı ve olaylar EventSystem + MatchState tarafından belirlenir.
  • Canvas (pas, pres, oyuncu hareketi) yalnızca görsel katmandır; sonuçları tick motoru belirler.
  • Güçlü takım istatistiksel olarak daha fazla top, xG ve gol üretir; sürpriz sonuç yine mümkündür.
Piyasa değeri → Güç (40–95) + Form + Elo
Otomatik taktik (güç farkı) → pres / dengeli / kontra ağırlıkları
90 tick → MatchState güncelle → EventSystem ağırlıklı eylem → xG → skor
Duraklat → tick state JSON kaydı | Maç bitişi → Elo + lig puanı güncelleme

2. Takım Gücü (Maç Öncesi)

Veri kaynağı

  • Piyasa değeri (Transfermarkt) temel alınır.
  • TFF puan cetveli form ve referans için kullanılır.

Güç aralığı ve dağılım

  • Takım gücü 40–95 arasında normalize edilir (logaritmik piyasa değeri).
  • Piyasa değerinin yaklaşık %55'i hücum, %45'i savunma payına bölünür.
  • Genel güç = hücum × 0.55 + savunma × 0.45

Form çarpanı

  • Aralık: 0.90 – 1.10
  • Önce oyun içi son 5 maç puanına bakılır (G 3 · B 1 · M 0).
  • Yeterli oyun maçı yoksa gerçek Super Lig puan ortalaması kullanılır.

Ev sahibi avantajı

  • Ev sahibi hücum: ×1.10
  • Ev sahibi savunma: ×1.05

Elo rating

  • Başlangıç Elo: 1200 + (güç − 40) × 14
  • Maç bitince Elo güncellenir (K = 24, standart beklenen pay formülü).
  • Galibiyet / beraberlik / mağlubiyet sonucuna göre her iki takımın Elo'su değişir.
  • Simülasyonda Elo, efektif hücum ve savunmaya hafif bonus verir.

Maç anı efektif güç

Efektif hücum = hücum × form × Elo bonusu × taktik × (1 − yorgunluk) × kişi sayısı faktörü
Efektif savunma = savunma × form × Elo bonusu × (1 − yorgunluk) × kişi sayısı faktörü
Maç gücü = efektif hücum × 0.55 + efektif savunma × 0.45

3. Otomatik Taktik

Taktik seçimi oyuncuya bırakılmaz. Maç başında her takımın güç dengesine göre taktik otomatik atanır.

TaktikPresİlerlemeTop kaybıKontra savunmaPozisyon
Yüksek Pres×1.28×1.18×1.12×0.92×1.08
Dengeli×1.00×1.00×1.00×1.00×1.00
Kontra×0.78×0.90×0.88×1.35×1.12

Atama kuralı

  • Maç gücü farkı ≥ 6 → güçlü takım Yüksek Pres, zayıf takım Kontra
  • Fark < 6 → her iki takım Dengeli
  • Atanan taktik maç panelinde duyurulur; duraklat/devam'da sim_state ile korunur.

4. Tick Tabanlı Simülasyon

Modüller

  • MatchState — top sahibi, bölge, momentum, pres, alan kontrolü, yorgunluk, xG, şut, top tick sayacı.
  • EventSystem — her tick'te ağırlıklı eylem seçimi ve sonuç çözümü.
  • TickSimulator — oyun dakikasını tick'lere eşler (catchUpToMinute).
  • Team / Player — form, yorgunluk, rol, kaleci, yedek, kart cezası.
  • MatchEngine — tick sonuçlarını skorboard, panel ve API ile senkronize eder.

Her tick'te sıra

  1. Top tick sayacı artar (canlı top % istatistiği).
  2. Kontra boost azalır (×0.86).
  3. Pres ve alan kontrolü güncellenir.
  4. Yorgunluk artar (zincir uzadıkça daha yoğun).
  5. 60. / 75. dakikada otomatik değişiklik kontrol edilir.
  6. Bekleyen set piece varsa çözülür.
  7. Ağırlıklı eylem seçilir ve uygulanır.

MatchState alanları

AlanAçıklama
Bölgesavunma → orta saha → hücum (advance ile ilerler)
Momentum−0.85 … +0.85; gol, ilerleme ve turnover ile değişir
PresSavunma gücü / hücum gücü oranı + taktik pres çarpanı
Alan kontrolüMaç gücü payı + bölge + momentum etkisi
counterBoostHücum bölgesinde top kaybından sonra ≥1.75; chance ağırlığını artırır
pendingSetPieceBekleyen serbest vuruş veya korner pozisyonu

5. Güç Dengesi Formülleri

PHP (PowerCalculator) ve JavaScript (PowerModel) aynı formülleri kullanır.

Top payı (dominance)

pay = güç^1.22 / (güç^1.22 + (rakip × 0.50)^1.22)
Sonuç %10 – %90 aralığına sabitlenir.

Top kaybetme riski

risk = 0.32 × (rakip güç / kendi güç)^0.85 × taktik turnover çarpanı
Sonuç %6 – %58 aralığına sabitlenir.

Taban gol şansı (xG girdisi)

taban = hücum / (hücum + rakip savunma)
golTabanı = min(%40, taban × 0.52 + 0.04)

Pres profili (görsel + simülasyon)

  • Oran = savunma gücü / top sahibi hücum gücü
  • Pres yoğunluğu: 0.42 + oran × 0.24 (taktik pres çarpanı ile)
  • Pres yapan oyuncu sayısı: yaklaşık 2 – 5
  • Güçlü savunma zayıf hücum karşısında yüksek hat ve pres uygular.

Örnek: 86 güç vs 40 güç

MetrikGüçlü (86)Zayıf (40)
Top payı~%82~%18
Top kaybetme riski~%16~%58
Maç xG (tipik)~0.9+~0.03
Tipik skorör. 2–0

Gol limiti

  • Maç başına en fazla 9 gol sayılır.
  • Limite ulaşıldıktan sonra pozisyonlar gol olamaz; şut / korner olarak kalır.

6. EventSystem — Ağırlıklı Olaylar

Her tick'te olası eylemlerin ağırlıkları hesaplanır; toplam üzerinden tek eylem seçilir. Saf rastgele olay yoktur — her ağırlık güç, bölge, pres, yorgunluk, momentum ve taktikten türetilir.

EylemNe zaman artar?Skor etkisi
BuildupTurnover ve chance düşükkenÇoğunlukla panel; skor yok
AdvanceEfektif hücum yüksek, rakip savunma zayıfBölge ilerlemesi
TurnoverPres yüksek, konum hatası, güç farkıTop rakibe; hücum bölgesindeyse kontra boost
ChanceHücum bölgesi, momentum, kontra boostxG hesaplanır → gol / şut / direk / korner
FaulPres yoğunHücum bölgesindeyse set piece kuyruğu (%38)
OfsaytHücum bölgesi, çok forvetKarar doğruluğuna göre top kaybı
KartPres + yorgunlukSarı; 2. sarı = kırmızı; kırmızıda 10 kişi

Turnover ağırlığı

turnover = turnoverRisk × (0.75 + pres × 0.45) × (1 + konumHatası × 0.5)
Tavan ≈ %55

Kontra atak

  • Top hücum bölgesindeyken kaybedilirse counterBoost ≥ 1.75.
  • Sonraki tick'lerde chance ve advance ağırlığı artar.
  • Her tick'te boost ×0.86 ile azalır.

Set piece (duran top)

  • Serbest vuruş: Hücum bölgesinde faul → sonraki tick'te xG × 1.18
  • Korner: Kaçan pozisyondan korner → sonraki tick'te xG × 1.22
  • Set piece tick'inde top otomatik hücum bölgesine alınır.

7. xG ve Ciddi Pozisyon

Tetiklenme

Chance eylemi, set piece çözümü veya kontra sonrası yüksek chance ağırlığı ile ciddi pozisyon oluşturur.

xG formülü

xG = golTabanı × 0.48
     × bölge × momentum × yorgunluk × pres × alan
     × (1 + konumHatası × 0.08) × oyuncu × kaleci × setPieceMul
Tavan: 0.72
ÇarpanDeğer
BölgeSavunma 0.12 · Orta saha 0.32 · Hücum 0.88
Momentum1 ± momentum × 0.14
Yorgunluk1 − holderFatigue × 0.18
Presmin 0.55 — rakip pres arttıkça xG düşer
Alan kontrolü0.85 + spaceControl × 0.25
Oyuncu0.88 + (effectiveRating / takımGücü) × 0.12
Kalecimin 0.68 — güçlü kaleci xG'yi düşürür
Set pieceSerbest vuruş ×1.18 · Korner ×1.22

Gol ve kaçan pozisyon

  • Gol olasılığı: min(%90, xG × 0.92 × (0.72 + kararDoğruluğu × 0.36))
  • Gol olmazsa: şut %48 · direk %28 · korner %24
  • Kaçan pozisyonda xG'nin ~%65'i istatistiğe yazılır.
  • Pozisyonu atan oyuncu: forvet öncelikli ağırlıklı seçim (pickForAction).

Canlı istatistikler (skorboard altı)

  • Top % — tick bazlı top sahipliği (homePossTicks / awayPossTicks)
  • xG — birikmiş expected goals
  • Şut — chance çözümü sayısı

8. Oyuncu, Kadro ve Kartlar

Oyuncu modeli

  • Roller: kaleci, defans, orta saha, forvet — farklı hücum / savunma / teknik / fizik payları.
  • Form: takım form çarpanı oyuncuya yansır.
  • Yorgunluk: tick başına role göre artar; forvet en hızlı, kaleci en yavaş yorulur.
  • Karar doğruluğu: teknik + form − yorgunluk → gol şansında kullanılır.
  • Konum hatası: forvet en yüksek, kaleci en düşük → rakip turnover ve xG'yi etkiler.
  • Sprint kapasitesi: fizik − yorgunluk (görsel hareket hızı).

Yedek ve otomatik değişiklik

  • Her takımda 5 yedek (bench) tanımlıdır; güç ≈ ana kadronun %88'i.
  • 60. ve 75. dakikada en yorgun saha oyuncusu otomatik değişir.
  • Maç başına en fazla 3 değişiklik.
  • Devre arasında yorgunluk kısmen sıfırlanır (−0.35).

Kart sistemi

  • Kart genellikle pres yapan savunma takımına verilir.
  • Sarı kart: ikinci sarı → kırmızı.
  • Kırmızı kart: takım 10 kişi kalır; bir saha oyuncusu devre dışı.
  • Kişi sayısı faktörü: max(0.72, menOnPitch / 11) — efektif hücum ve savunmayı düşürür.
  • Kartlar kayıp süre ekler (18–40 sn oyun süresi).

9. Maç Süresi, Kayıt ve Tempo

KuralDeğer
Gerçek süre6 dakika (3 + 3 devre)
Oyun süresi90 dakika + uzatma
Simülasyon hızı1.4×
Tick1 tick = 1 oyun dakikası (90 tick)
Devre arası2 saniye gerçek süre; kadro yorgunluğu toparlanır
Gol animasyonuGOOL! overlay — slow-motion yok

Kayıp süre (uzatma)

OlayEklenen süre
Kart18–40 sn
Sakatlık (ambient)28–52 sn
Faul8–22 sn
Ofsayt5–13 sn
Korner3–9 sn
  • Devre başına biriken kayıp süre tavanı: 60 oyun saniyesi (skorboard +1 dk).
  • Gol kayıp süre eklemez.

Duraklat / devam / otomatik kayıt

  • Duraklat veya sayfadan ayrılma: skor, dakika ve sim_state JSON sunucuya kaydedilir.
  • sim_state içeriği: momentum, bölge, xG, şut, top tick, yorgunluk, kart, taktik, kadro/yedek durumu, kontra boost, set piece kuyruğu.
  • Devam edince tick motoru kaldığı yerden sürer; canvas top sahibini tick state ile senkronize eder.
  • Her ~8 saniyede otomatik kayıt (beacon) yapılır.

10. Görsel Katman (Canvas)

Maç öncesi (pregame)

  • Her takım kendi yarı sahasında; top orta noktada sabit.
  • Başlat → maç modu; forvetler ileri hatta çekilir.

Maç içi

  • Ev sahibi solda (mavi), deplasman sağda (kırmızı); kaleci sarı/turuncu ton.
  • Forvet hattı: ev ~x 0.74, deplasman ~x 0.26.
  • Top taşıyana yapışık hareket; pas animasyonlu.
  • Pas zinciri: defans → orta saha → forvet (görsel kural).
  • Tick motoru aktifken canvas kendi başına skor üretmez; rastgele pas kaybı kapalıdır.
  • Tick'te çözülen goller görselde tekrar rastgele kaleci kurtarışına tabi tutulmaz.

Saha çizgileri

  • FIFA tarzı saha: orta çizgi, orta yuvarlak, ceza sahaları, kale alanları.
  • Oyuncular minimum mesafe ile üst üste binmez.

11. Maç Akışı

  1. Giriş yap — maç oynamak için hesap zorunlu.
  2. Maçı Başlat → taktikler otomatik atanır; durum live olur.
  3. Her oyun dakikası = 1 tick; olaylar panelde akar; istatistikler güncellenir.
  4. 45' devre arası · 46' 2. devre orta vuruşu.
  5. 90 (+uzatma) maç biter.
  6. Bitiş: lig puanı, form, takım gücü ve Elo güncellenir.

Oyun içi puan

  • Galibiyet 3 · Beraberlik 1 · Mağlubiyet 0
  • Sıralama: puan → averaj → atılan gol

12. Lig ve Fikstür

  • Fikstür gerçek TFF haftalarına göre oluşturulur.
  • Başlangıç puan cetveli gerçek Super Lig verisinden gelir.
  • Geçmiş haftalar TFF gerçek skorlarıyla gösterilir; oynanamaz.
  • Yalnızca güncel TFF haftası maçları oynanabilir / tekrarlanabilir.
  • Maç tekrarında eski sonuç puan tablosundan geri alınır, yeni skor yazılır.
  • Güncel hafta, Super Lig'deki oynanan maç sayısına göre belirlenir.

Sezonu sıfırla (admin)

Tüm maçlar sıfırlanır; TFF fikstürü ve gerçek puan cetveli yeniden yüklenir.

13. Hesap ve Yetki

  • Maç simülasyonu ve tüm maç API'leri yalnızca giriş yapmış kullanıcılar içindir.
  • Admin: lig kurulumu (fikstür) ve TFF / Transfermarkt veri senkronizasyonu.
  • Normal kullanıcı: güncel hafta maçlarını oynayabilir.
  • Formlar CSRF korumalıdır; şifreler veritabanında saklanır.

14. Hızlı Referans

KonuDeğer / Kural
Güç aralığı40 – 95
Tick90 tick = 90 dk
Gol limiti9
xG tavanı0.72
Gol şansı (xG'den)min(%90, xG × 0.92 × karar çarpanı)
Elo K faktörü24
Değişiklik60' · 75' · max 3
Kontra boost≥1.75 (hücum bölgesi turnover)
Gerçek maç süresi6 dk @ 1.4× hız
Simülasyon tipiWeighted probability + state (random değil)