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.
| Taktik | Pres | İlerleme | Top kaybı | Kontra savunma | Pozisyon |
| 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
- Top tick sayacı artar (canlı top % istatistiği).
- Kontra boost azalır (×0.86).
- Pres ve alan kontrolü güncellenir.
- Yorgunluk artar (zincir uzadıkça daha yoğun).
- 60. / 75. dakikada otomatik değişiklik kontrol edilir.
- Bekleyen set piece varsa çözülür.
- Ağırlıklı eylem seçilir ve uygulanır.
MatchState alanları
| Alan | Açıklama |
| Bölge | savunma → orta saha → hücum (advance ile ilerler) |
| Momentum | −0.85 … +0.85; gol, ilerleme ve turnover ile değişir |
| Pres | Savunma gücü / hücum gücü oranı + taktik pres çarpanı |
| Alan kontrolü | Maç gücü payı + bölge + momentum etkisi |
| counterBoost | Hücum bölgesinde top kaybından sonra ≥1.75; chance ağırlığını artırır |
| pendingSetPiece | Bekleyen 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üç
| Metrik | Güç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.
| Eylem | Ne zaman artar? | Skor etkisi |
| Buildup | Turnover ve chance düşükken | Çoğunlukla panel; skor yok |
| Advance | Efektif hücum yüksek, rakip savunma zayıf | Bölge ilerlemesi |
| Turnover | Pres yüksek, konum hatası, güç farkı | Top rakibe; hücum bölgesindeyse kontra boost |
| Chance | Hücum bölgesi, momentum, kontra boost | xG hesaplanır → gol / şut / direk / korner |
| Faul | Pres yoğun | Hücum bölgesindeyse set piece kuyruğu (%38) |
| Ofsayt | Hücum bölgesi, çok forvet | Karar doğruluğuna göre top kaybı |
| Kart | Pres + yorgunluk | Sarı; 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
| Çarpan | Değer |
| Bölge | Savunma 0.12 · Orta saha 0.32 · Hücum 0.88 |
| Momentum | 1 ± momentum × 0.14 |
| Yorgunluk | 1 − holderFatigue × 0.18 |
| Pres | min 0.55 — rakip pres arttıkça xG düşer |
| Alan kontrolü | 0.85 + spaceControl × 0.25 |
| Oyuncu | 0.88 + (effectiveRating / takımGücü) × 0.12 |
| Kaleci | min 0.68 — güçlü kaleci xG'yi düşürür |
| Set piece | Serbest 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
| Kural | Değer |
| Gerçek süre | 6 dakika (3 + 3 devre) |
| Oyun süresi | 90 dakika + uzatma |
| Simülasyon hızı | 1.4× |
| Tick | 1 tick = 1 oyun dakikası (90 tick) |
| Devre arası | 2 saniye gerçek süre; kadro yorgunluğu toparlanır |
| Gol animasyonu | GOOL! overlay — slow-motion yok |
Kayıp süre (uzatma)
| Olay | Eklenen süre |
| Kart | 18–40 sn |
| Sakatlık (ambient) | 28–52 sn |
| Faul | 8–22 sn |
| Ofsayt | 5–13 sn |
| Korner | 3–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ışı
- Giriş yap — maç oynamak için hesap zorunlu.
- Maçı Başlat → taktikler otomatik atanır; durum live olur.
- Her oyun dakikası = 1 tick; olaylar panelde akar; istatistikler güncellenir.
- 45' devre arası · 46' 2. devre orta vuruşu.
- 90 (+uzatma) maç biter.
- 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
| Konu | Değer / Kural |
| Güç aralığı | 40 – 95 |
| Tick | 90 tick = 90 dk |
| Gol limiti | 9 |
| xG tavanı | 0.72 |
| Gol şansı (xG'den) | min(%90, xG × 0.92 × karar çarpanı) |
| Elo K faktörü | 24 |
| Değişiklik | 60' · 75' · max 3 |
| Kontra boost | ≥1.75 (hücum bölgesi turnover) |
| Gerçek maç süresi | 6 dk @ 1.4× hız |
| Simülasyon tipi | Weighted probability + state (random değil) |