Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialStephen Chamroeun
7,095 PointsDecreasing the life by 1 everytime player touches a poison bottle?
I have the code below and I understand the objective is to fix the conditional statement, so that whenever the player does touch a bottle of poison, it decreases the life by 1 each time. in the function below, I did change it from lives = lives + 1; to lives = lives -1;, but the task is not going through? And the first task is going through just fine... but just not this one.
function poisonCollect(player, poison) {
poison.kill();
lives = lives - 1;
if (lives === 0) {
player.kill();
gameOver = true;
}
}
var game;
var player;
var platforms;
var badges;
var stars;
var poisons;
var cursors;
var jumpButton;
var scoreText;
var livesText;
var finalMessage;
var won = false;
var gameOver = false;
var currentScore = 0;
var lives = 3;
var winningScore = 100;
function createStars() {
stars = game.add.physicsGroup();
starCreate(425, 100, 'star');
starCreate(315, 100, 'star');
starCreate(175, 200, 'star');
starCreate(50, 150, 'star');
starCreate(75, 75, 'star')
}
function createPoisons() {
poisons = game.add.physicsGroup();
poisonCreate(675, 275, 'poison');
poisonCreate(450, 375, 'poison');
poisonCreate(375, 475, 'poison');
}
function createPlatforms() {
platforms = game.add.physicsGroup();
platforms.create(300, 150, 'platform');
platforms.create(400, 250, 'platform');
platforms.create(100, 250, 'platform');
platforms.create(500, 350, 'platform');
platforms.create(400, 450, 'platform');
platforms.create(300, 550, 'platform');
platforms.setAll('body.immovable', true);
}
function starCreate(left, top, starImage) {
var star = stars.create(left, top, starImage);
star.animations.add('spin');
star.animations.play('spin', 8, true);
}
function poisonCreate(left, top, poisonImage) {
var poison = poisons.create(left, top, poisonImage);
poison.animations.add('bubble');
poison.animations.play('bubble', 8, true);
}
function starCollect(player, star) {
star.kill();
currentScore = currentScore + 20;
if (currentScore === winningScore) {
won = true;
}
}
function poisonCollect(player, poison) {
poison.kill();
lives = lives - 1;
if (lives === 0) {
player.kill();
gameOver = true;
}
}
window.onload = function () {
game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update, render: render });
function preload() {
game.stage.backgroundColor = '#89889c';
//Load images
game.load.image('platform', 'platform.png');
//Load spritesheets
game.load.spritesheet('player', 'mikethefrog.png', 50, 60);
game.load.spritesheet('poison', 'poison.png', 24, 62);
game.load.spritesheet('star', 'star.png', 54, 52);
game.load.spritesheet('badge', 'badge.png', 42, 54);
}
function create() {
player = game.add.sprite(150, 600, 'player');
player.animations.add('walk');
player.anchor.setTo(0.5, 1);
game.physics.arcade.enable(player);
player.body.collideWorldBounds = true;
player.body.gravity.y = 500;
createStars();
createPoisons();
createPlatforms();
cursors = game.input.keyboard.createCursorKeys();
jumpButton = game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
scoreText = game.add.text(16, 16, "SCORE: " + currentScore, { font: "24px Arial", fill: "white" });
livesText = game.add.text(685, 16, "LIVES: " + lives, { font: "24px Arial", fill: "white" });
finalMessage = game.add.text(game.world.centerX, 250, "", { font: "48px Arial", fill: "white" });
finalMessage.anchor.setTo(0.5, 1);
}
function update() {
scoreText.text = "SCORE: " + currentScore;
livesText.text = "LIVES: " + lives;
game.physics.arcade.collide(player, platforms);
game.physics.arcade.overlap(player, stars, starCollect);
game.physics.arcade.overlap(player, poisons, poisonCollect);
player.body.velocity.x = 0;
if (cursors.left.isDown) {
player.animations.play('walk', 10, true);
player.body.velocity.x = -350;
player.scale.x = - 1;
}
else if (cursors.right.isDown) {
player.animations.play('walk', 10, true);
player.body.velocity.x = 350;
player.scale.x = 1;
}
else {
player.animations.stop();
}
if (jumpButton.isDown && (player.body.onFloor() || player.body.touching.down)) {
player.body.velocity.y = -400;
}
if (won) {
finalMessage.text = "YOU WIN!!!";
}
if (gameOver) {
finalMessage.text = "GAME OVER!!!";
}
}
function render() {
}
};
var game;
var player;
var platforms;
var badges;
var stars;
var poisons;
var cursors;
var jumpButton;
var scoreText;
var livesText;
var finalMessage;
var won = false;
var gameOver = false;
var currentScore = 0;
var lives = 3;
var winningScore = 100;
function createStars() {
stars = game.add.physicsGroup();
starCreate(425, 100, 'star');
starCreate(315, 100, 'star');
starCreate(175, 200, 'star');
starCreate(200, 200, 'star');
starCreate(190, 90, 'star');
}
function createPoisons() {
poisons = game.add.physicsGroup();
poisonCreate(675, 275, 'poison');
poisonCreate(450, 375, 'poison');
poisonCreate(375, 475, 'poison');
}
function createPlatforms() {
platforms = game.add.physicsGroup();
platforms.create(300, 150, 'platform');
platforms.create(400, 250, 'platform');
platforms.create(100, 250, 'platform');
platforms.create(500, 350, 'platform');
platforms.create(400, 450, 'platform');
platforms.create(300, 550, 'platform');
platforms.setAll('body.immovable', true);
}
function starCreate(left, top, starImage) {
var star = stars.create(left, top, starImage);
star.animations.add('spin');
star.animations.play('spin', 8, true);
}
function poisonCreate(left, top, poisonImage) {
var poison = poisons.create(left, top, poisonImage);
poison.animations.add('bubble');
poison.animations.play('bubble', 8, true);
}
function starCollect(player, star) {
star.kill();
currentScore = currentScore + 20;
if (currentScore === winningScore) {
won = true;
}
}
function poisonCollect(player, poison) {
poison.kill();
lives = lives - 1;
if (lives === 0) {
player.kill();
gameOver = true;
}
}
window.onload = function () {
game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update, render: render });
function preload() {
game.stage.backgroundColor = '#89889c';
//Load images
game.load.image('platform', 'platform.png');
//Load spritesheets
game.load.spritesheet('player', 'mikethefrog.png', 50, 60);
game.load.spritesheet('poison', 'poison.png', 24, 62);
game.load.spritesheet('star', 'star.png', 54, 52);
game.load.spritesheet('badge', 'badge.png', 42, 54);
}
function create() {
player = game.add.sprite(150, 600, 'player');
player.animations.add('walk');
player.anchor.setTo(0.5, 1);
game.physics.arcade.enable(player);
player.body.collideWorldBounds = true;
player.body.gravity.y = 500;
createStars();
createPoisons();
createPlatforms();
cursors = game.input.keyboard.createCursorKeys();
jumpButton = game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
scoreText = game.add.text(16, 16, "SCORE: " + currentScore, { font: "24px Arial", fill: "white" });
livesText = game.add.text(685, 16, "LIVES: " + lives, { font: "24px Arial", fill: "white" });
finalMessage = game.add.text(game.world.centerX, 250, "", { font: "48px Arial", fill: "white" });
finalMessage.anchor.setTo(0.5, 1);
}
function update() {
scoreText.text = "SCORE: " + currentScore;
livesText.text = "LIVES: " + lives;
game.physics.arcade.collide(player, platforms);
game.physics.arcade.overlap(player, stars, starCollect);
game.physics.arcade.overlap(player, poisons, poisonCollect);
player.body.velocity.x = 0;
if (cursors.left.isDown) {
player.animations.play('walk', 10, true);
player.body.velocity.x = -350;
player.scale.x = - 1;
}
else if (cursors.right.isDown) {
player.animations.play('walk', 10, true);
player.body.velocity.x = 350;
player.scale.x = 1;
}
else {
player.animations.stop();
}
if (jumpButton.isDown && (player.body.onFloor() || player.body.touching.down)) {
player.body.velocity.y = -400;
}
if (won) {
finalMessage.text = "YOU WIN!!!";
}
if (gameOver) {
finalMessage.text = "GAME OVER!!!";
}
}
function render() {
}
};
2 Answers
Gabbie Metheny
33,778 PointsIt looks like you've attached two different versions of your code, with different positions for the stars. In the last example, your fourth star is too close to your third star, causing overlap. I couldn't get to the second step of the challenge on those positions, but your first example works fine (although, it looks like you're missing a semicolon after your last star)! I think the problem is in your star positions, though I'm not sure why the challenge let you advance to the second step. You can try hitting "Restart" if you want a clean slate, just in case there's a bug elsewhere in the code.
starCreate(50, 150, 'star');
starCreate(75, 75, 'star');
function poisonCollect(player, poison) {
poison.kill();
lives = lives - 1;
if (lives === 0) {
player.kill();
gameOver = true;
}
}
Let me know how it goes!
Stephen Chamroeun
7,095 PointsI’ll try it one more time just to be on the safe side. Maybe I did put the star sprites way too close together. I’ll let you know!
Stephen Chamroeun
7,095 PointsStephen Chamroeun
7,095 PointsMaybe it was a bug. I tried it one more time, with the same coordinates for the star sprite and it went through this time for me? Maybe I really did have to restart with an empty slate possibly?
Gabbie Metheny
33,778 PointsGabbie Metheny
33,778 PointsGlad you got it to work!