BASIK adalah kumpulan perintah/fungsi javascript yang bisa dipakai sebagai media pembelajaran pengenalan koding untuk pemula. BASIK mengenalkan pemrograman kepada pemula dengan membuat aplikasi interaktif berbasis kanvas sederhana. Cocok untuk siswa, guru, atau siapa saja yang ingin belajar dasar pemrograman visual.
Prinsip-prinsip BASIK
Buka file editor.html di broser untuk memulai.
BASIK bisa dipakai dengan cara sederhana seperti berikut:
buatKanvas(800, 600);
stempel("roket");
buatKanvas() adalah perintah pertama yang berfungsi untuk memulai semua perintah BASIK. Fungsinya adalah untuk membuat kanvas tempat untuk menggambar.
stempel("roket") adalah perintah untuk men-stempel gambar ke kanvas. “roket” adalah nama file dari gambar yang ingin distempel. Perintah stempel() bisa menerima perintah berupa nama file langsung atau alamat file secara absolut. Bila dijalankan maka akan terlihat sebuah gambar roket di layar.
Pada contoh ini kita menggunakan gambar “roket” yang sudah tersedia di folder asset. Anda bisa menambahkan sendiri gambar yang dimau, atau bisa juga memuat gambar dengan url yang penuh.
perintah stempel() adalah perintah sederhana untuk menempel gambar. Perintah ini sangat terbatas fungsinya. Untuk mendapatkan fungsi yang lebih kompleks seperti memutar gambar, mengubah posisi, dll maka kita harus memuat gambar terlebih dahulu.
buatKanvas(800, 600);
let roket = muatGambar("roket");
roket.x = 400;
roket.y = 300;
roket.panjang = 90;
roket.lebar = 70;
stempel(roket);
Pada contoh di atas, kita memuat gambar terlebih dahulu, kemudian kita ubah posisi dan ukuran dari gambar tersebut dengan merubah property secara langsung, kemudian menempelkannya ke kanvas.
Kita juga bisa merubah property dengan perintah yang lebih ringkas.
buatKanvas(800, 600);
let roket = muatGambar("roket");
posisiGambar(roket, 400, 300);
ukuranGambar(roket, 90, 70);
stempel(roket);
BASIK mendukung aplikasi interaktif dan dinamis dengan menyediakan fungsi bawaan yang menangani mouse, keyboard, dan update applikasi. Untuk menangani update aplikasi, maka user harus menyediakan fungsi update() yang akan dipanggil secara otomatis saat aplikasi di update.
buatKanvas(800, 600);
let roket = muatGambar("roket");
pusatGambar(roket, 32, 46);
posisiGambar(roket, 400, 300);
function update() {
bersihkanLayar();
roket.rotasi++;
stempel(roket);
}
BASIK menyediakan fungsi bawaan untuk menangani event-event yang berhubungan dengan mouse, touch dan keyboard.
buatKanvas(800, 600);
let roket = muatGambar("roket");
pusatGambar(roket, 32, 46);
function update() {
bersihkanLayar();
roket.x = mouseX();
roket.y = mouseY();
roket.rotasi++;
stempel(roket);
}
BASIK juga menyediakan fungsi bawaan untuk menangani drag. Ada 4 tipe drag yang didukung. Memungkinkan pengguna untuk membuat aplikasi interaktif dengan mudah tanpa memikirkan struktur dan alogrithma yang rumit.
buatKanvas(800, 600);
let roket = muatGambar("roket");
pusatGambar(roket, 32, 46);
posisiGambar(roket, 400, 300);
roket.tipeDrag = 1;
function update() {
bersihkanLayar();
Tulis("");
roket.rotasi++;
stempel(roket);
}
Contoh yang lebih kompleks tersedia di halaman resmi BASIK.
stempel(url, x, y)Menstempel gambar ke layar pada posisi tertentu
Parameters
url: string atau Gambar default “kotak”url bisa diisi dengan alamat gambar yang akan di stempel atau object Gambar yang akan di stempel ke layar.url dengan type string ditujukan untuk penyederhanaan bagi pemula yang belum mengenal konsep object dengan fitur yang lebih sedikit.
Untuk fitur yang lebih kompleks seperti mengatur ukuran gambar, rotasi, dll, maka dianjurkan untuk memuat gambar terlebih dahulu dengan perintah muatGambar().x: numbery: numbervoidmuatGambar(url)Memuat gambar. Hasil dari perintah ini bisa digunakan dengan perintah stempel(), atau perintah lainnya. Dengan memuat gambar terlebih dahulu, kita akan punya lebih banyak fitur seperti mengatur panjang/lebar, rotasi, dsb.
Kita tidak perlu menunggu hingga gambar selesai di muat sepenuhnya untuk memulai operasi selanjutnya, semua di handle secara otomatis. Hal ini untuk memudahkan pemula dan menghindari perintah yang kompleks seperti event, dll.
Parameters
url: string default “kotak”Returns: Gambar
gambarTabrakan(img1: Gambar, img2: Gambar): booleanMengecek apakah dua gambar bertabrakan. Pengecekan dilakukan dengan mengecek bounding box dari kedua objek Gambar.
Pengecekan mensupport gambar yang di rotasi.
Parameters
img1: Gambar img2: Gambar Returns: boolean. bernilai true bila terjadi tabrakan, atau false bila tidak terjadi tabrakan
poinDidalamGambar(img: Gambar, x: number, y: number): booleanMengecek apakah sebuah point pada lokasi tertentu ada di dalam gambar
Parameters
img: Gambarx: numbery: numberReturns: boolean. Bernilai True bila point berada di dalam gambar
semuaGambarSelesaiDimuat(): booleanMengecek apakah semua gambar sudah selesai di muat. Gambar yang belum di muat masih bisa menerima perintah dan event.
Bila kita men-stempel gambar yang belum di muat, maka gambarnya akan terlihat setelah gambar selesai di muat.
Perintah ini diperlukan kalau kita benar-benar ingin menunggu semua gambar selesai di muat sebelum melakukan sesuatu.
Returns: boolean. Bernilai true bila semua gambar selesai dimuat.
hapusGAmbar(gbr: Gambar): voidMenghapus gambar dari memori. Gambar yang sudah dihapus tidak akan bisa menerima perintah dan akan menghasilkan error.
Parameters
gbr: GambarposisiGambar(gbr: Gambar, x:number = 0, y:number = 0):voidMengubah posisi gambar. Kita juga bisa mengubah posisi gambar secara parsial dengan mengubah property x atau y secara langsung.
Parameters
gbr: Gambarx: number, default 0y: number, default 0ukuranGambar(gbr: Gambar, p:number = 32, l:number = 32):voidMengubah ukuran gambar. Kita juga bisa mengubah ukuran gambar melalui property panjang dan lebar.
Parameters
gbr: Gambarp: number, default 32l: number, default 32
Lebar gambarPerintah-perintah yang berhubungan dengan input seperti mouse, touch, dan keyboard.
mouseDitekan():booleanMengecek apakah mouse sedang di tekan
Returns: boolean. Bernilai true bila mouse sedang ditekan
mouseDidrag(): booleanMengecek apakah mouse sedang di drag
Returns: boolean. Bernilai true bila mouse sedang di drag
mouseDragX(): numberMengembalikan berapa jarak vertikal mouse saat di drag, dihitung dari posisi awal saat drag dimulai
Returns: number. besaran drag horizontal
mouseDragY(): numberMengembalikan berapa jarak vertikal mouse saat di drag, dihitung dari posisi awal saat drag dimulai
Returns: number. besaran drag vertikal
mouseX(): numberMengembalikan posisi X dari mouse
Returns: number. posisi x dari mouse
mouseY(): numberMengembalikan posisi Y dari mouse
Returns: number. posisi y dari mouse
mouseDragAwalX(): numberPosisi awal mouse saat mulai di drag
Returns: number. posisi x saat mulai di drag
mouseDragAwalY(): numberPosisi awal mouse saat mulai di drag
Returns: number. posisi y saat mulai di drag
mouseGerakX(): numberMengembalikan pergerakan horizontal saat mouse bergerak
Returns: number. besar pergerakan horizontal saat mouse digerakkan
mouseGerakY(): numberMengembalikan pergerakan vertikal saat mouse bergerak
Returns: number. besar pergerakan vertikal saat mouse digerakkan
bukaPath(x: number = 0, y: number = 0): voidPerintah ini berfungsi untuk memulai menggambar bentuk yang kompleks.
Perintah ini di ikuti dengan perintah garisKe(), kurvaKe() dan lingkaranKe()
Parameters
x: numbery: number, default 32garisKe(x: number, y: number): voidMembuat garis ke posisi tertentu dari posisi terakhir
Parameters
x: numbery: number, default 32kurvaKe(cx: number, cy: number, x: number, y: number): voidMembuat kurva
Parameters
cx: numbercy: number, default 32x: numbery: number, default 32lingkaranKe(tx: number, ty: number, sudut: number, searahJarumJam = false)Membuat lingkaran dari posisi terakhir sebesar sudut.
Parameters
tx: numberty: numbersudut: numbersearahJarumJam: booleantutupPath()Menutup Path. Perintah ini harus dipanggil untuk mengakhiri perintah dari bukaPath().
elip(x: number = 0, y: number = 0, radiusX: number = 0, radiusY: number = 0, awal: number = 0, akhir: number = 360, searahJarumJam:boolean = false): voidMenggambar elip atau lingkaran
Parameters
x: number, default 0
posisi x dari tengah lingkarany: number, default 0
posisi y dari tengah lingkaranradiusX: number, default 32radiusY: number, default 64
radius vertikalawal: number, default 0akhir: number, default 360searahJarumJam: boolean, default falsekotak(x1: number = 10, y1: number = 10, x2: number = 100, y2: number = 100)Parameters
x: number, default 0
posisi x dari tengah lingkaranbuatKanvas(w: number = 320, h: number = 240, canvas: HTMLCanvasElement = null, mode: number = 1)Parameters
x: number, default 0
posisi x dari tengah lingkaranMembuat kanvas
bersihkanLayar(x: number = 0, y: number = 0, w: number = 0, h: number = 0)Membersihkan layar
Parameters
x: number, default 0
posisi x dari tengah lingkaranwarna(idx: number = 0, trans = 100)Mengeset warna fill
Parameters
x: number, default 0
posisi x dari tengah lingkaranwarnaGaris(idx: number, trans = 100)Mengeset warna garis
Parameters
x: number, default 0
posisi x dari tengah lingkarantebalGaris(n: number)Mengatur ketbalan garis
Parameters
x: number, default 0
posisi x dari tengah lingkaranperintah umum matematika.
akar(n = 4): numberMencari akar dari bilangan
Parameters
x: number, default 4
bilangan yang ingin dicari akarnyaReturns: number.
pi(): numberMengembalikan nilai dari Pi, (3.14 …)
Returns: number.
jarak(x: number = 0, y: number = 0): numberMenghitung jarak
Parameters
x: number, default 0
posisi x dari tengah lingkaranx: number, default 0
posisi x dari tengah lingkaranReturns: number.
jarakSudut(angleS: number = 0, angleT: number, min: boolean = true)menghitung jarak antar dua sudut
Parameters
x: number, default 0
posisi x dari tengah lingkaranReturns: number.
sudut(x: number, y: number)Menghitung sudut
Parameters
x: number, default 0
posisi x dari tengah lingkaranReturns: number.
polarX(panjang = 100, sudut = 0)Posisi X polar
Parameters
x: number, default 0
posisi x dari tengah lingkaranReturns: number.
polarY(panjang = 100, sudut = 0)Posisi Y polar
Parameters
x: number, default 0
posisi x dari tengah lingkaranReturns: number.
abs(n: number): numbermenghasilkan nilai absolute dari suatu bilangan
Parameters
n: number, default 0
bilangan yang ingin dicari nilai absolutenyaReturns: number.
normalisasiSudut(sdt: number = 0): numberMenghasilkan sudut antara 0 - 360, berguna bila ingin mengubah sudut yang lebih dari 360 atau kurang dari 0 menjadi sudut antara 0 - 360
Parameters
sdt: number, default 0
sudut yang ingin dicari nilai normalnyaReturns: number.
pembulatan(n: number, b: number = 1, type: number = 0): numberMembulatkan bilangan
Parameters
x: number, default 0
posisi x dari tengah lingkaranPerintah-perintah yang berhubungan dengan teks.
tulisMenulis sesuatu
Parameters
x: number, default 0
posisi x dari tengah lingkaranfontTeksMengatur jenis font
Parameters
x: number, default 0
posisi x dari tengah lingkaranukuranTeksMengatur ukuran teks
Parameters
x: number, default 0
posisi x dari tengah lingkaranperataanTeksMengatur perataan teks.
Parameters
x: number, default 0
posisi x dari tengah lingkarantombolDitahan(key: string = '')mengecek apakah tombol ditahan
Parameters
x: number, default 0
posisi x dari tengah lingkaranMengembalikan informasi tombol terakhir yang terlibat saat ada event keyboard
Parameters
x: number, default 0
posisi x dari tengah lingkaranGNU license