Atölye › Bilardo › 5/33. adım
Şimdi numaralı toplar: on top, sıkıca bir üçgene dizilmiş. Ön sırada 1 top, sonra 2, 3 ve arkada 4. Yani row.
sırada row + 1 top var. Her topun kendi rengi ve numarası olacak.
Konumları iki döngüyle hesaplayacağız. Biraz geometri var ama korkma; aşağıda satır satır açıklıyoruz.
```js
const COLORS = ['#facc15', '#2563eb', '#dc2626', '#7c3aed', '#f97316', '#16a34a', '#7f1d1d', '#111827', '#0891b2', '#db2777']
// Ten balls in a triangle pointing at the cue ball: 1, 2, 3, then 4 in the back row.
function rack() {
cue = ball(CUE_START.x, CUE_START.y, '#f8fafc', 0)
balls = [cue]
let n = 0
for (let row = 0; row < 4; row++) {
for (let i = 0; i <= row; i++) {
const x = 330 + row * (R * 2 * 0.87 + 0.5)
const y = 160 + (i - row / 2) * (R * 2 + 0.5)
balls.push(ball(x, y, COLORS[n], n + 1))
n += 1
}
}
}
```COLORS → on topun renkleri, sırayla.let n = 0 → kaçıncı topu dizdiğimizi sayar: rengi COLORS[n], numarası n + 1.for (let row = 0; row < 4; row++) → dört sıra. İçteki for (let i = 0; i <= row; i++) → o sırada row + 1 top.
Toplam 1 + 2 + 3 + 4 = 10.const y = 160 + (i - row / 2) * (R * 2 + 0.5) → sıradaki toplar birer çap (2R = 18) arayla dizilir.
i - row / 2 onları masanın orta çizgisine (y = 160) ortalar: 2 toplu sırada −0.5 ve 0.5, 3 toplu sırada −1, 0, 1.const x = 330 + row * (R * 2 * 0.87 + 0.5) → sıralar arası bir çaptan biraz az: sıkı dizilmiş üçgende üç topun
merkezi eşkenar üçgen yapar; onun yüksekliği 2R × 0.87 (yani 2R × √3 / 2). Toplar iç içe geçer gibi yerleşir.+ 0.5 → minik bir boşluk: toplar tam değmesin ki ilk vuruştan önce hiçbir şey çarpışmasın.balls.push(ball(x, y, COLORS[n], n + 1)) → topu kur ve diziye ekle; n += 1 → sıradaki top.const R = 9 ... satırının altına COLORS satırını yaz (kopyalayabilirsin).function rack() { satırının üstüne yorum satırını ekle.rack içinde balls = [cue] satırının altına sayacı ve iki döngüyü yaz.Beceriler: Döngüler, Diziler ve nesneler
← Topları çiz Topların numaraları →