You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
5.7 KiB
223 lines
5.7 KiB
8 years ago
|
(function () {
|
||
|
"use strict";
|
||
|
|
||
|
// imports
|
||
|
var CommandEnum = com.dgsprb.quick.CommandEnum;
|
||
|
var Quick = com.dgsprb.quick.Quick;
|
||
|
var GameObject = com.dgsprb.quick.GameObject;
|
||
|
var Scene = com.dgsprb.quick.Scene;
|
||
|
var BaseTransition = com.dgsprb.quick.BaseTransition;
|
||
|
var Rect = com.dgsprb.quick.Rect;
|
||
|
|
||
|
var COLUMN_WIDTH = 20; /* with of a column */
|
||
|
var COLUMN_VARIATION = 50; /* how much a column can bounce up or down */
|
||
|
var PLAYER_SPEED = 5; /* how much the player ship moves */
|
||
|
var CAVE_DECAY = 2; /* how much the cave will shrink over time */
|
||
|
var CAVE_SPEED = 2; /* how much the cave scrolls */
|
||
|
|
||
|
// functions
|
||
|
function main() {
|
||
|
Quick.setName("Skel");
|
||
|
Quick.setNumberOfLayers(2);
|
||
|
Quick.init(function () { return new GameScene() });
|
||
|
}
|
||
|
|
||
|
// class GameScene extends Scene
|
||
|
var GameScene = (function () {
|
||
|
function GameScene() {
|
||
|
Scene.call(this);
|
||
|
var background = new Background();
|
||
|
this.add(background);
|
||
|
this.player = new Player();
|
||
|
this.cave = [];
|
||
|
var pos = 0;
|
||
|
var previous = null;
|
||
|
while (pos < Quick.getCanvasWidth() + COLUMN_WIDTH) {
|
||
|
var wall = new Column(previous);
|
||
|
wall.setRight(Quick.getCanvasWidth() + pos);
|
||
|
pos += COLUMN_WIDTH;
|
||
|
this.cave.push(wall);
|
||
|
this.add(wall);
|
||
|
previous = wall;
|
||
|
}
|
||
|
|
||
|
this.player.setLayerIndex(1);
|
||
|
this.add(this.player);
|
||
|
}; GameScene.prototype = Object.create(Scene.prototype);
|
||
|
|
||
|
GameScene.prototype.getNext = function () {
|
||
|
return new GameScene();
|
||
|
};
|
||
|
|
||
|
GameScene.prototype.getTransition = function () {
|
||
|
return new BaseTransition();
|
||
|
};
|
||
|
|
||
|
GameScene.prototype.popWall = function () {
|
||
|
this.cave.shift();
|
||
|
};
|
||
|
|
||
|
GameScene.prototype.addWall = function (wall) {
|
||
|
this.cave.push(wall);
|
||
|
this.add(wall);
|
||
|
};
|
||
|
|
||
|
GameScene.prototype.gameOver = function () {
|
||
|
this.cave.forEach(function(elem, idx, array) {
|
||
|
elem.stop();
|
||
|
elem.top.stop();
|
||
|
elem.bottom.stop();
|
||
|
});
|
||
|
};
|
||
|
|
||
|
GameScene.prototype.speedUp = function () {
|
||
|
this.cave.forEach(function(elem, idx, array) {
|
||
|
elem.setSpeedX(-(CAVE_SPEED * 2));
|
||
|
});
|
||
|
};
|
||
|
|
||
|
GameScene.prototype.speedDown = function () {
|
||
|
this.cave.forEach(function(elem, idx, array) {
|
||
|
elem.setSpeedX(-CAVE_SPEED);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
return GameScene;
|
||
|
})();
|
||
|
|
||
|
// class Background extends GameObject
|
||
|
var Background = (function () {
|
||
|
function Background() {
|
||
|
GameObject.call(this);
|
||
|
this.setColor("#101");
|
||
|
this.setHeight(Quick.getCanvasHeight());
|
||
|
this.setWidth(Quick.getCanvasWidth());
|
||
|
}; Background.prototype = Object.create(GameObject.prototype);
|
||
|
|
||
|
return Background;
|
||
|
})();
|
||
|
|
||
|
var Cave = (function () {
|
||
|
function Cave() {
|
||
|
GameObject.call(this);
|
||
|
this.addTag('cave');
|
||
|
this.setColor('#600613')
|
||
|
this.setHeight(Quick.getCanvasHeight());
|
||
|
this.setSolid();
|
||
|
}; Cave.prototype = Object.create(GameObject.prototype);
|
||
|
|
||
|
return Cave;
|
||
|
})();
|
||
|
|
||
|
var Column = (function () {
|
||
|
function Column (previous) {
|
||
|
GameObject.call(this);
|
||
|
var top,
|
||
|
height;
|
||
|
if (previous) {
|
||
|
var top = previous.getTop() + (Quick.random(COLUMN_VARIATION) - (COLUMN_VARIATION / 2));
|
||
|
if (top < 0) {
|
||
|
top = 0;
|
||
|
}
|
||
|
height = previous.getHeight() - CAVE_DECAY;
|
||
|
if (height < 32) {
|
||
|
height = 32;
|
||
|
}
|
||
|
} else {
|
||
|
top = Quick.random(Quick.getCanvasHeight() / 4);
|
||
|
height = Quick.getCanvasHeight() / 2;
|
||
|
}
|
||
|
|
||
|
this.addTag('column');
|
||
|
this.setHeight(height);
|
||
|
this.setTop(top);
|
||
|
this.setWidth(COLUMN_WIDTH);
|
||
|
this.setColor('#1a1a1a');
|
||
|
this.setLeft(Quick.getCanvasRight());
|
||
|
this.setSpeedX(-CAVE_SPEED);
|
||
|
this.setBoundary(new Rect(Quick.getCanvasWidth() % COLUMN_WIDTH, 0,
|
||
|
Quick.getCanvasWidth() * 2, Quick.getCanvasHeight()));
|
||
|
}; Column.prototype = Object.create(GameObject.prototype);
|
||
|
|
||
|
Column.prototype.init = function () {
|
||
|
this.top = new Cave();
|
||
|
this.top.setBottom(this.getTop() - 1);
|
||
|
this.top.setSpeedX(this.getSpeedX());
|
||
|
this.top.setWidth(this.getWidth());
|
||
|
this.top.setLeft(this.getLeft());
|
||
|
this.top.setSolid();
|
||
|
this.top.addTag('cave');
|
||
|
this.getScene().add(this.top);
|
||
|
|
||
|
this.bottom = new Cave();
|
||
|
this.bottom.setTop(this.getBottom() + 1);
|
||
|
this.bottom.setSpeedX(this.getSpeedX());
|
||
|
this.bottom.setWidth(this.getWidth());
|
||
|
this.bottom.setLeft(this.getLeft());
|
||
|
this.bottom.setSolid();
|
||
|
this.bottom.addTag('cave');
|
||
|
this.getScene().add(this.bottom);
|
||
|
};
|
||
|
|
||
|
Column.prototype.offBoundary = function () {
|
||
|
this.expire();
|
||
|
this.top.expire();
|
||
|
this.bottom.expire();
|
||
|
this.getScene().addWall(new Column(this));
|
||
|
this.getScene().popWall();
|
||
|
this.getScene().player.upScore();
|
||
|
};
|
||
|
|
||
|
return Column;
|
||
|
})();
|
||
|
|
||
|
// class Player extends GameObject
|
||
|
var Player = (function () {
|
||
|
function Player() {
|
||
|
GameObject.call(this);
|
||
|
this.controller = Quick.getController();
|
||
|
this.setImageId("ship");
|
||
|
this.setX(50);
|
||
|
this.setY(Quick.getCanvasHeight() / 2);
|
||
|
this.setSolid();
|
||
|
this.isDead = false;
|
||
|
this.score = 0;
|
||
|
}; Player.prototype = Object.create(GameObject.prototype);
|
||
|
|
||
|
Player.prototype.respond = function () {
|
||
|
if (!this.isDead) {
|
||
|
if (this.controller.keyDown(CommandEnum.UP) && this.getTop() > 0) {
|
||
|
this.moveY(-PLAYER_SPEED);
|
||
|
} else if (this.controller.keyDown(CommandEnum.DOWN) && this.getBottom() < Quick.getCanvasHeight()) {
|
||
|
this.moveY(PLAYER_SPEED);
|
||
|
} else if (this.controller.keyPush(CommandEnum.RIGHT)) {
|
||
|
this.getScene().speedUp();
|
||
|
} else if (this.controller.keyUp(CommandEnum.RIGHT)) {
|
||
|
this.getScene().speedDown();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// override
|
||
|
Player.prototype.update = function () {
|
||
|
this.respond();
|
||
|
};
|
||
|
|
||
|
Player.prototype.onCollision = function (other) {
|
||
|
if (other.hasTag('cave')) {
|
||
|
this.getScene().gameOver();
|
||
|
}
|
||
|
this.isDead = true;
|
||
|
};
|
||
|
|
||
|
Player.prototype.upScore = function () {
|
||
|
this.score += 1;
|
||
|
document.getElementById('score').innerHTML = this.score;
|
||
|
}
|
||
|
|
||
|
return Player;
|
||
|
})();
|
||
|
|
||
|
main();
|
||
|
})();
|