HTML5 Down The Mountain game prototype made with Phaser – making hops more realistic
Talking about Down The Mountain game, Game development, HTML5, Javascript and Phaser.
Do you like my tutorials?
Then consider supporting me on Ko-fi.
var game;
var hexagonWidth = 70;
var hexagonHeight = 80;
var minRow = 0;
var gridSizeX = 5;
var gridSizeY = 9;
var marker;
var hexagonGroup;
var hexagonArray = [];
var cursors;
var playerCol = 2;
var playerRow = 0;
var playerMove = true;
window.onload = function() {
game = new Phaser.Game(480, 480);
game.state.add("PlayGame", playGame);
game.state.start("PlayGame");
}
var playGame = function(game){}
playGame.prototype = {
preload: function(){
game.load.image("hexagon", "hexagon.png");
game.load.image("marker", "marker.png");
},
create: function(){
hexagonGroup = game.add.group();
game.stage.backgroundColor = "#ffffff";
cursors = game.input.keyboard.createCursorKeys();
for(var i = 0; i < gridSizeY; i ++){
addHexagonRow(i);
}
hexagonGroup.x = (game.width - hexagonWidth * gridSizeX) / 2;
hexagonGroup.y = 20;
marker = game.add.sprite(hexagonGroup.width / 2, 20, "marker");
marker.anchor.setTo(0.5);
hexagonGroup.add(marker);
},
update: function(){
if(playerMove){
if(cursors.left.isDown && cursors.right.isUp && (playerCol > 0 || (playerRow % 2 == 1))){
placeMarker(playerCol - (1 - playerRow % 2), playerRow + 1);
}
if(cursors.right.isDown && cursors.left.isUp && playerCol < gridSizeX - 1){
placeMarker(playerCol + (playerRow % 2), playerRow + 1);
}
if(gridSizeY - playerRow < 8){
addHexagonRow(gridSizeY);
gridSizeY ++;
}
}
if(marker.world.y > 60){
hexagonGroup.y -= 1;
}
if(marker.world.y > 240){
hexagonGroup.y -= (marker.world.y - 240);
}
var destroyedRow = false;
for(var i = minRow; i < gridSizeY; i ++){
for(var j = 0; j < gridSizeX; j ++){
if((i % 2 == 0 || j < gridSizeX - 1) && hexagonArray[i][j].world.y < 0){
var destroyTween = game.add.tween(hexagonArray[i][j]).to({
alpha:0,
y: hexagonArray[i][j].y + hexagonHeight / 2
}, 200, Phaser.Easing.Quadratic.Out, true);
destroyTween.onComplete.add(function(e){
e.destroy();
})
destroyedRow = true;
}
}
}
if(destroyedRow){
minRow ++;
}
}
}
function placeMarker(posX, posY){
playerRow = posY;
playerCol = posX;
var nextX = hexagonWidth * (2 * posX + 1 + posY % 2) / 2;
var nextY = hexagonHeight * (3 * posY + 1) / 4;
playerMove = false;
var bezierX = hexagonWidth;
if(marker.x > nextX){
bezierX *= -1;
}
var playerTween = game.add.tween(marker).to({
x: [marker.x, marker.x + bezierX, nextX, nextX],
y: [marker.y, marker.y, nextY, nextY]
}, 500, Phaser.Easing.Quadratic.InOut, true).interpolation(function(v, k){
return Phaser.Math.bezierInterpolation(v, k);
});
playerTween.onComplete.add(function(){
playerMove = true;
});
marker.bringToTop();
}
function addHexagonRow(i){
hexagonArray[i] = [];
for(var j = 0; j < gridSizeX - i % 2; j ++){
var hexagonX = hexagonWidth * j + (hexagonWidth / 2) * (i % 2);
var hexagonY = hexagonHeight * i / 4 * 3;
var hexagon = game.add.sprite(hexagonX, hexagonY, "hexagon");
var hexagonText = game.add.text(0 + hexagonWidth / 3 + 5, 0 + 15, i + "," + j);
hexagonText.font = "arial";
hexagonText.align = "center";
hexagonText.fontSize = 10;
hexagon.addChild(hexagonText);
hexagonGroup.add(hexagon);
hexagonArray[i][j] = hexagon;
}
}
Never miss an update! Subscribe, and I will bother you by email only when a new game or full source code comes out.