Atölye › Pac-Man Tarzı Labirent Kovalamaca › 13/42. adım
Yan koridora dönmek için döşeme ortasını beklemek doğru. Ama geri dönmek için beklemek yanlış: önünde bir hayalet belirdiğinde adımı bitirmeyi bekleyemezsin, hemen kaçmalısın. Geri dönüş her an mümkün: geldiğin yol zaten açık.
Hile şu: 9. döşemeden 8.'ye giden adımın 3. karesi, 8.'den 9.'a giden adımın 5. karesiyle aynı yer. O hâlde
geri dönmek = gittiğin döşemeye geç, yönü çevir, progress'i frames - progress yap. Ekrandaki yer hiç
değişmez; yalnız yön anında değişir.
```js
const reverse = (dir) => [-dir[0], -dir[1]]
// Turning around in the middle of a tile: step into the next tile and walk back the rest of the way.
function turnAround(e) {
if (e.progress === 0 || same(e.dir, STOP)) {
e.dir = reverse(e.dir)
return
}
e.col = wrap(e.col + e.dir[0])
e.row += e.dir[1]
e.dir = reverse(e.dir)
e.progress = e.frames - e.progress
}
function steer(dir) {
player.want = dir
if (same(dir, reverse(player.dir)) && !same(dir, STOP)) turnAround(player)
}
```const reverse = (dir) => [-dir[0], -dir[1]] → yönün tersi: [-1, 0] → [1, 0].if (e.progress === 0 || same(e.dir, STOP)) → döşemenin ortasındaysa ya da duruyorsa yönü çevirmek yeter.e.col = wrap(e.col + e.dir[0]), e.row += e.dir[1] → gitmekte olduğun döşemeye geç.e.dir = reverse(e.dir) → yönü çevir.e.progress = e.frames - e.progress → 8 karelik adımın 3'ü bittiyse, tersten bakınca 5'i bitmiştir.steer içindeki yeni satır → istenen yön şu anki yönün tam tersiyse (ve STOP değilse) hemen geri dön.const same = ... satırının altına reverse satırını yaz.function steer(dir) { satırının üstüne yorumu ve turnAround fonksiyonunu yaz; altında bir boş satır
kalsın.steer içinde player.want = dir satırının altına yeni satırı yaz.Beceriler: Klavye ve fare girdisi
← Döşemeler arasında kay Telefonda kaydırma →