@@ -83,16 +83,16 @@ var paused = false;
83
83
84
84
var inmenu = true ;
85
85
86
+ //True if Stage is Completed
87
+ var completed = false ;
88
+
86
89
87
90
for ( i = 0 ; i < bmax ; i ++ ) {
88
91
bullets [ i ] = [ ] ;
89
92
bullets [ i ] [ 4 ] = 0 ;
90
93
bullets [ i ] [ 5 ] = false ;
91
94
}
92
95
93
- //Number of enemies
94
- var enumber = 2 ;
95
-
96
96
//Enemy size
97
97
var esize = 60 ;
98
98
@@ -102,44 +102,9 @@ var espeed = 2;
102
102
//Every second the opponent can shoot
103
103
var ttshot = 2 ;
104
104
105
- var enemies = [ ] ;
106
-
107
- for ( i = 0 ; i < enumber ; i ++ ) {
108
- enemies [ i ] = [ ] ;
109
- }
110
-
111
- //Enemies[][*]
112
- //0-Current x-pos
113
- //1-y pos
114
- //2-Min x-pos
115
- //3-Max x-pos
116
- //4-Direction
117
- //**false left <---
118
- //**true right --->
119
- //5-Type of enemy
120
- //6-Time to shot
121
-
122
- enemies [ 0 ] [ 0 ] = 650 ;
123
- enemies [ 0 ] [ 1 ] = 380 ;
124
- enemies [ 0 ] [ 2 ] = 650 ;
125
- enemies [ 0 ] [ 3 ] = 810 ;
126
- enemies [ 0 ] [ 4 ] = true ;
127
- enemies [ 0 ] [ 5 ] = 0 ;
128
- enemies [ 0 ] [ 6 ] = - 1 ;
129
- enemies [ 0 ] [ 7 ] = 3 ;
130
-
131
- enemies [ 1 ] [ 0 ] = 4690 ;
132
- enemies [ 1 ] [ 1 ] = 280 ;
133
- enemies [ 1 ] [ 2 ] = 4690 ;
134
- enemies [ 1 ] [ 3 ] = 4810 ;
135
- enemies [ 1 ] [ 4 ] = true ;
136
- enemies [ 1 ] [ 5 ] = 1 ;
137
- enemies [ 1 ] [ 6 ] = 0 ;
138
- enemies [ 1 ] [ 7 ] = 2 ;
139
-
105
+ //Images
140
106
var enemyimg ;
141
107
var enemyimg2 ;
142
-
143
108
//Load Images
144
109
function preload ( ) {
145
110
enemyimg = loadImage ( './assets/enemy.png' ) ;
@@ -169,12 +134,11 @@ function menu() {
169
134
}
170
135
171
136
function game ( ) {
172
- if ( ! paused ) {
137
+ if ( ! ( completed || paused ) ) {
173
138
background ( 200 ) ;
174
139
drawObjects ( ) ;
175
140
collision ( ) ;
176
- } else pause ( ) ;
177
-
141
+ } else if ( completed ) stageCompleted ( ) ; else pause ( ) ;
178
142
}
179
143
180
144
function pause ( ) {
@@ -184,6 +148,15 @@ function pause() {
184
148
fill ( '#FFFFFF' ) ;
185
149
}
186
150
151
+ function stageCompleted ( ) {
152
+ textSize ( 50 ) ;
153
+ fill ( '#000000' ) ;
154
+ text ( "Congratulations!!!" , 500 , 100 ) ;
155
+ text ( "Level " + ( stageid + 1 ) + " Completed" , 500 , 400 ) ;
156
+ text ( "Press SPACE to Continue" , 500 , 700 ) ;
157
+ fill ( '#FFFFFF' ) ;
158
+ }
159
+
187
160
function keyboardEvent ( ) {
188
161
if ( keyIsDown ( RIGHT_ARROW ) && ! paused ) {
189
162
movex ( 1 ) ;
@@ -204,25 +177,34 @@ function keyboardEvent() {
204
177
}
205
178
206
179
function keyPressed ( ) {
180
+ //Z-JUMP
207
181
if ( keyCode === 90 && ! paused ) {
208
182
if ( ! onair ) {
209
183
jcounter = 0 ;
210
184
jumped = true ;
211
185
}
212
186
}
187
+ //X-Shoot
188
+ if ( keyCode === 88 ) {
189
+ newBullet ( - 1 ) ;
190
+ }
191
+ //SPACE
213
192
if ( keyCode === 32 ) {
214
193
if ( inmenu ) inmenu = false ;
215
194
else
216
- paused = ! paused ;
195
+ if ( completed ) {
196
+ stageid ++ ;
197
+ completed = false ;
198
+ restartGame ( ) ;
199
+ } else paused = ! paused ;
217
200
218
201
}
219
202
220
-
221
203
}
222
204
223
- function keyTyped ( ) {
224
- if ( key === 'x' ) {
225
- newBullet ( - 1 ) ;
205
+ function keyReleased ( ) {
206
+ if ( keyCode === 90 ) {
207
+ jumped = false ;
226
208
}
227
209
}
228
210
@@ -240,10 +222,11 @@ function drawPlayer() {
240
222
}
241
223
242
224
function drawPlatforms ( ) {
243
- fill ( '#0000FF' ) ;
244
- i = Math . max ( rstart - 1 , 0 ) ;
225
+ i = Math . max ( rstart - 2 , 0 ) ;
226
+
245
227
do {
246
228
if ( pposx - resx > platforms [ stageid ] [ i ] [ 0 ] ) rstart = i ;
229
+ if ( i === maxp [ stageid ] ) fill ( '#00FF00' ) ; else fill ( '#0000FF' ) ;
247
230
rect ( platforms [ stageid ] [ i ] [ 0 ] - spos , platforms [ stageid ] [ i ] [ 1 ] , platforms [ stageid ] [ i ] [ 2 ] , platforms [ stageid ] [ i ] [ 3 ] ) ;
248
231
i ++ ;
249
232
} while ( i <= maxp [ stageid ] && pposx + resx >= platforms [ stageid ] [ i ] [ 0 ] ) ;
@@ -326,7 +309,7 @@ function collision() {
326
309
327
310
328
311
// debugcollision(maxid, minid, xmaxid, xminid); //Uncomment to debug collision
329
- gravity ( maxy ) ;
312
+ gravity ( maxy , maxid ) ;
330
313
air ( maxy ) ;
331
314
if ( jumped ) jump ( ) ;
332
315
bulletsCollision ( ) ;
@@ -363,13 +346,15 @@ function debugcollision(maxid, minid, xmaxid, xminid) {
363
346
364
347
}
365
348
366
- function gravity ( maxy ) {
349
+ function gravity ( maxy , maxid ) {
367
350
368
351
if ( maxy - 1 > py + sy ) {
369
352
if ( maxy - 1 > py + sy + grav )
370
353
py += grav ;
371
354
else
372
355
py = maxy - sy - 1 ;
356
+ } else {
357
+ if ( maxid === maxp [ stageid ] ) completed = true ;
373
358
}
374
359
}
375
360
@@ -488,20 +473,20 @@ function newBullet(enumber) {
488
473
}
489
474
bullets [ i ] [ 6 ] = false ;
490
475
} else {
491
- var a = enemies [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos ;
492
- var b = enemies [ enumber ] [ 1 ] - py ;
476
+ var a = enemies [ stageid ] [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos ;
477
+ var b = enemies [ stageid ] [ enumber ] [ 1 ] - py ;
493
478
var c = Math . pow ( a , 2 ) + Math . pow ( b , 2 ) ;
494
479
var d = c / bspeed ;
495
480
bullets [ i ] [ 7 ] = Math . sqrt ( Math . pow ( a , 2 ) / d ) * 3 ;
496
481
bullets [ i ] [ 8 ] = Math . sqrt ( Math . pow ( b , 2 ) / d ) * 3 ;
497
482
498
- if ( enemies [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos > 0 && enemies [ enumber ] [ 1 ] - py > 0 ) bullets [ i ] [ 3 ] = 6 ;
499
- else if ( enemies [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos > 0 && enemies [ enumber ] [ 1 ] - py <= 0 ) bullets [ i ] [ 3 ] = 7 ;
500
- else if ( enemies [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos <= 0 && enemies [ enumber ] [ 1 ] - py > 0 ) bullets [ i ] [ 3 ] = 8 ;
501
- else if ( enemies [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos <= 0 && enemies [ enumber ] [ 1 ] - py <= 0 ) bullets [ i ] [ 3 ] = 9 ;
483
+ if ( enemies [ stageid ] [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos > 0 && enemies [ stageid ] [ enumber ] [ 1 ] - py > 0 ) bullets [ i ] [ 3 ] = 6 ;
484
+ else if ( enemies [ stageid ] [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos > 0 && enemies [ stageid ] [ enumber ] [ 1 ] - py <= 0 ) bullets [ i ] [ 3 ] = 7 ;
485
+ else if ( enemies [ stageid ] [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos <= 0 && enemies [ stageid ] [ enumber ] [ 1 ] - py > 0 ) bullets [ i ] [ 3 ] = 8 ;
486
+ else if ( enemies [ stageid ] [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos <= 0 && enemies [ stageid ] [ enumber ] [ 1 ] - py <= 0 ) bullets [ i ] [ 3 ] = 9 ;
502
487
503
- bullets [ i ] [ 0 ] = enemies [ enumber ] [ 0 ] + ( esize / 2 ) ;
504
- bullets [ i ] [ 1 ] = enemies [ enumber ] [ 1 ] ;
488
+ bullets [ i ] [ 0 ] = enemies [ stageid ] [ enumber ] [ 0 ] + ( esize / 2 ) ;
489
+ bullets [ i ] [ 1 ] = enemies [ stageid ] [ enumber ] [ 1 ] ;
505
490
bullets [ i ] [ 2 ] = bsize ;
506
491
bullets [ i ] [ 6 ] = true ;
507
492
}
@@ -523,6 +508,7 @@ function lose() {
523
508
fill ( '#FF0000' ) ;
524
509
text ( "GAME OVER" , resx / 2 , resy / 2 ) ;
525
510
fill ( '#FFFFFF' ) ;
511
+ paused = true ;
526
512
restartGame ( ) ;
527
513
}
528
514
@@ -536,39 +522,38 @@ function restartGame() {
536
522
jcounter = false ;
537
523
rstart = 0 ;
538
524
cstart = 0 ;
539
- paused = true ;
540
525
plifep = 3 ;
541
526
nodamage = false ;
542
527
ndcounter = 0 ;
543
- for ( j = 0 ; j < enumber ; j ++ ) {
544
- if ( enemies [ j ] [ 5 ] === 0 ) enemies [ j ] [ 7 ] = 3 ;
545
- else enemies [ j ] [ 7 ] = 2 ;
528
+ for ( j = 0 ; j < maxe [ stageid ] ; j ++ ) {
529
+ if ( enemies [ stageid ] [ j ] [ 5 ] === 0 ) enemies [ stageid ] [ j ] [ 7 ] = 3 ;
530
+ else enemies [ stageid ] [ j ] [ 7 ] = 2 ;
546
531
}
547
532
for ( j = 0 ; j < bmax ; j ++ ) bullets [ j ] [ 5 ] = 0 ;
548
533
}
549
534
550
535
551
536
function moveEnemies ( ) {
552
- for ( i = 0 ; i < enumber ; i ++ ) {
553
- if ( enemies [ i ] [ 7 ] > 0 ) {
537
+ for ( i = 0 ; i < maxe [ stageid ] ; i ++ ) {
538
+ if ( enemies [ stageid ] [ i ] [ 7 ] > 0 ) {
554
539
//Check enemy direction
555
- if ( enemies [ i ] [ 4 ] ) {
540
+ if ( enemies [ stageid ] [ i ] [ 4 ] ) {
556
541
//Right--->
557
- if ( enemies [ i ] [ 3 ] - enemies [ i ] [ 0 ] - esize <= espeed ) {
558
- enemies [ i ] [ 0 ] = enemies [ i ] [ 3 ] - esize ;
559
- enemies [ i ] [ 4 ] = false ;
542
+ if ( enemies [ stageid ] [ i ] [ 3 ] - enemies [ stageid ] [ i ] [ 0 ] - esize <= espeed ) {
543
+ enemies [ stageid ] [ i ] [ 0 ] = enemies [ stageid ] [ i ] [ 3 ] - esize ;
544
+ enemies [ stageid ] [ i ] [ 4 ] = false ;
560
545
} else {
561
- enemies [ i ] [ 0 ] += espeed ;
546
+ enemies [ stageid ] [ i ] [ 0 ] += espeed ;
562
547
}
563
548
564
549
}
565
550
else {
566
551
//Left <---
567
- if ( enemies [ i ] [ 0 ] - enemies [ i ] [ 2 ] <= espeed ) {
568
- enemies [ i ] [ 0 ] = enemies [ i ] [ 2 ] ;
569
- enemies [ i ] [ 4 ] = true ;
552
+ if ( enemies [ stageid ] [ i ] [ 0 ] - enemies [ stageid ] [ i ] [ 2 ] <= espeed ) {
553
+ enemies [ stageid ] [ i ] [ 0 ] = enemies [ stageid ] [ i ] [ 2 ] ;
554
+ enemies [ stageid ] [ i ] [ 4 ] = true ;
570
555
} else {
571
- enemies [ i ] [ 0 ] -= espeed ;
556
+ enemies [ stageid ] [ i ] [ 0 ] -= espeed ;
572
557
}
573
558
574
559
}
@@ -581,37 +566,37 @@ function moveEnemies() {
581
566
582
567
function drawEnemies ( ) {
583
568
fill ( 'gold' ) ;
584
- for ( i = 0 ; i < enumber ; i ++ ) {
585
- if ( enemies [ i ] [ 7 ] > 0 ) {
586
- if ( enemies [ i ] [ 5 ] === 0 ) image ( enemyimg , enemies [ i ] [ 0 ] - spos , enemies [ i ] [ 1 ] ) ;
587
- else image ( enemyimg2 , enemies [ i ] [ 0 ] - spos , enemies [ i ] [ 1 ] ) ;
569
+ for ( i = 0 ; i < maxe [ stageid ] ; i ++ ) {
570
+ if ( enemies [ stageid ] [ i ] [ 7 ] > 0 ) {
571
+ if ( enemies [ stageid ] [ i ] [ 5 ] === 0 ) image ( enemyimg , enemies [ stageid ] [ i ] [ 0 ] - spos , enemies [ stageid ] [ i ] [ 1 ] ) ;
572
+ else image ( enemyimg2 , enemies [ stageid ] [ i ] [ 0 ] - spos , enemies [ stageid ] [ i ] [ 1 ] ) ;
588
573
}
589
574
}
590
575
fill ( '#FFFFFF' ) ;
591
576
}
592
577
593
578
function damage ( ) {
594
- for ( l = 0 ; l < enumber ; l ++ ) {
595
- if ( enemies [ l ] [ 5 ] === 1 && enemies [ l ] [ 7 ] > 0 ) {
596
- if ( px + spos >= enemies [ l ] [ 0 ] - 500 && px + spos <= enemies [ l ] [ 0 ] + 500 && enemies [ l ] [ 6 ] === 0 ) {
597
- enemies [ l ] [ 6 ] ++ ;
579
+ for ( l = 0 ; l < maxe [ stageid ] ; l ++ ) {
580
+ if ( enemies [ stageid ] [ l ] [ 5 ] === 1 && enemies [ stageid ] [ l ] [ 7 ] > 0 ) {
581
+ if ( px + spos >= enemies [ stageid ] [ l ] [ 0 ] - 500 && px + spos <= enemies [ stageid ] [ l ] [ 0 ] + 500 && enemies [ stageid ] [ l ] [ 6 ] === 0 ) {
582
+ enemies [ stageid ] [ l ] [ 6 ] ++ ;
598
583
newBullet ( l ) ;
599
- } else if ( enemies [ l ] [ 6 ] > 0 && enemies [ l ] [ 6 ] < 60 * ttshot + 1 ) enemies [ l ] [ 6 ] ++ ;
600
- else if ( enemies [ l ] [ 6 ] === 60 * ttshot + 1 ) enemies [ l ] [ 6 ] = 0 ;
584
+ } else if ( enemies [ stageid ] [ l ] [ 6 ] > 0 && enemies [ stageid ] [ l ] [ 6 ] < 60 * ttshot + 1 ) enemies [ stageid ] [ l ] [ 6 ] ++ ;
585
+ else if ( enemies [ stageid ] [ l ] [ 6 ] === 60 * ttshot + 1 ) enemies [ stageid ] [ l ] [ 6 ] = 0 ;
601
586
}
602
- if ( enemies [ l ] [ 7 ] > 0 ) {
603
- if ( py <= enemies [ l ] [ 1 ] + esize - sy && py >= enemies [ l ] [ 1 ] - sy ) {
604
- if ( px >= enemies [ l ] [ 0 ] - spos - sx && px <= enemies [ l ] [ 0 ] + esize - spos ) {
587
+ if ( enemies [ stageid ] [ l ] [ 7 ] > 0 ) {
588
+ if ( py <= enemies [ stageid ] [ l ] [ 1 ] + esize - sy && py >= enemies [ stageid ] [ l ] [ 1 ] - sy ) {
589
+ if ( px >= enemies [ stageid ] [ l ] [ 0 ] - spos - sx && px <= enemies [ stageid ] [ l ] [ 0 ] + esize - spos ) {
605
590
lifePoints ( - 1 , - 1 ) ;
606
591
}
607
592
}
608
593
}
609
594
for ( j = 0 ; j < bmax ; j ++ ) {
610
- if ( enemies [ l ] [ 7 ] > 0 ) {
595
+ if ( enemies [ stageid ] [ l ] [ 7 ] > 0 ) {
611
596
if ( bullets [ j ] [ 5 ] ) {
612
597
if ( ! bullets [ j ] [ 6 ] ) {
613
- if ( bullets [ j ] [ 1 ] <= enemies [ l ] [ 1 ] + esize + bullets [ j ] [ 2 ] / 2 && bullets [ j ] [ 1 ] >= enemies [ l ] [ 1 ] - bullets [ j ] [ 2 ] / 2 ) {
614
- if ( bullets [ j ] [ 0 ] >= enemies [ l ] [ 0 ] - bullets [ j ] [ 2 ] / 2 && bullets [ j ] [ 0 ] <= enemies [ l ] [ 0 ] + esize + bullets [ j ] [ 2 ] / 2 ) {
598
+ if ( bullets [ j ] [ 1 ] <= enemies [ stageid ] [ l ] [ 1 ] + esize + bullets [ j ] [ 2 ] / 2 && bullets [ j ] [ 1 ] >= enemies [ stageid ] [ l ] [ 1 ] - bullets [ j ] [ 2 ] / 2 ) {
599
+ if ( bullets [ j ] [ 0 ] >= enemies [ stageid ] [ l ] [ 0 ] - bullets [ j ] [ 2 ] / 2 && bullets [ j ] [ 0 ] <= enemies [ stageid ] [ l ] [ 0 ] + esize + bullets [ j ] [ 2 ] / 2 ) {
615
600
bullets [ j ] [ 5 ] = false ;
616
601
lifePoints ( l , - 1 ) ;
617
602
}
@@ -640,7 +625,7 @@ function lifePoints(id, number) {
640
625
plifep += number ;
641
626
nodamage = true ;
642
627
} else if ( id >= 0 ) {
643
- enemies [ id ] [ 7 ] += number ;
628
+ enemies [ stageid ] [ id ] [ 7 ] += number ;
644
629
}
645
630
if ( plifep === 0 ) lose ( ) ;
646
631
}
@@ -655,18 +640,19 @@ function noDamage() {
655
640
}
656
641
657
642
function drawSpikes ( ) {
643
+ //TODO Optimise drawing
658
644
for ( i = 0 ; i < maxs [ stageid ] ; i ++ ) {
659
645
//DOWN
660
646
if ( spikes [ stageid ] [ i ] [ 2 ] === 0 ) triangle ( spikes [ stageid ] [ i ] [ 0 ] - spos - swidth , spikes [ stageid ] [ i ] [ 1 ] , spikes [ stageid ] [ i ] [ 0 ] - spos + swidth , spikes [ stageid ] [ i ] [ 1 ] , spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] + sheight ) ;
661
647
662
648
//UP
663
- if ( spikes [ stageid ] [ i ] [ 2 ] === 1 ) triangle ( spikes [ stageid ] [ i ] [ 0 ] - spos + swidth , spikes [ stageid ] [ i ] [ 1 ] , spikes [ stageid ] [ i ] [ 0 ] - spos - swidth , spikes [ stageid ] [ i ] [ 1 ] , spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] - sheight ) ;
649
+ else if ( spikes [ stageid ] [ i ] [ 2 ] === 1 ) triangle ( spikes [ stageid ] [ i ] [ 0 ] - spos + swidth , spikes [ stageid ] [ i ] [ 1 ] , spikes [ stageid ] [ i ] [ 0 ] - spos - swidth , spikes [ stageid ] [ i ] [ 1 ] , spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] - sheight ) ;
664
650
665
651
//LEFT
666
- if ( spikes [ stageid ] [ i ] [ 2 ] === 2 ) triangle ( spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] + swidth , spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] - swidth , spikes [ stageid ] [ i ] [ 0 ] - spos - sheight , spikes [ stageid ] [ i ] [ 1 ] ) ;
652
+ else if ( spikes [ stageid ] [ i ] [ 2 ] === 2 ) triangle ( spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] + swidth , spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] - swidth , spikes [ stageid ] [ i ] [ 0 ] - spos - sheight , spikes [ stageid ] [ i ] [ 1 ] ) ;
667
653
668
654
//RIGHT
669
- if ( spikes [ stageid ] [ i ] [ 2 ] === 3 ) triangle ( spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] - swidth , spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] + swidth , spikes [ stageid ] [ i ] [ 0 ] - spos + sheight , spikes [ stageid ] [ i ] [ 1 ] ) ;
655
+ else if ( spikes [ stageid ] [ i ] [ 2 ] === 3 ) triangle ( spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] - swidth , spikes [ stageid ] [ i ] [ 0 ] - spos , spikes [ stageid ] [ i ] [ 1 ] + swidth , spikes [ stageid ] [ i ] [ 0 ] - spos + sheight , spikes [ stageid ] [ i ] [ 1 ] ) ;
670
656
}
671
657
}
672
658
0 commit comments