Javascript ile Slot Makinesi
Geçenlerde Alexandrapoli’de Alexandrapouli hotel’in içindeki Casino Thraki’de “20 super hot” oynadım. Oyun hızlı kaybettirmeyen eğlenceli bir oyun. Hoşuma gittiği için javascript te oyunun bir benzerini yazmaya karar verdim.
Oyun rastgele sembollerin dizildiği 5 tane tekerlekten oluşuyor. Bu tekerlekler rastgele hızlarla dönüyor. Durduğunda her tekerlek üzerinde 3 adet sembol den oluşan 3×5 lik bir matris değerlendirmeye alınıyor. 20 adet sıralama bu matrisin içinde kontrol ediliyor ve dizilimlere göre bahisin katları kazanılıyor.
20 dizilimin 3×5 matris üzerindeki sıralamaları:
var Lines = [];
Lines[1 ]=[[1,1],[1,2],[1,3],[1,4],[1,5]];
Lines[2 ]=[[2,1],[2,2],[2,3],[2,4],[2,5]];
Lines[3 ]=[[3,1],[3,2],[3,3],[3,4],[3,5]];
Lines[4 ]=[[1,1],[2,2],[3,3],[2,4],[1,5]];
Lines[5 ]=[[3,1],[2,2],[1,3],[2,4],[3,5]];
Lines[6 ]=[[1,1],[1,2],[2,3],[3,4],[3,5]];
Lines[7 ]=[[3,1],[3,2],[2,3],[1,4],[1,5]];
Lines[8 ]=[[2,1],[1,2],[1,3],[1,4],[2,5]];
Lines[9 ]=[[2,1],[3,2],[3,3],[3,4],[2,5]];
Lines[10]=[[1,1],[2,2],[2,3],[2,4],[1,5]];
Lines[11]=[[3,1],[2,2],[2,3],[2,4],[3,5]];
Lines[12]=[[2,1],[3,2],[2,3],[1,4],[2,5]];
Lines[13]=[[2,1],[1,2],[2,3],[3,4],[2,5]];
Lines[14]=[[1,1],[2,2],[1,3],[2,4],[1,5]];
Lines[15]=[[3,1],[2,2],[3,3],[2,4],[3,5]];
Lines[16]=[[2,1],[2,2],[1,3],[2,4],[2,5]];
Lines[17]=[[2,1],[2,2],[3,3],[2,4],[2,5]];
Lines[18]=[[1,1],[3,2],[1,3],[3,4],[1,5]];
Lines[19]=[[3,1],[1,2],[3,3],[1,4],[3,5]];
Lines[20]=[[2,1],[1,2],[3,3],[1,4],[2,5]];
1. tekerleğin üstündeki sembol ile komşuları aynı olması koşulu ile 3,4,5 yanyana sembol aranıyor.
Çarpan matrisi aşağıdaki gibi.
var MeyveCarpan3 = {'bigwin':5 , 'yedi':2 , 'muz':1 , 'karpuz':1 , 'erik':1 , 'portakal':0.5, 'limon':0.5, 'kiraz':0.5};
var MeyveCarpan4 = {'bigwin':20 , 'yedi':20, 'muz':4 , 'karpuz':2 , 'erik':2 , 'portakal':1 , 'limon':1 , 'kiraz':1 };
var MeyveCarpan5 = {'bigwin':500, 'yedi':50, 'muz':20, 'karpuz':10, 'erik':10, 'portakal':5 , 'limon':5 , 'kiraz':5 };
Tekerleklerde yedi, yıldız, erik, üzüm, karpuz, portakal, limon ve kiraz var. yıldız gelmesi olasılığı en düşük olan sembol. yedi nin olasılığı yıldızdan büyük, üzüm, erik ve karpuzdan daha olasılıklı, karpuz ve erik, geri kalanlardan daha olasılıklı. 3,4 ve 5 komşu gelmesine göre katsayıları değişiyor. 1. çark dışında yedi gelir ise dizilimlerde joker olarak tüm sembollerin yerini tutuyor. yıldız sembolü yerine bigwin üzüm sembolü yerine ise muz kullandım 😀 hızı ayarlanabilir bir simülasyon. bir çok deneme yaptım, uzun vadede tamamen şansa bağlı olduğunda bile kaybedeceğiniz gerçeğini acı bir şekilde gün yüzüne çıkarıyor.
Sabitler ve değişkenler;
var KacinciEl = 1; // El sırası
var pTema = '20bkf'; //tema dizini, muz.png,yedi.png ..vb dosyalar bu klasörde
var pSembolGenislik = '130';//sembollerin boyutu
var beklemeKatsayisi= 5; //kazanç olan ellerde otomatik çevirme aktif iken beklemeKatsayisi*cevirmesüresi kadar bekler
var cevirmeSuresi = 250;//1000;// otomatik çevirmelerde milisaniye kadar bekler, tekerlek dönüş süresi aynı zamanda
var Bahis = 10; // başlangıç bahis ayarı
var Kredi = 5000; // başlangıç kredi ayarı
var ElTop = 0; // El de oluşan toplam kazanç
var pTekerlekler = []; // Tekerlekler
var hSlot = 9; // tekerlekteki eleman sayısı
var vSlot = 5; // tekerlek sayısı
var autoPlay = false; // otomatik dönüş modu
var slotDizi = []; // slot sonucunda gelen 3x5 lik matris
var slotEkran = []; // slotun ekrandaki nesneleri
slotEkran[1]=['', '#s_1_1', '#s_1_2', '#s_1_3', '#s_1_4', '#s_1_5'];
slotEkran[2]=['', '#s_9_1', '#s_9_2', '#s_9_3', '#s_9_4', '#s_9_5'];
slotEkran[3]=['', '#s_8_1', '#s_8_2', '#s_8_3', '#s_8_4', '#s_8_5'];
Tekerlek üreten fonksiyon;
function yeniMeyveSerisi(){
var pMixed = [];
var pRandomMeyve, secilenMeyve = null;
var pMeyveler = [
'bigwin','bigwin',
'yedi','yedi','yedi','yedi',
'muz','muz','muz','muz','muz',
'karpuz','karpuz','karpuz','karpuz',
'karpuz','karpuz','karpuz',
'erik','erik','erik',
'erik','erik','erik',
'portakal','portakal','portakal',
'portakal','portakal','portakal',
'portakal','portakal','portakal',
'limon','limon','limon',
'limon','limon','limon',
'limon','limon','limon',
'kiraz','kiraz','kiraz',
'kiraz','kiraz','kiraz',
'kiraz','kiraz','kiraz',
'bigwin','bigwin',
'yedi','yedi','yedi','yedi',
'muz','muz','muz','muz','muz',
'karpuz','karpuz','karpuz','karpuz',
'karpuz','karpuz','karpuz',
'erik','erik','erik',
'erik','erik','erik',
'portakal','portakal','portakal',
'portakal','portakal','portakal',
'portakal','portakal','portakal',
'limon','limon','limon',
'limon','limon','limon',
'limon','limon','limon',
'kiraz','kiraz','kiraz',
'kiraz','kiraz','kiraz',
'kiraz','kiraz','kiraz'
];//Meyveler
while (pMixed.length <= pMeyveler.length){
secilenMeyve='';
pRandomMeyve = Math.floor((Math.random() * pMeyveler.length) );
secilenMeyve = pMeyveler[pRandomMeyve];
pMeyveler.splice(pRandomMeyve,1);
if (secilenMeyve != '') pMixed.push(secilenMeyve);
}
return pMixed;
}
Dizilimleri hesaplayan fonksiyon;
function LineHesapla(LineNumara,SonucMatrixi){
var cercevelenecekHucre=[];
var LastMeyve = "";
var LineTop = 0;
var MeyveSayisi = {'bigwin':0 , 'yedi':0 , 'muz':0 , 'karpuz':0 , 'erik':0 , 'portakal':0 , 'limon':0 , 'kiraz':0 };
for (k=0;k<=Lines[LineNumara].length-1;k++){
if (LastMeyve==="")
LastMeyve = SonucMatrixi[Lines[LineNumara][k][0]][Lines[LineNumara][k][1]];
else
if (
LastMeyve != SonucMatrixi[Lines[LineNumara][k][0]][Lines[LineNumara][k][1]] &&
SonucMatrixi[Lines[LineNumara][k][0]][Lines[LineNumara][k][1]] != "yedi"
) break;
//hep ilk elemanı arttır
MeyveSayisi[SonucMatrixi[Lines[LineNumara][0][0]][Lines[LineNumara][0][1]]]++;
cercevelenecekHucre[k]=slotEkran[Lines[LineNumara][k][0]][Lines[LineNumara][k][1]];
}
for (meyve in MeyveSayisi){
if (MeyveSayisi[meyve]>=3){
for (hucre=0;hucre < cercevelenecekHucre.length;hucre++)
$(cercevelenecekHucre[hucre]).css('border', '5px solid red');
}
switch(MeyveSayisi[meyve]) {
case 3:
LineTop += MeyveCarpan3[meyve]*Bahis;
break;
case 4:
LineTop += MeyveCarpan4[meyve]*Bahis;
break;
case 5:
LineTop += MeyveCarpan4[meyve]*Bahis;
break;
}
}
return LineTop;
}