Skip to content

Instantly share code, notes, and snippets.

@codecademydev
Created June 6, 2020 18:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codecademydev/baf860db978ae8cbfb66cba00ff525d9 to your computer and use it in GitHub Desktop.
Save codecademydev/baf860db978ae8cbfb66cba00ff525d9 to your computer and use it in GitHub Desktop.
Codecademy export
class EndScene extends Phaser.Scene {
constructor() {
super({ key: 'EndScene' })
}
preload() {
this.load.image('end', 'https://codecademy-content.s3.amazonaws.com/courses/learn-phaser/BOB/Game+over.png');
}
create() {
screen = this.add.image(0, 0, 'end').setOrigin(0);
// Add code to reset global variables
// Reset sprite positions
gameState.numCoordinates = {};
this.input.keyboard.on('keydown', () => {
this.scene.stop('EndScene');
this.scene.start('GameScene');
});
}
}
// Add a variable to keep count of Bob's earnings
let score = 0;
// Add a variable to multiply money
const moneyMultiplier = 100;
// Add a variable to control speed of Bob sprite
const speed = 1;
// Values used to keep track of where money and paper appear
const gameState = {
numCoordinates: {},
};
let randomCoord;
class GameScene extends Phaser.Scene {
constructor() {
super({ key: 'GameScene' });
}
preload() {
this.load.image('bob-front', 'https://codecademy-content.s3.amazonaws.com/courses/learn-phaser/BOB/Bob+front.png');
this.load.image('bob-back', 'https://codecademy-content.s3.amazonaws.com/courses/learn-phaser/BOB/Bob+back.png');
this.load.image('bob-side', 'https://codecademy-content.s3.amazonaws.com/courses/learn-phaser/BOB/Bob+side.png');
this.load.image('money', 'https://codecademy-content.s3.amazonaws.com/courses/learn-phaser/BOB/Money.png');
this.load.image('paper', 'https://codecademy-content.s3.amazonaws.com/courses/learn-phaser/BOB/Paperwork.png');
}
create() {
// Display text showing how much cash Bob earned
let scoreText = this.add.text(140, 610, `Earnings: $${score}`, { fontSize: '25px', fill: '#fff' });
// Create the Bob sprite and set boundaries for it
gameState.player = this.physics.add.sprite(240, 500, 'bob-front').setScale(.8);
this.physics.world.setBounds(0, 0, 480, 600); // Slightly above score
gameState.player.setCollideWorldBounds(true);
gameState.player.body.collideWorldBounds = true;
// Create money sprite in random spots on canvas
randomCoord = assignCoords();
gameState.money = this.physics.add.sprite(randomCoord.x, randomCoord.y, 'money').setScale(.5);
// Create paper sprite group
gameState.enemies = this.physics.add.group();
// Collision detection between Bob and money sprite
this.physics.add.overlap(gameState.player, gameState.money, () => {
// Hide and deactivate the money sprite after Bob collides with it
gameState.money.disableBody();
// Move money somewhere else on the canvas
delete gameState.numCoordinates[`x${gameState.money.x}y${gameState.money.y}`];
randomCoord = assignCoords();
// Place the money sprite somewhere new, then show and activate it
gameState.money.enableBody(true, randomCoord.x, randomCoord.y);
// Increase the score randomly between 100 and 1000
score += (Math.round(Math.random() * 10) * moneyMultiplier);
// Update cash total text
scoreText.setText(`Earnings: \$${score}`);
// Place paper sprite on canvas randomly
randomCoord = assignCoords();
gameState.enemies.create(randomCoord.x, randomCoord.y, 'paper').setScale(.6);
});
// Collision detection between Bob and paper sprites
this.physics.add.collider(gameState.player, gameState.enemies, () => this.endGame());
// Helper function to return an object containing evenly spaced x and y coordinates:
function generateRandomCoords() {
const randomX = Math.floor(Math.random() * 5) * 75 + 25
const randomY = Math.floor(Math.random() * 5) * 75 + 25
return { x: randomX, y: randomY }
}
// Helper function that returns one set of coordinates not in gameState.numCoordinates
function assignCoords() {
let assignedCoord = generateRandomCoords();
// If the coordinates are already in gameState.numCoordinates, then other set of coordinates are generated until there is one not in use
while (gameState.numCoordinates[`x${assignedCoord.x}y${assignedCoord.y}`]) {
assignedCoord = generateRandomCoords()
}
gameState.numCoordinates[`x${assignedCoord.x}y${assignedCoord.y}`] = true
return assignedCoord;
}
}
update() {
// Arrow keys that will move Bob in 4 directions
const cursors = this.input.keyboard.createCursorKeys();
// Add variables that store if a specific arrow key is being pressed
rightArrow = cursors.right.isDown;
leftArrow = cursors.left.isDown;
upArrow = cursors.up.isDown;
downArrow = cursors.down.isDown;
// Add code to check whether any of the arrow keys were pressed, move Bob
if(rightArrow = true){
moveBobRight();
}else if(leftArrow = true){
moveBobLeft();
}else if(upArrow = true){
moveBobUp();
}else if(downArrow = true){
moveBobDown();
}
// Add variables that store the x and y coordinates of the Bob sprite
// Add code to check collision between Bob and edges of the canvas of the game
// Helper functions to move Bob in 4 directions
function moveBobRight() {
gameState.player.flipX = false;
gameState.player.setTexture('bob-side');
gameState.player.setVelocityX(150 * speed);
gameState.player.setVelocityY(0);
}
function moveBobLeft() {
// NOTE: By default Bob looks to the right so we flip the image if moving left
gameState.player.flipX = true;
gameState.player.setTexture('bob-side');
gameState.player.setVelocityX(-150 * speed);
gameState.player.setVelocityY(0);
}
function moveBobUp() {
gameState.player.flipX = false;
gameState.player.setTexture('bob-back');
gameState.player.setVelocityX(0);
gameState.player.setVelocityY(-150 * speed);
}
function moveBobDown() {
gameState.player.flipX = false;
gameState.player.setTexture('bob-front');
gameState.player.setVelocityX(0);
gameState.player.setVelocityY(150 * speed);
}
}
// Class function that ends current Game and transitions to End Scene
endGame() {
// Stop sprites moving
this.physics.pause();
// Transition to end scene w/fade
this.cameras.main.fade(800, 0, 0, 0, false, function (camera, progress) {
if (progress > .5) {
this.scene.stop('GameScene');
this.scene.start('EndScene');
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment