Atölye › Tetris Tarzı Bloklar › 28/32. adım
Her parçayı ötekilerden bağımsız rastgele seçmek ortalamada adildir ama o anda değil. Arada bir üst üste dört S gelir ya da 30 tur boyunca uzun I hiç gelmez; oyuncu kötü oyundan değil kötü şanstan kaybeder.
Modern oyunlar 7'li torba kullanır: yedi parçanın her birinden birer tane torbaya koy, torbayı karıştır, boşalana kadar ondan dağıt; boşalınca yeniden doldur. Her parça her yedili grupta tam bir kez gelir. Sıra yine tahmin edilemez, ama kuraklık da sel de olmaz. Bir iskambil destesini karıştırıp dağıtmak gibi.
```js
let bag
bag = []
// The "7-bag": deal all seven pieces in a random order, then shuffle a new bag.
function takeFromBag() {
if (bag.length === 0) {
bag = [0, 1, 2, 3, 4, 5, 6]
for (let i = bag.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1))
;[bag[i], bag[j]] = [bag[j], bag[i]]
}
}
return SHAPES[bag.pop()].map((row) => [...row])
}
const shape = takeFromBag()
```if (bag.length === 0) { → torba boşsa (length eleman sayısı):bag = [0, 1, 2, 3, 4, 5, 6] → yedi şeklin sıra numaraları torbaya.for (let i = bag.length - 1; i > 0; i--) → sondan başa doğru sayan döngü: i 6'dan başlar, her turda i--
ile 1 azalır.const j = Math.floor(Math.random() * (i + 1)) → 0 ile i arasında rastgele bir sıra numarası.;[bag[i], bag[j]] = [bag[j], bag[i]] → i. ve j. elemanın yerini değiştir. Baştaki ; bu satırın bir
önceki satırla birleştirilip yanlış okunmasını önler; yazman gerekir.bag.pop() → torbanın son elemanını çıkarır ve verir; torba bir küçülür.SHAPES[...].map((row) => [...row]) → o şeklin kopyası, her zamanki gibi.bag = [] (newGame) → her oyun boş torbayla başlar; ilk çekişte doldurulur.let piece satırının altına let bag yaz; newGame içinde board = ... satırının altına bag = [] yaz.randomShape fonksiyonunu sil; yerine yorum satırını ve takeFromBag fonksiyonunu yaz.spawn içinde randomShape() yerine takeFromBag() yaz.Beceriler: Diziler ve nesneler, Oyun durumları
← Her seviyede daha hızlı Sıradaki parça →