commit 99e74c71f853c72e6c63c9e27a62d91b84f2ab80 Author: Julio Biason Date: Sun Dec 27 11:58:55 2015 -0200 Initial version diff --git a/carrier.png b/carrier.png new file mode 100644 index 0000000..26aab1e Binary files /dev/null and b/carrier.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..2c2d34d --- /dev/null +++ b/index.html @@ -0,0 +1,57 @@ + + + + + + + + + + + + +
0
+ +
+ +
+ +
+ + + + + + +
+ + + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..72a69b6 --- /dev/null +++ b/main.js @@ -0,0 +1,222 @@ +(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(); +})(); diff --git a/ss_browncave.png b/ss_browncave.png new file mode 100644 index 0000000..400d9a8 Binary files /dev/null and b/ss_browncave.png differ