mirror of
https://github.com/miky-kr5/CEIDEC-Pong-Web.git
synced 2023-01-29 18:47:06 +00:00
First commit.
This commit is contained in:
213
docs/js/game.js
Normal file
213
docs/js/game.js
Normal file
@@ -0,0 +1,213 @@
|
||||
/*
|
||||
* -----------------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <miguel.astor@ciens.ucv.ve> wrote this file. As long as you retain this notice you
|
||||
* can do whatever you want with this stuff. If we meet some day, and you think
|
||||
* this stuff is worth it, you can buy me a beer in return. Miguel Angel Astor
|
||||
* -----------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Global variables. //
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
var player = null;
|
||||
var computer = null;
|
||||
var ball = null;
|
||||
var playing = false;
|
||||
var lives = 3;
|
||||
var c_lives = 3;
|
||||
var startButton = null;
|
||||
var livesText = null;
|
||||
var cLivesText = null;
|
||||
var lifeLostText = null;
|
||||
var successText = null;
|
||||
var textStyle = {
|
||||
font: "18px Arial",
|
||||
fill: "#FFFFFF",
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Helper functions. //
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function randSig() {
|
||||
var signs = [-1, 1];
|
||||
return signs[Math.floor(signs.length * Math.random())];
|
||||
}
|
||||
|
||||
function startGame() {
|
||||
startButton.destroy();
|
||||
ball.body.velocity.set(randSig() * 150, randSig() * 150);
|
||||
playing = true;
|
||||
}
|
||||
|
||||
function ballHitPaddle(ball, paddle) {
|
||||
ball.animations.play("wobble");
|
||||
ball.body.velocity.x = 1.15 * ball.body.velocity.x;
|
||||
}
|
||||
|
||||
function ballLeaveScreen() {
|
||||
// Pause the game
|
||||
playing = false;
|
||||
|
||||
if (ball.x < 0) {
|
||||
// If the ball left by the left side of the screen
|
||||
// then reduce player lives
|
||||
lives--;
|
||||
|
||||
// Then show the defeat text
|
||||
lifeLostText.visible = true;
|
||||
|
||||
// And update the player lives counter
|
||||
livesText.setText("Your lives: " + lives);
|
||||
|
||||
if (!lives) {
|
||||
alert("Game over, dude!");
|
||||
location.reload();
|
||||
}
|
||||
} else if (ball.x > game.world.width) {
|
||||
// If the ball left by the right side of the screen
|
||||
// then reduce computer lives
|
||||
c_lives--;
|
||||
|
||||
// Then show the victory text
|
||||
successText.visible = true;
|
||||
|
||||
// And update the computer lives counter
|
||||
cLivesText.setText("Computer lives: " + c_lives);
|
||||
|
||||
if (!c_lives) {
|
||||
alert("A winner is you!");
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
// Reset all positions
|
||||
// Resetting the ball sets it's velocity to 0
|
||||
ball.reset(game.world.width * 0.5, game.world.height * 0.5);
|
||||
player.reset(20, game.world.height * 0.5);
|
||||
computer.reset(game.world.width - 20, game.world.height * 0.5);
|
||||
|
||||
// Add an event listener for one event
|
||||
game.input.onDown.addOnce(function() {
|
||||
// Unpause the game
|
||||
ball.body.velocity.set(randSig() * 150, randSig() * 150);
|
||||
playing = true;
|
||||
lifeLostText.visible = false;
|
||||
successText.visible = false;
|
||||
}, this);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Loads all assets and sets up the game. //
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function preload() {
|
||||
// Set basic game properties
|
||||
//game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
|
||||
game.scale.pageAlignHorizontally = true;
|
||||
game.scale.pageAlignVertically = true;
|
||||
game.stage.backgroundColor = "#eee";
|
||||
|
||||
// Set basic game properties
|
||||
game.load.image("bckg", "img/bckg.png");
|
||||
game.load.image("paddle", "img/paddle.png");
|
||||
game.load.image("computer", "img/computer.png");
|
||||
game.load.spritesheet("ball", "img/wobble.png", 20, 20);
|
||||
game.load.spritesheet("button", "img/button.png", 144, 40);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Creates all game objects //
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function create() {
|
||||
// Initialize the physics engine
|
||||
game.physics.startSystem(Phaser.Physics.ARCADE);
|
||||
game.physics.arcade.checkCollision.left = false;
|
||||
game.physics.arcade.checkCollision.right = false;
|
||||
|
||||
// Create the background
|
||||
bckg = game.add.sprite(0, 0, "bckg");
|
||||
|
||||
// Create the ball sprite and set it"s properties
|
||||
ball = game.add.sprite(game.world.width * 0.5, game.world.height * 0.5, "ball");
|
||||
ball.animations.add("wobble", [0, 1, 0, 2, 0, 1, 0, 2, 0], 24);
|
||||
ball.anchor.set(0.5);
|
||||
game.physics.enable(ball, Phaser.Physics.ARCADE);
|
||||
ball.body.bounce.set(1);
|
||||
ball.body.collideWorldBounds = true;
|
||||
ball.checkWorldBounds = true;
|
||||
ball.events.onOutOfBounds.add(ballLeaveScreen, this);
|
||||
|
||||
// Create the player sprite and set it"s properties
|
||||
player = game.add.sprite(20, game.world.height * 0.5, "paddle");
|
||||
player.anchor.set(0.5, 0.5);
|
||||
game.physics.enable(player, Phaser.Physics.ARCADE);
|
||||
player.body.immovable = true;
|
||||
|
||||
// Create the computer sprite and set it"s properties
|
||||
computer = game.add.sprite(game.world.width - 20, game.world.height * 0.5, "computer");
|
||||
computer.anchor.set(0.5, 0.5);
|
||||
game.physics.enable(computer, Phaser.Physics.ARCADE);
|
||||
computer.body.immovable = true;
|
||||
|
||||
// Create the start button
|
||||
startButton = game.add.button(game.world.width * 0.5, game.world.height * 0.5, "button", startGame, this, 1, 0, 2);
|
||||
startButton.anchor.set(0.5);
|
||||
|
||||
// Create text elements
|
||||
livesText = game.add.text(7, 5, "Your lives: " + lives, textStyle);
|
||||
livesText.anchor.set(0, 0);
|
||||
cLivesText = game.add.text(game.world.width - 7, 5, "Computer lives: " + c_lives, textStyle);
|
||||
cLivesText.anchor.set(1, 0);
|
||||
lifeLostText = game.add.text(game.world.width * 0.5, game.world.height * 0.5, 'Got you!, click to continue', textStyle);
|
||||
lifeLostText.anchor.set(0.5);
|
||||
lifeLostText.visible = false;
|
||||
successText = game.add.text(game.world.width * 0.5, game.world.height * 0.5, 'You got me!, click to continue', textStyle);
|
||||
successText.anchor.set(0.5);
|
||||
successText.visible = false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Implements the game logic //
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function update() {
|
||||
// Do collition detection
|
||||
game.physics.arcade.collide(ball, player, ballHitPaddle);
|
||||
game.physics.arcade.collide(ball, computer, ballHitPaddle);
|
||||
|
||||
if (playing) {
|
||||
// If the game is on, move the player with the mouse
|
||||
player.y = game.input.y;
|
||||
|
||||
// Set the computer's speed so it moves in the direction of the ball
|
||||
if (ball.y > computer.y)
|
||||
computer.body.velocity.y = 65;
|
||||
else if (ball.y < computer.y)
|
||||
computer.body.velocity.y = -65;
|
||||
else
|
||||
computer.body.velocity.y = 0;
|
||||
|
||||
} else {
|
||||
// If the game is off, fix the position of player and computer
|
||||
player.y = game.world.height * 0.5;
|
||||
computer.y = game.world.height * 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Game initialization //
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Function references for Phaser.
|
||||
functions = {
|
||||
preload: preload,
|
||||
create: create,
|
||||
update: update
|
||||
};
|
||||
|
||||
// Set the game canvas and play
|
||||
game = new Phaser.Game(480, 320, Phaser.CANVAS, 'game_container', functions);
|
Reference in New Issue
Block a user