Browse Source

Upload files to 'js'

master
angsagd 8 months ago
parent
commit
9197aaf2e1
3 changed files with 235 additions and 0 deletions
  1. 167
    0
      js/app.js
  2. 2
    0
      js/jquery.min.js
  3. 66
    0
      js/rules.js

+ 167
- 0
js/app.js View File

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

+ 2
- 0
js/jquery.min.js
File diff suppressed because it is too large
View File


+ 66
- 0
js/rules.js View File

@@ -0,0 +1,66 @@
1
+var rules = [
2
+  // type   : 0 = pengurangan, 1 = penjumlahan
3
+  // min    : angka terkecil dalam soal
4
+  // max    : angaka terbesar dalam soal
5
+  // strike : jumlah benar berturut-turut untuk naik level
6
+  { // level 1
7
+    'type'   : 1,
8
+    'min'    : 0,
9
+    'max'    : 9,
10
+    'strike' : 5,
11
+  },
12
+  { // level 2
13
+    'type'   : 0,
14
+    'min'    : 0,
15
+    'max'    : 9,
16
+    'strike' : 5,
17
+  },
18
+  { // level 3
19
+    'type'   : 1,
20
+    'min'    : 0,
21
+    'max'    : 19,
22
+    'strike' : 5,
23
+  },
24
+  { // level 4
25
+    'type'   : 0,
26
+    'min'    : 0,
27
+    'max'    : 19,
28
+    'strike' : 5,
29
+  },
30
+  { // level 5
31
+    'type'   : 1,
32
+    'min'    : 10,
33
+    'max'    : 29,
34
+    'strike' : 5,
35
+  },
36
+  { // level 6
37
+    'type'   : 0,
38
+    'min'    : 10,
39
+    'max'    : 29,
40
+    'strike' : 5,
41
+  },
42
+  { // level 7
43
+    'type'   : 1,
44
+    'min'    : 20,
45
+    'max'    : 39,
46
+    'strike' : 5,
47
+  },
48
+  { // level 8
49
+    'type'   : 0,
50
+    'min'    : 10,
51
+    'max'    : 39,
52
+    'strike' : 5,
53
+  },
54
+  { // level 9
55
+    'type'   : 1,
56
+    'min'    : 26,
57
+    'max'    : 49,
58
+    'strike' : 5,
59
+  },
60
+  { // level 10
61
+    'type'   : 0,
62
+    'min'    : 20,
63
+    'max'    : 49,
64
+    'strike' : 5,
65
+  },
66
+];

Loading…
Cancel
Save