Atölye › Bilardo › 19/33. adım
Bir topun merkezi bir cebin merkezine POCKET_R'den daha çok yaklaşınca top cebe düşer. Her adımdan sonra yalnız
düşmeyen topları tutacağız.
Bir diziyi gezerken ondan eleman silmek bilinen bir hatadır: döngü silinen her elemandan sonrakini atlar. Bu yüzden
silmek yerine filter ile yeni bir dizi kuracağız.
Güzel bir ayrıntı: köşedeki top iki bant tarafından cebin 13 piksel yakınına itilir ve düşer. Orta ceplerde yalnız bir bant var; top cebe ancak yandan ~12 piksel içinde gelirse düşer. Orta cepler, gerçek masadaki gibi daha dar; bunun için hiç özel kural yazmadık.
```js
function pocketed(b) {
return POCKETS.some(([px, py]) => Math.hypot(b.x - px, b.y - py) < POCKET_R)
}
balls = balls.filter((b) => !pocketed(b))
```POCKETS.some(([px, py]) => ...) → some ("bazısı") en az bir cep için doğruysa true verir. Parametredeki [px, py]
her çifti yine iki ada ayırır.Math.hypot(b.x - px, b.y - py) < POCKET_R → topun merkezi ile cebin merkezi arasındaki uzaklık 15'ten az mı?balls = balls.filter((b) => !pocketed(b)) → filter ("süz") fonksiyonun true dediği elemanlardan yeni bir
dizi kurar: cebe girmeyen toplar. Eski dizi değişmez; balls artık yeni diziyi gösterir.collide fonksiyonunun altına bir boş satır bırak ve pocketed fonksiyonunu yaz.step'in sonunda çift döngüsü satırının altına filter satırını yaz.Beceriler: Çarpışma tespiti, Diziler ve nesneler