Concept:
I’m trying to make sort of a version of “Super Mario” game using one player who walks along the path collecting gold coins and the game ends when it collides with the enemy. The player have to jump (using UP key) to collect coin, and there’ll be sound incorporated with each jump and coin collection. When the game is over there’ll be a screen saying “Game Over” and if the player wants to play again they can press SHIFT key and the game will start again. There’ll be a scoring system displayed on the screen too.
Difficulty/Challenges:
Challenge would be to move the sprite smoothly along the background. I want to design the background myself and make the player and enemy designs too – to make it unique. I guess collaborating all the elements of the game together to respond to the user interaction would be a challenge so that the game runs properly.
Visualization:
I want my game screen to look like this (primarily, this is not a definite design, just drawn into Procreate as I’m currently using dummy sprites only to run the game code):
Coding:
There’ll be a Player class, an Enemy class, and a Coin class. I’ve designed the basic code for collision etc. Here are some highlighted code snippets:
The Player class:
class Player { constructor() { this.playerYOnGround = 550; this.playerSize = 60; this.bgGroundHeight = 45; this.animationSlowDown = 8; this.width = 1000; this.jumpHeight = 0; this.jumpStrength = 0; this.jumpStrengthMax = 5; this.gravity = 0.1; this.jumping = false; this.playerImg = []; this.numberPlayerImg = 6; this.playerImgIndex = 0; for (let i = 1; i <= 3; i++) { this.playerImg.push(loadImage(`guy-${i}.png`)); } } initPlayer() { xpos = (this.width * 0.5) - (this.playerSize * 0.5); ypos = this.playerYOnGround; } animatePlayer() { if (this.jumping) { this.jumpStrength = (this.jumpStrength * 0.99) - this.gravity; this.jumpHeight += this.jumpStrength; if (this.jumpHeight <= 0) { this.jumping = false; this.jumpHeight = 0; this.jumpStrength = 0; } } ypos = this.playerYOnGround - this.jumpHeight; if (this.jumping) { image(this.playerImg[0], xpos, ypos); } else { image(this.playerImg[this.playerImgIndex], xpos, ypos); if (frameCount % this.animationSlowDown === 0) { this.playerImgIndex = (this.playerImgIndex + 1) % 3; } } } }
When the player collides with enemy:
if (dist(this.enemyX, this.enemyY, xpos, ypos) <= (this.playerSize / 2 + this.enemySize / 2)) { win = false; }
When the player collects coin:
if (dist(this.coinX, this.coinY, xpos, ypos) <= (this.playerSize / 2 + this.coinSize / 2)) { this.initCoin(); score += 10; }