重置游戏和赢家问题

时间:2015-04-05 15:45:37

标签: javascript angularjs reset

我正在构建一个简单的井字游戏,我需要一些关于我的重置按钮和获胜者功能的帮助。

在提供的代码片段结束时,我正在尝试实现重置按钮,但我不确定如何让它工作。我正在为我的胜利者函数做else声明的方式是这样的,如果没有更多的动作,我似乎无法说:“没有更多动作”没有它每次都说出来你点击一个正方形。

我该如何实现?

// IIFE
(function() {

    angular
        .module("myApp", [])
        .controller("tictactoeController", tictactoeController);

    // Controller
    function tictactoeController() {

        // Capture Variable
        var self = this;

        self.currentTurn = '';
        self.playerOne = 'X';
        self.playerTwo = 'O';
        self.winner = '';

        // Gameboard
        self.boxes = [
            {square: 1}, {square: 2}, {square: 3},
            {square: 4}, {square: 5}, {square: 6},
            {square: 7}, {square: 8}, {square: 9} ];

        // Picks Random Player To Be X or O
        self.random = function() {
            if (Math.random() > 0.5) {
                alert("Player One GO!");
                self.currentTurn = "X";
            } else {
                alert("Player Two GO!");
                self.currentTurn = "O";
            }
        };

        self.random();

        // Clickbox Function
        self.clickbox = function($index) {
            //console.log(self.boxes[$index].value + "check");
            if (self.boxes[$index].value === undefined) {
                self.boxes[$index].value = self.currentTurn;
                self.boxes[$index].square = self.currentTurn;
                if (self.currentTurn === "X") {
                    self.currentTurn = "O";
                } else {
                    self.currentTurn = "X";
                }
            } else {
                alert(
                    "Already Taken! Choose Another Square!"
                );
            }
            // Check for winner after each click
            self.winner(self.boxes[$index].value);
        };

        // Winner Fucntion
        self.winner = function(input) {

            // Row Wins
            if ((self.boxes[0].square == input && self.boxes[
                        1].square == input && self.boxes[2]
                    .square == input) || (self.boxes[3].square ==
                    input && self.boxes[4].square == input &&
                    self.boxes[5].square == input) || (self
                    .boxes[6].square == input && self.boxes[
                        7].square == input && self.boxes[8]
                    .square == input)) {
                alert(input + " WINS!");

                // Column Wins
            } else if ((self.boxes[0].square == input &&
                    self.boxes[3].square == input && self.boxes[
                        6].square == input) || (self.boxes[
                        1].square == input && self.boxes[4]
                    .square == input && self.boxes[7].square ==
                    input) || (self.boxes[2].square ==
                    input && self.boxes[5].square == input &&
                    self.boxes[8].square == input)) {
                alert(input + " WINS!");

                // Diagonal Wins
            } else if ((self.boxes[0].square == input &&
                    self.boxes[4].square == input && self.boxes[
                        8].square == input) || (self.boxes[
                        2].square == input && self.boxes[4]
                    .square == input && self.boxes[6].square ==
                    input)) {
                alert(input + " WINS!");


                // No Winner
            }
        };

        // Reset Game Button
        self.resetbtn = function() {


        };
    }
})();

1 个答案:

答案 0 :(得分:0)

重置功能:

self.resetbtn = function() {
    self.boxes.forEach(function(box, index) {
        self.boxes[index].value = '';
        self.boxes[index].square = index;
    })
};

不再动其他了:

var hasMoves = false;
self.boxes.forEach(function(box, index) {
    if(box.square != self.playerOne && box.square != self.playerTwo) {
        hasMoves = true;
    }
}

if(! hasMoves) {
    alert  ("No more moves!");
}

此外,如果在代码中您不使用硬编码值XO,而是使用其变量self.playerOneself.playerTwo,那会更好。它将更容易更改值X和O(虽然在Tic Tac Toe游戏中你不会这样做。)