/**
|
|
* Inisialisasi variabel global / konfigurasi
|
|
*/
|
|
var level = 1, // level awal
|
|
max_digit = 2, // digit jawaban maksimal
|
|
delay = 3, // delay dalam detik jika benar
|
|
strike, kunci, jawab; // variabel global
|
|
|
|
/**
|
|
* Main function
|
|
*/
|
|
$(function() {
|
|
|
|
/**
|
|
* Inisialisasi program
|
|
*/
|
|
strikeZero();
|
|
kunci = initialize();
|
|
|
|
/**
|
|
* Mencegah fokus keluar dari input jawaban
|
|
*/
|
|
$('#jawaban').blur(function(){
|
|
$(this).focus();
|
|
});
|
|
|
|
/**
|
|
* Cek yang diketik oleh user
|
|
*/
|
|
$("#jawaban").on('keyup', function(e) {
|
|
var string_val = $(this).val();
|
|
|
|
/**
|
|
* Menyembunyikan tanda cek jawaban jika jawaban dihapus
|
|
*/
|
|
if(string_val.length<1) {
|
|
$('#sign img').hide();
|
|
}
|
|
|
|
/**
|
|
* Memastikan jawaban tidak melebihi maksimal digit
|
|
*/
|
|
if(string_val.length>max_digit) {
|
|
$('#jawaban').val(string_val.substring(0,max_digit));
|
|
}
|
|
|
|
/**
|
|
* User menekan tombol enter
|
|
*/
|
|
if (e.keyCode === 13) {
|
|
jawab = parseInt(string_val);
|
|
|
|
/**
|
|
* Jawaban benar
|
|
*/
|
|
if(kunci==jawab) {
|
|
$('#cross-sign').hide();
|
|
$('#check-sign').show();
|
|
$('#footer').append('<img src="img/check.png">');
|
|
strike++;
|
|
|
|
setTimeout(function() {
|
|
|
|
/**
|
|
* Naik level
|
|
*/
|
|
if(strike>=rules[level-1].strike) {
|
|
level++;
|
|
strikeZero();
|
|
}
|
|
|
|
kunci = initialize();
|
|
}, (delay * 1000));
|
|
|
|
/**
|
|
* Jawaban salah
|
|
*/
|
|
} else {
|
|
$('#cross-sign').show();
|
|
strikeZero();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Ulang dari awal
|
|
*/
|
|
$(document).on('click', '#restart', function(){
|
|
location.reload();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
/**
|
|
* Fungsi inisialisasi program
|
|
* @returns {Number} kunci jawaban
|
|
*/
|
|
function initialize() {
|
|
|
|
/**
|
|
* Membuat soal
|
|
*/
|
|
var bil01 = randomInt(rules[level-1].min, rules[level-1].max),
|
|
bil02 = randomInt(rules[level-1].min, rules[level-1].max),
|
|
bil03; // kunci jawaban
|
|
|
|
/**
|
|
* Soal penjumlahan
|
|
*/
|
|
if(rules[level-1].type) {
|
|
$('#soal').text(bil01 + ' + ' + bil02 + ' = ');
|
|
bil03 = bil01 + bil02;
|
|
|
|
/**
|
|
* Soal pengurangan
|
|
*/
|
|
} else {
|
|
if(bil01<bil02) {
|
|
var tmp=bil01;bil01=bil02;bil02=tmp;
|
|
}
|
|
$('#soal').text(bil01 + ' - ' + bil02 + ' = ');
|
|
bil03 = bil01 - bil02;
|
|
}
|
|
|
|
/**
|
|
* Set tampilan awal
|
|
*/
|
|
$('#sign img').hide();
|
|
$('#level').text('Level ' + level);
|
|
$('#jawaban').focus().val('');
|
|
|
|
return bil03;
|
|
}
|
|
|
|
/**
|
|
* Fungsi mereset strike, sekaligus pengecekan level maksimal
|
|
* @returns {void}
|
|
*/
|
|
function strikeZero() {
|
|
|
|
/**
|
|
* Level maksimal
|
|
*/
|
|
if(level>rules.length) {
|
|
$('body').css('background-color', '#000');
|
|
$('#container').html('<img id="fireworks" src="img/fireworks.gif">');
|
|
$('#footer').html('<button id="restart">RESTART</button>');
|
|
level = 1;
|
|
|
|
/**
|
|
* Reset strike
|
|
*/
|
|
} else {
|
|
$('#footer').html('<div id="level">Level ' + level + '</div>');
|
|
strike = 0;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fungsi membuat angka acak
|
|
* @param {Number} min nilai minimum
|
|
* @param {Number} max nilai maksimum
|
|
* @returns {Number} nilai acak
|
|
*/
|
|
function randomInt(min, max) {
|
|
return Math.floor(Math.random() * (max - min + 1) + min);
|
|
}
|