1
+ var game = new Phaser . Game (
2
+ 320 * 1.2 ,
3
+ 568 * 1.2 ,
4
+ Phaser . AUTO ,
5
+ '' ,
6
+ { preload : preload ,
7
+ create : create ,
8
+ update : update
9
+ } ) ;
10
+
11
+ var marvin ;
12
+ var chart ;
13
+ var gateGroup ;
14
+ var gateHeight = 130 ;
15
+ var numLines = 5 ;
16
+ var gaps = game . height / ( numLines + 1 ) ;
17
+ var gateOffset = gateHeight * 2 ;
18
+ var speed = 180 ;
19
+ var ground ;
20
+ //var startOffset = game.width*2;
21
+ var startOffset = game . width * 1.5 ;
22
+ var gateFrequency = game . width / 4 * 3 ;
23
+ var gatePairs = [ ] ;
24
+ var wallColliderWidth = 5 ;
25
+ var downLineGFX ;
26
+ var lineStartX = 40 ;
27
+ var DEBUG = false ;
28
+ var climbStartOffset = gateFrequency / 10 ;
29
+ var leftMask ;
30
+ var scoreCounter ;
31
+ var score = 0 ;
32
+ var justPassedWall = null ;
33
+ var passOffset = 10 ;
34
+
35
+ var startInfoText ;
36
+
37
+ var dead = false ;
38
+ var started = false ;
39
+
40
+ var root = "file://localhost/Users/eralpkaraduman/Documents/FlappyBids" ;
41
+
42
+ function preload ( ) {
43
+ game . load . image ( 'marvin_gfx' , 'marvin.png' ) ;
44
+ game . load . image ( 'click' , 'click_flat.png' ) ;
45
+ game . load . image ( 'logo' , 'logo.png' ) ;
46
+ }
47
+
48
+ function create ( ) {
49
+
50
+ game . world . setBounds ( 0 , 0 , game . width * 3 , game . height ) ;
51
+ game . stage . backgroundColor = '#FCFCFC' ;
52
+
53
+ downLineGFX = game . add . graphics ( 0 , 0 ) ;
54
+ upLineGFX = game . add . graphics ( 0 , 0 ) ;
55
+
56
+ leftMask = game . add . graphics ( 0 , 0 ) ;
57
+ leftMask . beginFill ( 0xFCFCFC ) ;
58
+ leftMask . drawRect ( 0 , 0 , lineStartX , game . height ) ;
59
+ leftMask . endFill ( ) ;
60
+
61
+ //lines
62
+ var i = 1 ;
63
+ var lineGFX = game . add . graphics ( 0 , 0 ) ;
64
+ lineGFX . lineStyle ( 1 , 0xdddddd , 1 ) ;
65
+ for ( ; i <= numLines ; i ++ ) {
66
+
67
+ lineGFX . moveTo ( lineStartX , gaps * i ) ;
68
+ lineGFX . lineTo ( game . width , gaps * i ) ;
69
+
70
+ var l_text = - ( 0.5 * i ) + 2.5 ;
71
+ if ( l_text % 1 == 0 ) l_text += ".0"
72
+ var style = { font : "14px Arial" , fill : "#dddddd" , align : "center" } ;
73
+
74
+ var t = game . add . text ( 10 , gaps * i , l_text , style ) ;
75
+ t . anchor . setTo ( 0 , 0.5 ) ;
76
+
77
+ }
78
+
79
+ lineGFX . endFill ( ) ;
80
+
81
+ //walls
82
+ gateGroup = game . add . group ( ) ;
83
+
84
+
85
+
86
+ // marvin
87
+ marvin = game . add . sprite ( 0 , 0 , "marvin_gfx" ) ;
88
+ marvin . anchor . setTo ( 0.5 , 0.5 ) ;
89
+
90
+ marvin . y = game . height / 2 ;
91
+ marvin . x = game . width * 0.25 ;
92
+ marvin . name = "marvin" ;
93
+
94
+ ground = game . add . sprite ( 0 , game . height - gaps , "ground" ) ;
95
+ ground . width = game . width ;
96
+ ground . height = gaps ;
97
+ ground . body . immovable = true ;
98
+ if ( DEBUG == false ) {
99
+ ground . alpha = 0 ;
100
+ }
101
+
102
+ game . input . onDown . add ( onTap , this ) ;
103
+
104
+ //start info
105
+
106
+ startInfoText = game . add . sprite ( 0 , game . height - gaps , "click" ) ;
107
+ startInfoText . anchor . setTo ( 0 , 0.5 ) ;
108
+ startInfoText . x = game . width / 2 ;
109
+ startInfoText . y = game . height / 2 ;
110
+
111
+ var title_logo = game . add . sprite ( gaps / 2 + 45 , gaps / 2 , "logo" ) ;
112
+ title_logo . anchor . setTo ( 0.5 , 0.5 ) ;
113
+
114
+ var titleStyle = { font : "24px Arial" , fill : "#686B7A" , align : "left" } ;
115
+ var title_text = game . add . text ( 100 + 45 , gaps / 2 , "FLAPPY BIDS" , titleStyle ) ;
116
+ title_text . anchor . setTo ( 0 , 0.5 ) ;
117
+
118
+ var scoreCounterStyle = { font : "42px Arial" , fill : "#00CFB5" , align : "center" } ;
119
+ scoreCounter = game . add . text ( 100 + 45 , gaps / 2 , "0" , scoreCounterStyle ) ;
120
+ scoreCounter . x = game . width / 2 ;
121
+ scoreCounter . anchor . setTo ( 0.5 , 0.5 ) ;
122
+ scoreCounter . y = 150 ;
123
+
124
+ resetGame ( ) ;
125
+
126
+ }
127
+
128
+ function generateWalls ( ) {
129
+
130
+ var oldPairs = gatePairs ;
131
+ gatePairs = [ ] ;
132
+ for ( var i = 0 ; i < 3 ; i ++ )
133
+ {
134
+ var gateY = randomGateY ( ) ;
135
+
136
+ var pair ;
137
+
138
+ if ( oldPairs ) {
139
+ var oldPair = oldPairs [ i ] ;
140
+ if ( oldPair != null ) pair = oldPair ;
141
+ }
142
+
143
+ if ( oldPair != null ) {
144
+ pair = oldPair ;
145
+
146
+ pair . up . x = startOffset + gateFrequency * i ;
147
+ pair . up . y = gateY . up ;
148
+
149
+ pair . down . x = startOffset + gateFrequency * i ;
150
+ pair . down . y = gateY . down ;
151
+
152
+ } else {
153
+ pair = { } ;
154
+ pair . up = gateGroup . create ( startOffset + gateFrequency * i , gateY . up , 'gate' ) ;
155
+ pair . down = gateGroup . create ( startOffset + gateFrequency * i , gateY . down , 'gate' ) ;
156
+ }
157
+
158
+ pair . up . anchor . setTo ( 0.5 , 1 ) ;
159
+ pair . down . anchor . setTo ( 0.5 , 0 ) ;
160
+ if ( DEBUG == false ) {
161
+ pair . up . alpha = 0 ;
162
+ pair . down . alpha = 0 ;
163
+ }
164
+ pair . up . height = pair . down . height = game . height ;
165
+ pair . up . width = pair . down . width = wallColliderWidth ;
166
+ gatePairs . push ( pair ) ;
167
+ }
168
+ }
169
+
170
+ function onTap ( ) {
171
+
172
+ if ( started == false ) {
173
+ startGame ( ) ;
174
+ jump ( ) ;
175
+ return ;
176
+ }
177
+
178
+ if ( dead ) {
179
+
180
+ resetGame ( ) ;
181
+
182
+ started = false ;
183
+ return ;
184
+ }
185
+
186
+ jump ( ) ;
187
+
188
+ }
189
+
190
+ function resetGame ( ) {
191
+ generateWalls ( ) ;
192
+ resetMarvin ( ) ;
193
+ startInfoText . alpha = 1 ;
194
+ setScore ( 0 ) ;
195
+ scoreCounter . alpha = 0 ;
196
+
197
+ justPassedWall = null ;
198
+ }
199
+
200
+ function setScore ( _score ) {
201
+ score = _score ;
202
+ scoreCounter . setText ( score ) ;
203
+ }
204
+
205
+ function resetMarvin ( ) {
206
+ marvin . y = game . height / 2 ;
207
+ marvin . x = game . width * 0.25 ;
208
+ marvin . body . velocity . y = 0 ;
209
+ marvin . body . gravity . y = 0 ;
210
+ }
211
+
212
+ function jump ( ) {
213
+ marvin . body . velocity . y = - 400 ;
214
+ }
215
+
216
+ function startGame ( ) {
217
+
218
+ scoreCounter . alpha = 1 ;
219
+
220
+ startInfoText . alpha = 0 ;
221
+
222
+ marvin . body . gravity . y = 1350 ;
223
+
224
+ started = true ;
225
+ dead = false ;
226
+ }
227
+
228
+ function randomGateY ( ) {
229
+
230
+ var minY = - game . height / 5 ;
231
+ var maxY = game . height / 5 ;
232
+ var rand = Math . random ( ) * ( maxY - minY ) + minY ;
233
+
234
+ var origin = game . height / 2 + rand ;
235
+
236
+ return { up :origin - gateHeight / 2 ,
237
+ down :origin + gateHeight / 2 } ;
238
+ }
239
+
240
+ function update ( ) {
241
+ // collide?
242
+ game . physics . collide ( marvin , ground , hitWall , null , this ) ;
243
+ game . physics . overlap ( marvin , gateGroup , hitWall , null , this ) ;
244
+
245
+ // move gates
246
+ if ( ! dead && started ) {
247
+ gateGroup . forEach ( updateGaps ) ;
248
+ }
249
+
250
+ if ( gatePairs . length <= 0 ) return ;
251
+
252
+ var frontPairX = gatePairs [ 0 ] . up . x ;
253
+
254
+ if ( frontPairX + passOffset < marvin . x && gatePairs [ 0 ] . up != justPassedWall ) {
255
+ justPassedWall = gatePairs [ 0 ] . up ;
256
+ setScore ( ++ score ) ;
257
+ }
258
+
259
+ var i = 0 ;
260
+ if ( ( frontPairX - wallColliderWidth + climbStartOffset ) < 0 ) {
261
+
262
+ var newGatePairs = [ ] ;
263
+ i = 1 ;
264
+ for ( ; i < gatePairs . length ; i ++ ) {
265
+ newGatePairs . push ( gatePairs [ i ] ) ;
266
+ }
267
+ var tailPairX = gatePairs [ gatePairs . length - 1 ] . up . x ;
268
+ gatePairs [ 0 ] . up . x = gatePairs [ 0 ] . down . x = tailPairX + gateFrequency ;
269
+ var gateY = randomGateY ( ) ;
270
+ gatePairs [ 0 ] . up . y = gateY . up ;
271
+ gatePairs [ 0 ] . down . y = gateY . down ;
272
+ newGatePairs . push ( gatePairs [ 0 ] ) ;
273
+
274
+ gatePairs = newGatePairs ;
275
+ }
276
+
277
+ //draw lines
278
+ downLineGFX . clear ( ) ;
279
+ downLineGFX . lineStyle ( 1 , 0x00cfb5 , 1 ) ;
280
+ downLineGFX . moveTo ( - 10 , game . height - gaps ) ;
281
+
282
+ upLineGFX . clear ( ) ;
283
+ upLineGFX . lineStyle ( 1 , 0x00cfb5 , 1 ) ;
284
+ upLineGFX . moveTo ( - 10 , gaps ) ;
285
+
286
+ i = 0 ;
287
+ for ( ; i < gatePairs . length ; i ++ ) {
288
+ var pair = gatePairs [ i ] ;
289
+
290
+ downLineGFX . lineTo ( pair . down . x - climbStartOffset , game . height - gaps ) ;
291
+ downLineGFX . lineTo ( pair . down . x , pair . down . y ) ;
292
+ downLineGFX . lineTo ( pair . down . x + climbStartOffset , game . height - gaps ) ;
293
+
294
+ upLineGFX . lineTo ( pair . up . x - climbStartOffset , gaps ) ;
295
+ upLineGFX . lineTo ( pair . up . x , pair . up . y ) ;
296
+ upLineGFX . lineTo ( pair . up . x + climbStartOffset , gaps ) ;
297
+
298
+ }
299
+ downLineGFX . endFill ( ) ;
300
+
301
+ i = 0 ;
302
+ for ( ; i < gatePairs . length ; i ++ ) {
303
+ var pair = gatePairs [ i ] ;
304
+ downLineGFX . beginFill ( 0x00cfb5 ) ;
305
+ downLineGFX . drawCircle ( pair . down . x , pair . down . y , 5 ) ;
306
+ downLineGFX . drawCircle ( pair . up . x , pair . up . y , 5 ) ;
307
+ downLineGFX . endFill ( ) ;
308
+ }
309
+
310
+
311
+
312
+
313
+ }
314
+
315
+ function hitWall ( ) {
316
+ if ( ! started ) return ;
317
+ if ( dead ) return ;
318
+ dead = true ;
319
+
320
+
321
+
322
+ //console.log('hit');
323
+ }
324
+
325
+ function updateGaps ( gap ) {
326
+
327
+ gap . x -= ( speed * game . time . elapsed / 1000 ) ;
328
+
329
+ }
0 commit comments