Atölye › Bomberman Tarzı Arena › 12/42. adım
Şimdi karar kısmı. Oyuncu tam bir karenin üstündeyken (hedefi yokken) basılı son ok tuşuna bakarız: o yöndeki kare zeminse onu hedef yaparız. Sonra hedef varsa ona doğru kayarız.
Kararı ve kaymanın ilk parçasını aynı karede (frame) yapmak önemli: sonraki kareyi seçmek kendi başına bir kare sürseydi oyuncu her karede takılırdı.
```js
const walkable = (r, c) => grid[r][c] === ' '
// On a tile, the last arrow key held picks the next tile; then the player keeps sliding towards it.
function updatePlayer() {
const dir = DIRS[held[held.length - 1]]
if (!player.target && dir && walkable(player.y + dir[0], player.x + dir[1])) {
player.target = { r: player.y + dir[0], c: player.x + dir[1] }
}
if (player.target) moveTo(player, SPEED)
}
function update() {
updatePlayer()
}
function loop() {
update()
draw()
```const walkable = (r, c) => grid[r][c] === ' ' → o kareye yürünebilir mi? Şimdilik: zeminse.held[held.length - 1] → listenin son elemanı. .length eleman sayısı; sayma 0'dan başladığı için son eleman
length - 1'dedir. Liste boşsa undefined gelir.const dir = DIRS[...] → o tuşun adımı, örneğin [0, 1]; tuş yoksa undefined.if (!player.target && dir && walkable(...)) → hedef yok ve bir yön var ve o yöndeki kare yürünebilir
ise:player.target = { r: player.y + dir[0], c: player.x + dir[1] } → yandaki kare hedef olur. dir[0] satır farkı,
dir[1] sütun farkı.if (player.target) moveTo(player, SPEED) → hedef varsa bir adım kay. Hedefe varınca moveTo onu null yapar;
tuş hâlâ basılıysa sonraki karede yeni hedef seçilir.function update() { updatePlayer() } → oyunun kuralları burada toplanacak. loop önce günceller, sonra çizer.function reset() { satırının üstüne walkable satırını yaz (sonra bir boş satır).document.addEventListener('keydown', ...) satırının üstüne yorumu, updatePlayer ve update
fonksiyonlarını yaz.loop içinde draw() satırının üstüne update() yaz.Beceriler: Klavye ve fare girdisi, Oyun durumları
← Hedefe doğru kay Bomba bırak →