Atölye › Candy Crush Tarzı Üçlü Eşleştirme › 22/29. adım
Bir tahtada hamle bitebilir: hiçbir takas eşleşme yapmaz ve oyuncu sonsuza kadar takılır kalır. Oyun bunu fark etmeli.
Herhangi bir hamle var mı? En basit dürüst cevap: hepsini dene. Yalnız 112 komşu çifti var (her hücre sağındaki ve altındaki komşusuyla). Her biri için takas et, bak, geri takas et. Tahta tam eski hâline döner; biz de hamle olup olmadığını ve hangisi olduğunu öğreniriz. Satranç programları da böyle düşünür: hamleyi kendi tahtasında oynar, bakar ve geri alır.
```js
// Is there any swap that would make a match? Try each one, look, and swap back.
function hasMove() {
for (let r = 0; r < N; r++) {
for (let c = 0; c < N; c++) {
for (const [dr, dc] of [[0, 1], [1, 0]]) {
if (r + dr >= N || c + dc >= N) continue
const a = { r, c }
const b = { r: r + dr, c: c + dc }
swap(a, b)
const found = findMatches().size > 0
swap(a, b)
if (found) return { a, b }
}
}
}
return null
}
```for (const [dr, dc] of [[0, 1], [1, 0]]) → findMatches'teki gibi iki yön: sağdaki ve alttaki komşu.if (r + dr >= N || c + dc >= N) continue → komşu tahtanın dışına taşıyorsa (son sütunun sağı, son satırın altı)
atla.const a = { r, c }, const b = { r: r + dr, c: c + dc } → denenecek iki hücre.swap(a, b) → dene; const found = findMatches().size > 0 → eşleşme var mı, not al; swap(a, b) → her zaman
geri al.if (found) return { a, b } → bulduysan o hamleyi döndür ({ a: a, b: b }'nin kısası).return null → hiçbir çift işe yaramadıysa: hamle yok.hasMove fonksiyonunu function trySwap(a, b) { satırının üstüne yaz; altında bir boş satır
kalsın.Beceriler: Döngüler, Oyun durumları
← Üstün altından çık Asla sıkışma →