Atölye › Hafıza Kartları › 12/25. adım
Şu an eşler yan yana duruyor (elma, muz, ... sonra yine elma, muz...). Kartları karıştırmalıyız.
İnternette deck.sort(() => Math.random() - 0.5) gibi tek satırlık bir yöntem çok görülür ama yanlıdır: bazı
sıralar diğerlerinden sık çıkar; oyuncu eşlerin nereye düştüğünü öğrenebilir. Doğrusu Fisher–Yates: sondan başa
yürü; her konumu, kendisi ve öncekiler arasından rastgele seçilen bir konumla yer değiştir. Kâğıt destesinden sondan
başa kart çekip yer değiştirmek gibi.
```js
// Fisher–Yates: every order is equally likely.
function shuffle(items) {
for (let i = items.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1))
;[items[i], items[j]] = [items[j], items[i]]
}
return items
}
const deck = shuffle([...SYMBOLS, ...SYMBOLS])
```for (let i = items.length - 1; i > 0; i--) → i son konumdan (15) başlar; i-- her turda 1 azaltır;
i > 0 olduğu sürece sürer.Math.random() → 0 ile 1 arasında (1 hariç) rastgele bir sayı. * (i + 1) ve Math.floor ile 0 ile i arasında
rastgele bir tam sayı: j.;[items[i], items[j]] = [items[j], items[i]] → iki elemanın yerini değiştirir (takas). Baştaki ;, bu satırın
bir öncekine yapışmasını engeller; unutma.return items → karışan diziyi geri ver. Aynı dizi karıştırılır (yeni dizi yapılmaz).j'yi bütün diziden seçmek de yanlıdır; aralık i ile birlikte daralmalı.newGame içinde shuffle([...SYMBOLS, ...SYMBOLS]) → deste karıştırılarak yapılır.function newGame() { satırının üstüne yorum satırını, shuffle fonksiyonunu ve bir boş satır yaz.newGame içindeki deste satırını const deck = shuffle([...SYMBOLS, ...SYMBOLS]) yap.faceUp: false'u geçici olarak true yapabilirsin; sonra geri al.Beceriler: Diziler ve nesneler, Fonksiyonlar
← Kartın ön yüzü Bir noktada hangi kart var? →