Atölye › Klondike Solitaire › 16/40. adım
Fareyle ya da parmakla oynamak için şu soruyu cevaplamalıyız: "(x, y) noktasında hangi yığın, hangi kart var?"
hit (vuruş) fonksiyonu yığınları tek tek deneyecek: nokta bu yığının sütununda mı, kartın içinde mi?
Önce üst sırayla (deste, açılan kartlar, temeller) başlıyoruz; sütunlar bir sonraki adımda.
```js
// Which card, or which empty pile, is at (x, y)? The card drawn last, on top, wins.
function hit(x, y) {
for (const key of Object.keys(piles)) {
const px = pileX(key)
if (x < px || x > px + CW) continue
const pile = piles[key]
if (key[0] !== 't' && y >= TOP_Y && y <= TOP_Y + CH) return { key, index: pile.length - 1 }
}
return null
}
```Object.keys(piles) → nesnenin anahtarları: ['stock', 'waste', 'f0', ...].if (x < px || x > px + CW) continue → nokta bu yığının solunda veya sağındaysa, continue döngünün bu turunu
bırakıp sıradaki yığına geçer.const pile = piles[key] → yığının kartları.if (key[0] !== 't' && y >= TOP_Y && y <= TOP_Y + CH) → && "ve": sütun değilse ve y kartın üst ile alt
kenarı arasındaysa...return { key, index: pile.length - 1 } → ...cevap: yığının adı ve üst kartın sırası. Boş yığında bu −1 olur.return null → döngü bitti, hiçbir şeye denk gelmedi. null "hiçbir şey" demek.document.addEventListener('keydown', ...) satırının üstüne yorumuyla birlikte hit fonksiyonunu yaz; aralarında
bir boş satır kalsın. Çalıştır.
Beceriler: Klavye ve fare girdisi, Çarpışma tespiti
← Desteyi yeniden kullan Sütunda bir karta dokunmak →