Dominic
Dominic

Reputation: 727

Trying to declare a winner in a game I made using Phaser but it keeps repeating the alert

I keep trying to alert the players that if player 1 wins then alert that player 1 wins and it does but it keeps popping up over and over until you click stop displaying this dialogue.

Also when I add to detect second player it just doesn't work.

function detectWin () {
    if (score + playerTwoScore == 5900 && score > playerTwoScore) {
        alert("Player 1 Wins!");
    }
}

detectWin();

also when i do this it doesn't work to show player 2 wins.

function detectWin () {
    if (score + playerTwoScore == 5900 && score > playerTwoScore) {
        alert("Player 1 Wins!");
    } else (score + playerTwoScore == 5900 && score < playerTwoScore) {
        alert("Player 2 Wins!");
  }
}
 detectWin();

---full snippet if you wanna see what I'm working on or if you wanna use parts of it I don't care--

var game = new Phaser.Game(1024, 700, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {
    game.load.image('starrySky', 'assets/starry_sky.png');
    game.load.image('ground', 'assets/ground.png');
    game.load.image('bottomCenterIcyPlatform', 'assets/bottom-center.png');
    game.load.image('middleCenterIcyPlatform', 'assets/middle-center.png');
    game.load.image('topCenterIcyPlatform', 'assets/top-center.png');
    game.load.image('bottomIcyPlatform', 'assets/bottom-side.png');
    game.load.image('middleIcyPlatform', 'assets/side-middle.png');
    game.load.image('veryTopMiddleIcyPlatform', 'assets/very-top.png');
    game.load.image('veryTopSideIcyPlatform', 'assets/very-top-side.png');
    game.load.image('present', 'assets/presents.png');
    game.load.spritesheet('dude', 'assets/anak.png', 32, 48);
    game.load.spritesheet('dudeTwo', 'assets/rudolph.png', 32, 48);
    game.load.audio('collectPresent', ['assets/audio/collect-present.mp3', 'assets/audio/collect-present.ogg']);
    game.load.audio('daWinner', ['assets/audio/the-winner.mp3', 'assets/audio/the-winner.ogg']);
}

var player;
var playerTwo;
var platforms;
var cursors; 
var presents;
var score = 0; 
var playerTwoScore = 0; 
var scoreText; 
var scoreTextPlayerTwo; 

function create() {
    game.physics.startSystem(Phaser.Physics.ARCADE);

    //  Background
    game.add.sprite(0, 0, 'starrySky');

    //  Contains all the platforms 
    platforms = game.add.group();

    platforms.enableBody = true;

    // The ground
    var ground = platforms.create(0, game.world.height - 64, 'ground');

    ground.scale.setTo(2, 2);

    //  So you don't fall through the ground... 
    ground.body.immovable = true;

    //center bottom platform 
    var ledge = platforms.create(193, 500, 'bottomCenterIcyPlatform');
    ledge.body.immovable = true;

    //center middle platform
    var ledge = platforms.create(274, 320, 'middleCenterIcyPlatform');
    ledge.body.immovable = true;

    //center top platform
    var ledge = platforms.create(390, 170, 'topCenterIcyPlatform');
    ledge.body.immovable = true;

    //left bottom platform
    ledge = platforms.create(0, 410, 'bottomIcyPlatform');
    ledge.body.immovable = true;

    //right bottom platform
    ledge = platforms.create(824, 410, 'bottomIcyPlatform');
    ledge.body.immovable = true;

    //left side middle platform 
    ledge = platforms.create(0, 250, 'middleIcyPlatform');
    ledge.body.immovable = true;

    //right side middle platform 
    ledge = platforms.create(874, 250, 'middleIcyPlatform');
    ledge.body.immovable = true;

    //very top middle icy platform
    ledge = platforms.create(490, 50, 'veryTopMiddleIcyPlatform');
    ledge.body.immovable = true;

    //very top left icy platform
    ledge = platforms.create(200, 110, 'veryTopSideIcyPlatform');
    ledge.body.immovable = true;

    //very top right icy platform
    ledge = platforms.create(722, 110, 'veryTopSideIcyPlatform');
    ledge.body.immovable = true;

    // The players and their settings
    player = game.add.sprite(10, game.world.height - 150, 'dude');
    playerTwo = game.add.sprite(980, game.world.height - 150, 'dudeTwo');
    game.physics.arcade.enable(player);
    game.physics.arcade.enable(playerTwo);
    //playerOne
    player.body.bounce.y = 0.2;
    player.body.gravity.y = 300;
    player.body.collideWorldBounds = true;
    //PlayerTwo
    playerTwo.body.bounce.y = 0.2;
    playerTwo.body.gravity.y = 300;
    playerTwo.body.collideWorldBounds = true;

    //  Our two animations, walking left and right.
    player.animations.add('left', [0, 1, 2, 3], 10, true);
    player.animations.add('right', [5, 6, 7, 8], 10, true);
    //Player Two
    playerTwo.animations.add('left', [0, 1, 2, 3], 10, true);
    playerTwo.animations.add('right', [5, 6, 7, 8], 10, true);

    //  Finally some presents to collect
    presents = game.add.group();

    //  We will enable physics for any present that is created in this group
    presents.enableBody = true;

    //Create presents ground level
   for (var i = 0; i < 13; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+197, 500, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }
    //Create presents bottom center ledge
    for (var i = 0; i < 13; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+197, 400, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }
    //Create presents center middle ledge
    for (var i = 0; i < 9; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+298, 200, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }

    //Create presents center top ledge
    for (var i = 0; i < 5; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+394, 100, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }

    //Create present very top center ledge 
    for (var i = 1; i < 2; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+440, 18, 'present');
    }

    //Create presents left bottom ledge
    for (var i = 0; i < 4; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+10, 300, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }

    //Create presents left middle ledge
    for (var i = 0; i < 3; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+9, 200, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }

    //Create presents left top ledge
    for (var i = 0; i < 2; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+210, 50, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }

    //Create presents right bottom ledge
    for (var i = 0; i < 4; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+834, 300, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }

    //Create presents right middle ledge
    for (var i = 0; i < 3; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+884, 200, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }

    //Create presents right top ledge
    for (var i = 0; i < 2; i++)
    {
        //  Create a present inside of the 'presents' group
        var present = presents.create((i * 50)+731, 50, 'present');

        //  Let gravity do its thing
        present.body.gravity.y = 300;

        //  This just gives each present a slightly random bounce value
        present.body.bounce.y = 0.3;
    }

    //  The scores
    scoreText = game.add.text(25, 16, 'Player 1 Score: 0', { fontSize: '32px', fill: '#000' });
    scoreTextPlayerTwo = game.add.text(750, 16, 'Player 2 Score: 0', { fontSize: '32px', fill: '#000' });

    //  Player controls
    cursors = game.input.keyboard.createCursorKeys();
    //player two controls
    upButton = game.input.keyboard.addKey(Phaser.Keyboard.W);
    downButton = game.input.keyboard.addKey(Phaser.Keyboard.S);
    leftButton = game.input.keyboard.addKey(Phaser.Keyboard.A);
    rightButton = game.input.keyboard.addKey(Phaser.Keyboard.D);


}

