@@ -2,15 +2,16 @@ const THREE = require('three');
2
2
const Scene = require ( './scene' ) ;
3
3
const Brick = require ( './brick' ) ;
4
4
const Queue = require ( './queue' ) ;
5
- const socket = require ( 'socket.io-client' ) ( window . location . host ) ;
5
+ // const socket = require('socket.io-client')(window.location.host);
6
6
7
7
//==================
8
8
//--Define command--
9
9
//==================
10
10
const SPACE = 0 ;
11
11
const PLAY = 1 ;
12
12
const PAUSE = 2 ;
13
- const STOP = 3 ;
13
+ const GAMEOVER = 3 ;
14
+ const PLAYAGAIN = 4 ;
14
15
15
16
//==================
16
17
//---Inisialisasi---
@@ -20,26 +21,37 @@ let bricks = new Queue();
20
21
let brick = new Brick ( ) ;
21
22
let scale = new THREE . Vector3 ( ) ;
22
23
let position = new THREE . Vector3 ( ) ;
23
- let command , startPos = 6.5 , direction = 'x' ;
24
- let hue = 220 ;
24
+ let command = PLAY , startPos = 6.5 , direction = 'x' ;
25
+ let hue = 0 ;
26
+ let scoreValue = 0 ;
27
+ var scoreDisplay = document . getElementById ( "score" ) ;
28
+ var gameoverDisplay = document . getElementById ( "game-over" ) ;
25
29
26
30
function init ( ) {
31
+ // Mengatur parameter warna berdasarkan nilai hue-nya
32
+ hue = Math . floor ( Math . random ( ) * 360 ) ;
33
+
34
+ // Disable view gameover
35
+ gameoverDisplay . style . display = "none" ;
36
+
27
37
// Membuat tumpukan awal hingga
28
38
// bagian bawah tertutupi
29
39
for ( let i = - 14 ; i < 0 ; i ++ ) {
30
40
brick = new Brick ( {
31
41
position : new THREE . Vector3 ( 0 , i , 0 ) ,
32
- direction : 'z'
42
+ direction : 'z' ,
43
+ color : "hsl(" + hue + ", 100%, 50%)"
33
44
} ) ;
34
-
45
+
35
46
bricks . push ( brick ) ;
36
47
scene . add ( brick . build ) ;
37
48
}
38
49
39
50
// Tumpukan paling atas
40
51
brick = new Brick ( {
41
52
position : new THREE . Vector3 ( 0 , 0 , startPos ) ,
42
- direction : 'z'
53
+ direction : 'z' ,
54
+ color : "hsl(" + hue + ", 100%, 50%)"
43
55
} ) ;
44
56
45
57
bricks . push ( brick ) ;
@@ -56,18 +68,22 @@ function animate() {
56
68
}
57
69
58
70
function loop ( ) {
71
+ brick = bricks . back ( ) ;
59
72
switch ( command ) {
60
73
// Balok melakukan update
61
74
case PLAY :
62
- brick = bricks . back ( ) ;
63
75
brick . move ( ) ;
64
76
break ;
77
+
78
+ case PAUSE :
79
+ break ;
80
+
65
81
// Balok berhenti, memotong, dan stop
66
82
// sesuai kondisi
67
83
case SPACE :
68
84
brick . stop ( ) ;
69
85
prevBrick = bricks . get ( bricks . size ( ) - 2 ) ;
70
-
86
+
71
87
// Jika balok masih bisa memotong, maka loop lanjut
72
88
if ( brick . cut ( prevBrick ) ) {
73
89
bricks . set ( brick ) ;
@@ -105,25 +121,44 @@ function loop() {
105
121
// Menambahkan balok baru
106
122
// Membuang balok lama
107
123
scene . add ( topBrick . build ) ;
108
- scene . remove ( bricks . front ( ) . build ) ;
124
+ scene . remove ( bricks . front ( ) . name ) ;
109
125
bricks . pop ( ) ;
110
126
bricks . push ( topBrick ) ;
111
127
112
128
// Mengatur parameter warna agar dinamis,
113
129
// berdasarkan tingkat nilai Hue-nya.
114
130
hue = ( hue + 5 ) % 360 ;
115
131
132
+ // Update score
133
+ scoreValue ++ ;
134
+ scoreDisplay . innerHTML = scoreValue ;
135
+
116
136
// mengembalikan state menjadi play
117
137
command = PLAY ;
118
138
}
119
139
// Jika balok tidak bisa memotong (game over)
120
140
else {
121
- command = STOP ;
141
+ command = GAMEOVER ;
122
142
}
123
143
break ;
124
- case STOP :
125
-
144
+ case GAMEOVER :
145
+ // Drop semua block
146
+ for ( let i = 0 ; i < bricks . size ( ) ; i ++ )
147
+ scene . remove ( bricks . items [ i ] . name ) ;
148
+ bricks . clear ( ) ;
149
+
150
+ // Enable view gameover
151
+ gameoverDisplay . style . display = "block" ;
126
152
break ;
153
+ case PLAYAGAIN :
154
+ // re-inisialisasi semua block
155
+ init ( ) ;
156
+
157
+ // reset score
158
+ scoreValue = 0 ;
159
+ scoreDisplay . innerHTML = scoreValue ;
160
+
161
+ command = PLAY ;
127
162
default :
128
163
break ;
129
164
}
@@ -142,9 +177,17 @@ animate();
142
177
function onKeyDown ( event ) {
143
178
switch ( event . code ) {
144
179
case "Space" :
145
- command = SPACE ;
180
+ if ( command == PLAY )
181
+ command = SPACE ;
146
182
break ;
147
-
183
+ case "KeyP" :
184
+ if ( command == PLAY )
185
+ command = PAUSE ;
186
+ else if ( command == PAUSE )
187
+ command = PLAY ;
188
+ case "Enter" :
189
+ if ( command == GAMEOVER )
190
+ command = PLAYAGAIN ;
148
191
default :
149
192
break ;
150
193
}
@@ -168,7 +211,7 @@ function handleOrientation(event) {
168
211
beta : Math . round ( event . beta ) ,
169
212
gamma : Math . round ( event . gamma )
170
213
}
171
- socket . emit ( 'deviceOrientation' , orientation ) ;
214
+ // socket.emit('deviceOrientation', orientation);
172
215
}
173
216
174
217
window . addEventListener ( 'touchstart' , onTouchEvent ) ;
0 commit comments