Atölye › Candy Crush Tarzı Üçlü Eşleştirme › 9/29. adım
Bir hamle iki tıklamadır: ilki bir mücevheri seçer, ikincisi eşini. İkinci tıklamanın kuralları:
İki bardaktaki suyu değiştirmek için üçüncü bir bardak gerekir; iki hücreyi değiştirmek için de bir geçici değişken.
```js
function swap(a, b) {
const gem = board[a.r][a.c]
board[a.r][a.c] = board[b.r][b.c]
board[b.r][b.c] = gem
}
function trySwap(a, b) {
if (Math.abs(a.r - b.r) + Math.abs(a.c - b.c) !== 1) return false
swap(a, b)
return true
}
if (selected && trySwap(selected, cell)) selected = null
else selected = selected && selected.r === cell.r && selected.c === cell.c ? null : cell
```function swap(a, b) { → a ve b birer hücre ({ r, c }).const gem = board[a.r][a.c] → a'daki mücevheri yedekle. Yedeklemeden a'ya yazsaydık eski değer
kaybolurdu.board[a.r][a.c] = board[b.r][b.c] → a'ya b'yi koy; board[b.r][b.c] = gem → b'ye yedeği koy.Math.abs(a.r - b.r) + Math.abs(a.c - b.c) !== 1 → Math.abs sayının eksisini atar (Math.abs(-1) = 1). Satır ve
sütun farklarının toplamı tam 1 ise komşudur; çaprazın farkı 2. !== "eşit değil": komşu değilse false ile çık.if (selected && trySwap(selected, cell)) selected = null → seçili bir şey varsa ve takas olduysa seçim biter.
&& soldaki yanlışsa sağdakini hiç çalıştırmaz: seçim yokken takas denenmez.else selected = ... ? null : cell → takas olmadıysa: tıklanan hücre seçili hücrenin aynısıysa seçimi kaldır
(null), değilse yeni seçim o.function cellAt(event) { satırının üstüne swap ve trySwap fonksiyonlarını yaz; altlarında birer boş satır
kalsın.selected = cell satırını sil; yerine iki satırı yaz.Beceriler: Klavye ve fare girdisi, Fonksiyonlar
← Seçimi göster Bütün eşleşmeleri bul →