diff --git a/sketch.js b/sketch.js index b7bb97c..4a27fad 100644 --- a/sketch.js +++ b/sketch.js @@ -49,17 +49,32 @@ function setup() { enemy_head_color: color("red"), enemy_body_color: color("red"), }; - startGame((full_start = true), (update_objects = true)); + startGame(level_start = true); } -function startGame(full_start, update_objects) { +function startGame(level_start) { floorPos_y = 432; cameraPosX = 0; + // levels of depth where the character, collectable and enemies stand. groundPositions = [ floorPos_y + (height - floorPos_y) / 6, floorPos_y + (3 * (height - floorPos_y)) / 6, floorPos_y + (5 * (height - floorPos_y)) / 6, ]; - if (full_start) { + gravity = 1; + game_score = 0; + finish_position_x = 2000; + textSize(width / 20); + flagpole = { + x: finish_position_x, + isReached: false, + size_vert: 4, + size_hor: 7, + cell_size: 20, + cell_size_v: 20, + cell_size_h: 20, + }; + + if (level_start) { gameChar = { x: width / 2, y: floorPos_y + (height - floorPos_y) / 6, @@ -270,6 +285,90 @@ function startGame(full_start, update_objects) { } }, }; + // Creating trees, clouds, mountains, canyons, collectables. + { + // Creating trees, clouds, mountains, canyons, collectables, platforms, enemies. + for (i = 0; i < 150; i++) { + trees_x[i] = random(-100, 10000); + } + for (i = 0; i < 100; i++) { + clouds[i] = { + x: random(-100, 10000), + y: random(0, floorPos_y / 2), + size: random(0.4, 2), + }; + } + // Latter mountains. + for (i = 0; i < finish_position_x / 90; i++) { + mountains[i] = { + x: random(-200, finish_position_x + 200), + width: random(60, 150), + height: random(floorPos_y - 50, floorPos_y - 150), + skew: random(-20, 20), + }; + // To prevent spiky mountains which are quite ugly + mountains[i].height = max(mountains[i].width, mountains[i].height); + } + // Start mountains. + for (i = 0; i < 6; i++) { + mountains[i] = { + x: width / (i + 1.5), + width: width / (i + random(2, 4)), + height: height / (2 + 0.8 * i), + skew: (random(-10, 20) * i) / 2, + }; + } + for (i = 0; i < 100; i++) { + if (i == 0) { + canyons[0] = { + x: 700, + width: 50, + points: [], + }; + } else { + if (canyons[i - 1].x + 600 > finish_position_x) break; + canyons[i] = { + x: canyons[i - 1].x + 300 + 200 * random(0.5, 1), + width: 50 + 30 * random(), + points: [], + }; + } + } + for (i = 0; i < 100; i++) { + if (i == 0) { + collectables[0] = { + x: 600, + y: groundPositions[0], + size: 75, + isFound: false, + }; + } else { + if (collectables[i - 1].x + 200 > finish_position_x) { + break; + } + + collectables[i] = { + x: collectables[i - 1].x + 50 + 100 * random(0.5, 1), + y: groundPositions[ + floor(random(0, groundPositions.length)) + ], + size: 75, + isFound: false, + }; + // Checking whether the coin is over a canyon; + // marking it as isFound (making it disabled) in case if. + for (k = 0; k < canyons.length; k++) { + if ( + canyons[k].x - canyons[k].width / 2 < + collectables[i].x && + canyons[k].x + canyons[k].width / 2 > collectables[i].x + ) { + collectables[i].isFound = true; + } + } + } + } + } } else { gameChar.x = width / 2; gameChar.y = floorPos_y + (height - floorPos_y) / 6; @@ -280,106 +379,7 @@ function startGame(full_start, update_objects) { gameChar.isJumping = false; gameChar.isLeft = false; gameChar.isRight = false; - } - - gravity = 1; - game_score = 0; - finish_position_x = 2000; - - if (update_objects || full_start) { - // Creating trees, clouds, mountains, canyons, collectables, platforms, enemies. - for (i = 0; i < 150; i++) { - trees_x[i] = random(-100, 10000); - } - for (i = 0; i < 100; i++) { - clouds[i] = { - x: random(-100, 10000), - y: random(0, floorPos_y / 2), - size: random(0.4, 2), - }; - } - // Latter mountains. - for (i = 0; i < finish_position_x / 90; i++) { - mountains[i] = { - x: random(-200, finish_position_x + 200), - width: random(60, 150), - height: random(floorPos_y - 50, floorPos_y - 150), - skew: random(-20, 20), - }; - // To prevent spiky mountains which are quite ugly - mountains[i].height = max(mountains[i].width, mountains[i].height); - } - // Start mountains. - for (i = 0; i < 6; i++) { - mountains[i] = { - x: width / (i + 1.5), - width: width / (i + random(2, 4)), - height: height / (2 + 0.8 * i), - skew: (random(-10, 20) * i) / 2, - }; - } - for (i = 0; i < 100; i++) { - if (i == 0) { - canyons[0] = { - x: 700, - width: 50, - points: [], - }; - } else { - if (canyons[i - 1].x + 600 > finish_position_x) break; - canyons[i] = { - x: canyons[i - 1].x + 300 + 200 * random(0.5, 1), - width: 50 + 30 * random(), - points: [], - }; - } - } - for (i = 0; i < 100; i++) { - if (i == 0) { - collectables[0] = { - x: 600, - y: groundPositions[0], - size: 75, - isFound: false, - }; - } else { - if (collectables[i - 1].x + 200 > finish_position_x) { - break; - } - - collectables[i] = { - x: collectables[i - 1].x + 50 + 100 * random(0.5, 1), - y: groundPositions[ - floor(random(0, groundPositions.length)) - ], - size: 75, - isFound: false, - }; - // Checking whether the coin is over a canyon; - // marking it as isFound (making it disabled) in case if. - for (k = 0; k < canyons.length; k++) { - if ( - canyons[k].x - canyons[k].width / 2 < - collectables[i].x && - canyons[k].x + canyons[k].width / 2 > collectables[i].x - ) { - collectables[i].isFound = true; - } - } - } - } - } - flagpole = { - x: finish_position_x, - isReached: false, - size_vert: 4, - size_hor: 7, - cell_size: 20, - cell_size_v: 20, - cell_size_h: 20, - }; - text_size = width / 20; - textSize(text_size); + } } function draw() { // -------- SKY ---------------- @@ -822,7 +822,7 @@ function keyPressed() { if (gameChar.curLives < 1 || flagpole.isReached) { if (keyCode == 32 /*Space*/) { /*Hard resets the game*/ - startGame((full_start = true), (update_objects = true)); + startGame((level_start= true), ); } } else if (!gameChar.isPlummeting) { if (keyCode == 65 /*A*/) gameChar.isLeft = true;