function update() {

    //  Collide the players against each other and the presents and platforms
    game.physics.arcade.collide(player, platforms);
    game.physics.arcade.collide(playerTwo, platforms);
    game.physics.arcade.collide(presents, platforms);
    game.physics.arcade.collide(player, playerTwo);

    //  Checks to see if the players overlaps with any of the presents, if he does call the collectpresent function
    game.physics.arcade.overlap(player, presents, collectpresent, null, this);
    game.physics.arcade.overlap(playerTwo, presents, playerTwoCollectpresent, null, this);


    //  Reset the players one velocity (movement)
    playerTwo.body.velocity.x = 0;

    if (cursors.left.isDown)
    {
        //  Move to the left
        playerTwo.body.velocity.x = -300;

        playerTwo.animations.play('left');
    }
    else if (cursors.right.isDown)
    {
        //  Move to the right
        playerTwo.body.velocity.x = 300;

        playerTwo.animations.play('right');
    }
    else
    {
        //  Stand still
        playerTwo.animations.stop();

        playerTwo.frame = 4;
    }

    //  Allow the player to jump if they are touching the ground.
    if (cursors.up.isDown && playerTwo.body.touching.down)
    {
        playerTwo.body.velocity.y = -310;
    }

    //Reset Player Two velocity (movement)
    player.body.velocity.x = 0;

    if (leftButton.isDown)
    {
        //  Move to the left (- to go faster, )
        player.body.velocity.x = -300;

        player.animations.play('left');
    }
    else if (rightButton.isDown)
    {
        //  Move to the right (+ to go faster)
        player.body.velocity.x = 300;

        player.animations.play('right');
    }
    else
    {
        //  Stand still
        player.animations.stop();

        player.frame = 4;
    }

    //  Have the player jump if they're touching something (ground, present, ledge or another player)
    if (upButton.isDown && player.body.touching.down)
    {
        player.body.velocity.y = -350;
    }

function collectpresent (player, present) {
    // Removes the present from the screen
    present.kill();

    //  Add and update the score
    score += 100;
    scoreText.text = 'Player 1 Score: ' + score; 
    }

function playerTwoCollectpresent (playerTwo, present) {
    // Removes the present from the screen
    present.kill();

    //  Add and update the score
    playerTwoScore += 100;
    scoreTextPlayerTwo.text = 'Player 2 Score: ' + playerTwoScore; 
    }

function detectWin () {
    if (score + playerTwoScore == 5900 && score > playerTwoScore) {
        alert("Player 1 Wins!");
    }
}

detectWin();


//end update
}

Upvotes: 1

Views: 68

Answers (1)

jolmos
jolmos

Reputation: 1575

detectWin function is called every update iteration so if the condition inside that function is resolved true, it will execute whatever it's inside (the alert function on this case). So, either you make this condition false after called once, by adding a var "finisehd", something like:

function detectWin () {
    if (score + playerTwoScore == 5900 && score > playerTwoScore && !finished) {
        alert("Player 1 Wins!");
        finished = true;
    }
}

Or you can stop the update cicle by changing to another state (http://phaser.io/news/2015/06/using-states-tutorial) where you can manage the end of the game.

Upvotes: 1

Related Questions