Atölye › Klondike Solitaire › 21/40. adım
Kurallar hazır; şimdi kartları taşıyan fonksiyon: tryMove (taşımayı dene). Üç şey alır: hangi yığından (from),
kaçıncı karttan başlayarak (index) ve hangi yığına (to).
Sütunda bir kartı taşırken üstündeki bütün kartlar da onunla gelir; zaten sıralı oldukları için birlikte taşınırlar. Kurallar:
canFound izin verirse;canStack izin verirse;Kural izin vermezse hiçbir şey değişmez ve cevap false olur.
```js
// Move cards from index onwards of pile `from` to pile `to`, if the rules allow it.
function tryMove(from, index, to) {
const cards = piles[from].slice(index)
if (from === to || !cards.length) return false
const allowed = to[0] === 'f' ? cards.length === 1 && canFound(cards[0], piles[to]) : to[0] === 't' && canStack(cards[0], piles[to])
if (!allowed) return false
piles[to].push(...piles[from].splice(index))
return true
}
```const cards = piles[from].slice(index) → slice(index) o karttan sona kadar olan kartların kopyası. Yığın
değişmez; yalnız bakmak için.if (from === to || !cards.length) return false → aynı yığına taşımak veya hiç kart olmaması: izin yok.const allowed = ... → uzun bir koşul işleci:to[0] === 'f' ? ... → hedef bir temelse: cards.length === 1 && canFound(...): tek kart ve kural uygun.: to[0] === 't' && canStack(...) → değilse, hedef bir sütun olmalı ve canStack uygun demeli. Deste ve
açılan kartlar ikisini de geçemez.if (!allowed) return false → izin yoksa çık.piles[from].splice(index) → kartları kaynak yığından kesip alır (kaynak kısalır).piles[to].push(...) → hedefin sonuna ekler. ... (yayma) diziyi tek tek elemanlara açar: push(...[a, b])
→ push(a, b). Onsuz hedefe tek bir dizi eklenirdi.return true → taşındı.hit fonksiyonunun yorum satırının (// Which card, or which empty pile, ...) üstüne, yorumuyla birlikte
tryMove fonksiyonunu yaz; altında bir boş satır kalsın. Çalıştır.
Beceriler: Diziler ve nesneler, Oyun durumları
← Kural 2: temele dizmek Açığa çıkan kartı çevir →