Rabu, 30 September 2020

Agorithma Path Finding #9: Config [DRAFT]

Ini adalah pembahasan ke 9 dari seri Algorithma Path Finding. Pembahasan pertama bisa Anda baca pada tautan ini.

Pada pembahasan sebelumnya kita membahas tentang refaktoring kode sumber kita untuk persiapan pembahasan selanjutnya yang akan banyak membahas tentang variasi dalam path finding. Kita akan membuat algorithma kita lebih fleksibel dengan konfigurasi yang bisa diubah-ubah sesuai kebutuhan.

Kode sumber bisa di download disini


Anda juga bisa mencoba secara daring disini.

Bila Anda mencoba demo di atas, maka Anda akan melihat di pojok kanan atas ada menu kecil. Saat ini  pilihannya hanya ada dua: yaitu Fast dan A star. Untuk melihat perbedaan keduanya silahkan lihat pada videonya. Perilaku algorithma akan terlihat berubah pada kondisi-kondisi tertentu.

Apa yang berubah?
Perubahan pertama yang terlihat adalah adanya tambahan menu. Pembuatan menu sendiri sebenarnya bukan termasuk pembahasan dari algorithma path finding, namun diperlukan untuk membantu agar aplikasinya bisa berjalan.

Perubahan kedua adalah penambahan konfigurasi pada algorithma yang kita pakai. Dengan adanya konfigurasi ini kita tidak perlu membuat algorithma terpisah untuk masing-masing perilaku. 

Perubahan pada file PathFinder.js
function cellBuat(parent, x, y, tx, ty) {
    let cell = {
        x: x,
        y: y,
        buka: 1,
        jarak: -1,
        induk: parent,
        g: parent ? parent.g + 1 : 0
    };
    if (PF_CEPAT == pfConfig.mode) {
        cell.jarak = Math.abs(tx - x) + Math.abs(ty - y);
    }
    else if (PF_A_STAR == pfConfig.mode) {
        cell.jarak += (cell.g * 1.1);
    }
    return cell;
}

Fungsi cellBuat memiliki sedikit perubahan untuk menghitung jarak.
Pada fungsi sebelumnya jarak kita hitung dengan menghitung jarak horizontal dan vertikal. Sekarang jarak ditentukan tergantung dari modenya. Bila mode-nya adalah PF_CEPAT maka penghitungannya sama dengan sebelumnya, bila tidak maka penghitungannya ditambah dengan menambahkan faktor g.












Tidak ada komentar:

Posting Komentar