Bloga dön

Slot makineleri nasıl programlanır: HTML5 mimarisi

Makale kapağı: Slot makineleri nasıl programlanır: HTML5 mimarisi

“Slot makineleri nasıl programlanır” diye arayın; iki tür cevap çıkar: komplo teorisi (“kasa oyunu yönetim panelinden sıkıyor”) ve klişe (“hepsi rastgele sayı üretecinden ibaret”). İkisi de bir slot geliştiricisinin gerçekte yazdığı şeyi anlatmıyor. Aşağıda modern bir HTML5 slotun mimarisi katman katman var: sonucu belirleyen sayıdan onu gösteren piksele kadar.

Katman 1: sonuç

Bir turu tek bir şey belirler: makara duruş konumları kümesi (ızgara oyunlarında sembol kümesi). Bu kararın nerede alındığı platforma bağlıdır.

  • Sunucu tarafı RNG. Klasik model. Oyun sunucusu sertifikalı bir üreteçten sayı çeker, bunları sanal şeritlerdeki duruşlara eşler, kazançları değerlendirir ve sonucu istemciye döner. İstemci bir gösterim aygıtıdır; sonuca etki edemez.
  • Önceden hesaplanmış sonuçlar. Stake Engine gibi platformların kullandığı daha yeni model. Stüdyo oyunu önceden simüle eder; olası her tur bir ağırlıkla saklanır ve sunulan tur bu kümeden çekilir. Üretim hattı değişir, mantık değişmez: girdiyi seçen yine sertifikalı bir üreteçtir.

Her iki durumda da istemci hiçbir şeye karar vermez. “Oyunu arka ofisten sıkmak” fikri bu yüzden tutmaz: getiriyi değiştirmek sertifikalı matematik yapılandırmasını değiştirmek demektir; bu da yeni build ve yeni doğrulama demektir.

Katman 2: matematik modülü

Oyunun kalbi: makara şeritleri, ödeme tablosu, özellik mantığı ve değerlendirme kodu. İyi stüdyolar bu modülü platformdan bağımsız tutar; bir kez yazılır (Python, C# veya TypeScript ile) ve üç yerde çalıştırılır: PAR tablosunu üreten simülatörde, sunucuda (ya da ön hesaplama hattında) ve yalnızca sunum için istemcide — hangi konumların vurgulanacağını bilmesi gerektiğinden. Üçü birbirinden ayrışırsa sertifikasyon düşer; modülün hash ile sürümlenip doğruluk kaynağı sayılmasının nedeni budur.

Katman 3: tur protokolü

İstemci ve sunucu küçük bir mesaj kümesi değişir: kimlik doğrulama, oyun yapılandırması (ödeme tablosu, bahis seviyeleri, bakiye), bahis, sonuç, tur sonu onayı ve özelliklerde “devam” ya da “seçim” mesajları. Sonuç yükü, istemcinin turu belirlenimci biçimde yeniden oynatması için gereken her şeyi taşır: duruşlar, konumlarıyla kazançlar, özellik adımları, öncesi ve sonrasıyla bakiye. Yeniden bağlanma protokolün parçasıdır: yeniden açılışta istemci tamamlanmamış tur var mı diye sorar ve sunumu baştan değil kayıtlı durumdan sürdürür. Laboratuvarların test ettiği tam olarak budur.

Katman 4: durum makinesi olarak istemci

HTML5 istemci, WebGL tuvali üzerine çizilmiş bir durum makinesidir. Tipik durumlar: boşta → bahis alındı → makaralar dönüyor → makaralar duruyor (beklenti efektiyle) → değerlendirme → kademeli kazanç sunumu → özellik girişi → özellik turları → özellik çıkışı → boşta. Her durum kendi animasyonlarına, seslerine ve arayüz erişimine sahiptir (makaralar dönerken bahis değiştirilemez). Alttaki motor genelde PixiJS’tir — Stake’in ön yüz SDK’sının üzerine kurulduğu aynı renderer — ya da onun üzerine yazılmış kurum içi bir katman. “Slot için Phaser mı PixiJS mi” sorusu, oyun sprite gruplarında ve shader’larda ince denetim istediğinde genellikle ikincisi lehine kapanır.

İstemcinin temel bileşenleri:

  • Makara renderer’ı — bulanıklık, sekme ve verilen konumda durabilme özellikleriyle kayan sprite şeridi; beklenti efekti, özelliğe bir sembol kala son makaraları yavaşlatır.
  • Kazanç sunucusu — hatları veya kümeleri vurgular, sembolleri kademeye göre canlandırır, tutarı sayarak çıkar ve ayarlanan eşiklerde Big / Mega / Epic ekranlarına yükselir.
  • Kaynak yükleyici — doku atlasları, sprite sheet’ler, Spine rig’leri ve ses; öncelik sırasına göre yüklenir ki büyük kazanç sahnesi inmeyi bitirmeden oyun oynanabilir olsun.
  • Ses denetleyicisi — duruma göre katmanlı müzik, beklenti stem’leri, efekt havuzu, ducking kuralları.
  • Arayüz katmanı — bahis kontrolleri, bakiye, otomatik oyun, turbo, ödeme tablosu, ayarlar ve bazı kontrolleri gizleyen ya da kısıtlayan bölgesel bayraklar.

Katman 5: performans

Bir slot, üç yaşındaki bir Android telefonda, mobil bağlantıda saniyede 60 kareyi tutmak zorundadır. Geri kalan her şeyi bu belirler: 2048 pikselin altında atlaslar, durumlar arasında paylaşılan sembol sayfaları, sınırlandırılmış parçacık sayısı, birkaç megabayta sıkıştırılmış ses ve toplam 8-12 MB’lık ilk yükleme; gerisi akışla gelir. HTML5 slot performans optimizasyonu, seçici bir platformda iki yıldız ile üç yıldız arasındaki farkı çoğu zaman burada yaratır — matematikte değil, takılan bir büyük kazanç sahnesinde. Öncelik sırasına göre slot kaynak yükleme en ucuz kaldıraçtır: oyuncu oynamaya başlarken kalan varlıklar inmeye devam eder.

Katman 6: testler

Üç tür. Matematik modülü üzerinde simülasyon testleri; milyarlarca turda RTP’yi, isabet sıklığını ve maksimum kazanç dağılımını doğrular. İstemci üzerinde işlevsel testler; her kuralı ve her uç durumu gezmek için sonuçlar zorlanır. Ve cihaz testleri: hep aynı beş giriş seviyesi telefon, kare hızı, bellek ve yükleme süresi ölçülerek.

Pratikte ne anlama geliyor

Slot programlamak, “RNG yazmak”tan çok, bir sayı ile bir animasyon arasında her halkası üçüncü tarafça doğrulanabilir bir zincir kurmaktır. Matematiğin istemci dışında durmasının, protokolün belirlenimci olmasının ve build’in hash ile dondurulmasının nedeni budur.

Bir tedarikçi değerlendiriyorsanız Stake Engine üzerinde üretimin nasıl işlediğini ve slot geliştirme maliyetinin nasıl hesaplandığını okuyun. Giro Games’te bu mimarinin tamamı — matematik, protokol, performans ve sertifikasyon build’leri — HTML5 slot geliştirme hizmetidir; Stake Engine üzerinde ya da müşterinin kendi RGS’ine karşı teslim edilir.

Okumaya devam edin

Bunlar da ilginizi çekebilir