// Initialize Phaser, and creates a 400x490px game var game = new Phaser.Game(400, 490, Phaser.AUTO, 'game_div'); var game_state = {}; // Creates a new 'main' state that will contain the game game_state.main = function() { }; game_state.main.prototype = { // Function called first to load all the assets preload: function() { // Change the background color of the game this.game.stage.backgroundColor = '#71c5cf'; // Load the bird sprite this.game.load.image('bird', '/../images/bird.png'); // Load the pipe sprite this.game.load.image('pipe', '/../images/pipe.png'); }, // Fuction called after 'preload' to setup the game create: function() { // Display the bird on the screen this.bird = this.game.add.sprite(100, 245, 'bird'); // Add gravity to the bird to make it fall this.bird.body.gravity.y = 1000; // Call the 'jump' function when the spacekey is hit var space_key = this.game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR); space_key.onDown.add(this.jump, this); // Create a group of 20 pipes this.pipes = game.add.group(); this.pipes.createMultiple(20, 'pipe'); // Timer that calls 'add_row_of_pipes' ever 1.5 seconds this.timer = this.game.time.events.loop(1500, this.add_row_of_pipes, this); // Add a score label on the top left of the screen this.score = 0; var style = { font: "30px Arial", fill: "#ffffff" }; this.label_score = this.game.add.text(20, 20, "0", style); }, // This function is called 60 times per second update: function() { // If the bird is out of the world (too high or too low), call the 'restart_game' function if (this.bird.inWorld == false) this.restart_game(); // If the bird overlap any pipes, call 'restart_game' this.game.physics.overlap(this.bird, this.pipes, this.restart_game, null, this); }, // Make the bird jump jump: function() { // Add a vertical velocity to the bird this.bird.body.velocity.y = -350; }, // Restart the game restart_game: function() { // Remove the timer this.game.time.events.remove(this.timer); // Start the 'main' state, which restarts the game this.game.state.start('main'); }, // Add a pipe on the screen add_one_pipe: function(x, y) { // Get the first dead pipe of our group var pipe = this.pipes.getFirstDead(); // Set the new position of the pipe pipe.reset(x, y); // Add velocity to the pipe to make it move left pipe.body.velocity.x = -200; // Kill the pipe when it's no longer visible pipe.outOfBoundsKill = true; }, // Add a row of 6 pipes with a hole somewhere in the middle add_row_of_pipes: function() { var hole = Math.floor(Math.random()*5)+1; for (var i = 0; i < 8; i++) if (i != hole && i != hole +1) this.add_one_pipe(400, i*60+10); this.score += 1; this.label_score.content = this.score; }, }; // Add and start the 'main' state to start the game game.state.add('main', game_state.main); game.state.start('main');