Atölye › Bilardo › 3/33. adım
Masadaki her top aynı türden bir nesne: yeri (x, y), hızı (vx, vy; şimdilik 0), rengi, numarası ve beyaz
isteka topu olup olmadığı. Bu nesneyi kuran küçük bir fonksiyon yazacağız: ball.
Bütün toplar tek bir dizide, balls'ta duracak; böylece fizik hepsine aynı şekilde davranabilir. Beyaz topa ayrıca
kolay ulaşmak için ona ikinci bir ad veriyoruz: cue. Bu adımda masaya yalnız isteka topunu koyuyoruz; ekranda henüz
görünmeyecek.
```js
const R = 9 // ball radius
const CUE_START = { x: 130, y: 160 }
let balls // { x, y, vx, vy, color, number, cue }
let cue
const ball = (x, y, color, number) => ({ x, y, vx: 0, vy: 0, color, number, cue: number === 0 })
function rack() {
cue = ball(CUE_START.x, CUE_START.y, '#f8fafc', 0)
balls = [cue]
}
function reset() {
rack()
}
reset()
```const R = 9 → topun yarıçapı. CUE_START → isteka topunun başlangıç noktası.let balls → bütün topların dizisi; yorum her topta hangi bilgilerin olacağını söylüyor. let cue → beyaz top.const ball = (x, y, color, number) => ({ ... }) → yeni bir top nesnesi geri veren ok fonksiyonu. Nesnenin
etrafındaki ( ) şart: onlarsız JavaScript {'i fonksiyon gövdesi sanar.{ x, y, ... color, number } → x: x, y: y yazmanın kısası: değişkenin adı anahtarın adı olur.vx: 0, vy: 0 → hız: yatay ve dikey (piksel/kare). Top duruyor.cue: number === 0 → karşılaştırmanın sonucu (true/false) doğrudan değer olur: yalnız 0 numara isteka topudur.rack() → beyaz topu yerine koy, balls dizisini onunla başlat. (Birazdan diğer topları da dizecek.)reset() → yeni bir oyun kurar; en alttaki reset() onu başta bir kez çalıştırır.const BOTTOM = 280 satırının altına R'den reset fonksiyonuna kadar yeni satırları yaz (boş satırlar kodda
görüldüğü gibi).requestAnimationFrame(loop) satırının hemen üstüne reset() yaz.Beceriler: Diziler ve nesneler, Fonksiyonlar