Game sederhana latihan penjumlahan dan pengurangan untuk anak TK/SD
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
3.3 KiB

  1. /**
  2. * Inisialisasi variabel global / konfigurasi
  3. */
  4. var level = 1, // level awal
  5. max_digit = 2, // digit jawaban maksimal
  6. delay = 3, // delay dalam detik jika benar
  7. strike, kunci, jawab; // variabel global
  8. /**
  9. * Main function
  10. */
  11. $(function() {
  12. /**
  13. * Inisialisasi program
  14. */
  15. strikeZero();
  16. kunci = initialize();
  17. /**
  18. * Mencegah fokus keluar dari input jawaban
  19. */
  20. $('#jawaban').blur(function(){
  21. $(this).focus();
  22. });
  23. /**
  24. * Cek yang diketik oleh user
  25. */
  26. $("#jawaban").on('keyup', function(e) {
  27. var string_val = $(this).val();
  28. /**
  29. * Menyembunyikan tanda cek jawaban jika jawaban dihapus
  30. */
  31. if(string_val.length<1) {
  32. $('#sign img').hide();
  33. }
  34. /**
  35. * Memastikan jawaban tidak melebihi maksimal digit
  36. */
  37. if(string_val.length>max_digit) {
  38. $('#jawaban').val(string_val.substring(0,max_digit));
  39. }
  40. /**
  41. * User menekan tombol enter
  42. */
  43. if (e.keyCode === 13) {
  44. jawab = parseInt(string_val);
  45. /**
  46. * Jawaban benar
  47. */
  48. if(kunci==jawab) {
  49. $('#cross-sign').hide();
  50. $('#check-sign').show();
  51. $('#footer').append('<img src="img/check.png">');
  52. strike++;
  53. setTimeout(function() {
  54. /**
  55. * Naik level
  56. */
  57. if(strike>=rules[level-1].strike) {
  58. level++;
  59. strikeZero();
  60. }
  61. kunci = initialize();
  62. }, (delay * 1000));
  63. /**
  64. * Jawaban salah
  65. */
  66. } else {
  67. $('#cross-sign').show();
  68. strikeZero();
  69. }
  70. };
  71. /**
  72. * Ulang dari awal
  73. */
  74. $(document).on('click', '#restart', function(){
  75. location.reload();
  76. });
  77. });
  78. });
  79. /**
  80. * Fungsi inisialisasi program
  81. * @returns {Number} kunci jawaban
  82. */
  83. function initialize() {
  84. /**
  85. * Membuat soal
  86. */
  87. var bil01 = randomInt(rules[level-1].min, rules[level-1].max),
  88. bil02 = randomInt(rules[level-1].min, rules[level-1].max),
  89. bil03; // kunci jawaban
  90. /**
  91. * Soal penjumlahan
  92. */
  93. if(rules[level-1].type) {
  94. $('#soal').text(bil01 + ' + ' + bil02 + ' = ');
  95. bil03 = bil01 + bil02;
  96. /**
  97. * Soal pengurangan
  98. */
  99. } else {
  100. if(bil01<bil02) {
  101. var tmp=bil01;bil01=bil02;bil02=tmp;
  102. }
  103. $('#soal').text(bil01 + ' - ' + bil02 + ' = ');
  104. bil03 = bil01 - bil02;
  105. }
  106. /**
  107. * Set tampilan awal
  108. */
  109. $('#sign img').hide();
  110. $('#level').text('Level ' + level);
  111. $('#jawaban').focus().val('');
  112. return bil03;
  113. }
  114. /**
  115. * Fungsi mereset strike, sekaligus pengecekan level maksimal
  116. * @returns {void}
  117. */
  118. function strikeZero() {
  119. /**
  120. * Level maksimal
  121. */
  122. if(level>rules.length) {
  123. $('body').css('background-color', '#000');
  124. $('#container').html('<img id="fireworks" src="img/fireworks.gif">');
  125. $('#footer').html('<button id="restart">RESTART</button>');
  126. level = 1;
  127. /**
  128. * Reset strike
  129. */
  130. } else {
  131. $('#footer').html('<div id="level">Level ' + level + '</div>');
  132. strike = 0;
  133. }
  134. }
  135. /**
  136. * Fungsi membuat angka acak
  137. * @param {Number} min nilai minimum
  138. * @param {Number} max nilai maksimum
  139. * @returns {Number} nilai acak
  140. */
  141. function randomInt(min, max) {
  142. return Math.floor(Math.random() * (max - min + 1) + min);
  143. }