Atölye › Bilardo › 13/33. adım

Nişan ve yuvarlanma

Ne yapıyoruz

Oyunun iki hâli var: 'aiming' (nişan alınıyor, vuruş bekleniyor) ve 'rolling' (toplar yuvarlanıyor). Şu an toplar dururken de hareket ederken de Boşluk'a basınca vuruluyor; top daha dönerken ikinci kez vurmak olmaz.

Durumu tek bir değişkende tutacağız: state. Vuruş yalnız nişan alırken olur ve durumu 'rolling' yapar. Her karede bir top hâlâ hareket ediyor mu diye bakacağız; hiçbiri hareket etmiyorsa yeniden 'aiming'.

```js
let state // 'aiming', 'rolling' or 'won'

  state = 'aiming'

function shoot() {
  if (state !== 'aiming') return
  cue.vx = Math.cos(aim) * power
  cue.vy = Math.sin(aim) * power
  state = 'rolling'
}

function update() {
  if (state !== 'rolling') return
  step()
  let moving = false
  for (const b of balls) {
    b.vx *= FRICTION
    b.vy *= FRICTION
    if (Math.hypot(b.vx, b.vy) < 0.05) b.vx = b.vy = 0
    else moving = true
  }
  if (moving) return
  state = 'aiming'
}
```

Ne işe yarıyor

Sıra sende

  1. let power satırının altına yorumuyla birlikte let state ... yaz.
  2. reset içinde power = 8 satırının altına state = 'aiming' yaz.
  3. shoot içinde en üste if (state !== 'aiming') return, en alta state = 'rolling' yaz.
  4. update içinde:
    • en üste if (state !== 'rolling') return,
    • step()'in altına let moving = false,
    • if (Math.hypot(...)) ... satırının altına else moving = true,
    • döngünün kapanan }'sinden sonra if (moving) return ve state = 'aiming'.
  5. Çalıştır, vur ve top dönerken yine Boşluk'a bas: bir şey olmamalı.

Beceriler: Oyun durumları

Tüm adımlar

  1. Oda
  2. Masa
  3. İsteka topu
  4. Topları çiz
  5. Üçgen
  6. Topların numaraları
  7. Nişan çizgisi
  8. Nişanı çevir
  9. Vuruş bir hızdır
  10. Yuvarlan
  11. Sürtünme
  12. Bantlar
  13. Nişan ve yuvarlanma
  14. Yuvarlanırken nişanı gizle
  15. Vuruşları say
  16. Değen toplar
  17. İtişi değiş tokuş et
  18. Altı cep
  19. Cebe girdi
  20. Faul
  21. Kalan toplar
  22. Masayı temizle
  23. Gücü seç
  24. Güç çubuğu
  25. Sapan
  26. Basarak nişan al
  27. Geri çek ve bırak
  28. Daha küçük adımlar
  29. Vuruşu tahmin et
  30. Hayalet topu çiz
  31. Çarpılan top nereye gider
  32. Rekorun
  33. Kendin yap: iki oyuncu