function initialise() {
    doubleCount = 0;
    playerturn = 1;
    hotelrating = 0;
    flipped = 0;
    //setRent();
    //createPlayers();
    //createPositions();
    //createCards();
    //createSets();
    //drawBoard();
    //starplugin();
    //setPrices();
}

function playgame() {
    setPrices();
    clearContent();
    rollDice(); //two dice rolls
    drawDice(); //displays the dice
    setPosition(); //update player position
    movePiece();
    checkForSale();
    checkDouble();
}

function starplugin() {
    $('#star').raty({
        path: 'lib/img/',
        cancel: true,
        cancelHint: 'remove my rating!',
        cancelPlace: 'right'
    });
    $("#star > img").click(function () {
        hotelrating = $(this).attr("alt");
    });
}

function clearContent() {
    if (flipped === 1) {
        //$(".cards").flippyReverse();
        $(".cards").flippy({
            color_target: "#F8F8F8",
            duration: "500"
        });
        flipped = 0;
    }
    $("#drawncardtitle").text("");
    $("#drawncard").text("");
    $("#buildsets1").hide();
    $("#buildsets2").hide();
    $('.buildsets').find('option').remove();
}

function canBuild() {
    var set = ["brown", "blue", "pink", "orange", "red", "yellow", "green", "navy"];
    var buildablesets = [
        [""],
        [""],
        [""]
    ];
    for (var i = 0; i < set.length; i++) {
        if (doesOwnSet('player' + playerturn, set[i])) {
            buildablesets[playerturn].push(set[i]);
        }
    }
    buildablesetsx = buildablesets[playerturn];
    if (buildablesetsx.length > 1) {
        $(".buildmenu").toggle();
        $("#buildsets" + playerturn).show();
        buildsets = $("#buildsets" + playerturn);
        for (k = 1; k < buildablesets[playerturn].length; k++) {
            buildsets.append("<option value='" + buildablesetsx[k] + "'>" + buildablesetsx[k] + "</option>");
        }
    } else {
        $(".buildmenu").hide();
    }
}

function build() {
    var setname = $('#buildsets' + playerturn).find(":selected").text();
    var balance = players['player' + playerturn].balance;
    var currentRating = sets[setname].rating;
    var ratingToAdd = hotelrating - currentRating;
    var cost = sets[setname].cost * ratingToAdd;
    if (hotelrating < currentRating) {
        alert("Sorry mate, you can't downgrade");
    }
    if (cost > balance) {
        alert("Sorry mate, you can't afford that!");
    } else {
        players['player' + playerturn].balance = balance - cost;
        sets[setname].rating = hotelrating;

    }
    $(".buildmenu").hide();
}

function doesOwnSet(player, type) {
    return Object.keys(positions)
        .map(function (key) {
            return positions[key];
        })
        .filter(function (pos) {
            return pos.type === type;
        })
        .every(function (pos) {
            return pos.owner === player;
        });
}

function rollDice() {
    var x = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var y = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    dice1 = x;
    dice2 = y;
    dicetotal = dice1 + dice2;
}

function drawDice() {
    $('.dice1').css('background-image', 'url(img/dice/' + dice1 + '.png)');
    $('.dice2').css('background-image', 'url(img/dice/' + dice2 + '.png)');
}

function drawBoard() {
    var set = ["brown", "blue", "pink", "orange", "red", "yellow", "green", "navy"];
    for (var i = 0; i < set.length; i++) {
        var setcolor = sets[set[i]].color;
        if (set[i] == "yellow") {
            $('.yellow').css('color', 'black');
        }
        $('.' + set[i]).css('background', setcolor);
    }
}

function setPosition() {

    players['player' + playerturn].currentpos = players['player' + playerturn].startpos + dicetotal;
    players['player' + playerturn].prevpos = players['player' + playerturn].currentpos - dicetotal;
    currentposition = players['player' + playerturn].currentpos;

    if (currentposition >= 40) {

        var balance = players['player' + playerturn].balance;

        players['player' + playerturn].balance = balance + 200;
        $("#debug2").text("+ $200");

        if (currentposition > 40) {

            players['player' + playerturn].currentpos = currentposition - 40;

        }

    }

    if (currentposition == 30) {

        players['player' + playerturn].currentpos = 10;

    }

    players['player' + playerturn].startpos = players['player' + playerturn].currentpos;
    title = positions['position' + players['player' + playerturn].currentpos].title;
}

function movePiece() {

    var x = "#piece" + playerturn + "pos" + players['player' + playerturn].currentpos;
    var y = "#piece" + playerturn + "pos" + players['player' + playerturn].prevpos;
    $(x).slideToggle();
    $(y).slideToggle();

}

function checkForSale() {

    var forsale = positions['position' + players['player' + playerturn].currentpos].forsale;

    if (forsale == "y") {
        checkOwner();
    } else {
        checkType();
    }

}

function checkOwner() {

    var owner = positions['position' + players['player' + playerturn].currentpos].owner;

    if (owner == "none") {
        assignOwner();
    } else {
        payRent();
    }

}

function payRent() {

    var currentpos = players['player' + playerturn].currentpos;
    var balance = players['player' + playerturn].balance;
    var type = positions['position' + players['player' + playerturn].currentpos].type;


    if (type == "utility") {
        var rent = 4 * dicetotal;
    } else {
        var rent = positions['position' + currentpos].rent;
    }

    players['player' + playerturn].balance = balance - rent;

}

function assignOwner() {
    var price = positions['position' + players['player' + playerturn].currentpos].price;
    var balance = players['player' + playerturn].balance;
    var title = positions['position' + players['player' + playerturn].currentpos].title;

    players['player' + playerturn].balance = balance - price;
    positions['position' + players['player' + playerturn].currentpos].owner = "player" + playerturn;
    //positions['position'+players['player'+playerturn].currentpos].price = positions['position'+players['player'+playerturn].currentpos].rent;
    $("#owns" + playerturn).append(title + '</br>');
}

function checkType() {
    var balance = players['player' + playerturn].balance;
    var type = positions['position' + players['player' + playerturn].currentpos].type;
    if (type == "tax") {
        var tax = positions['position' + players['player' + playerturn].currentpos].tax;
        players['player' + playerturn].balance = balance - tax;
        $("#debug2").text("- $" + tax);
    } else {

        if (type == "chance") {
            chanceCard();
        } else if (type == "chest") {
            chestCard();
        }
    }

}

function chanceCard() {
    var balance = players['player' + playerturn].balance;
    var x = Math.floor(Math.random() * ((16 - 1) + 1) + 1);
    var title = chancecards['chance' + x].title;
    var type = chancecards['chance' + x].type;
    var bill = chancecards['chance' + x].bill;
    var bonus = chancecards['chance' + x].bonus;
    if (type == "bill") {
        players['player' + playerturn].balance = balance - bill;
        $("#debug2").text("- $" + bill);
    } else if (type == "bonus") {
        players['player' + playerturn].balance = balance + bonus;
        $("#debug2").text("+ $" + bonus);
    } else if (type == "move") {
        var newposition = chancecards['chance' + x].newposition;
        var currentposition = players['player' + playerturn].currentpos;
        if (newposition == 40) { //this if the player has to "advance to go"
            advanceToGo();
        } else if (newposition < currentposition) { //if the new position is less than the current one it means the player has to go past go
            players['player' + playerturn].balance = balance + 200;
            $("#debug2").text("+ $200");
        }
        players['player' + playerturn].prevpos = players['player' + playerturn].currentpos;
        players['player' + playerturn].currentpos = newposition;
        players['player' + playerturn].startpos = players['player' + playerturn].currentpos;

        movePiece();
        checkForSale();
    } else if (title == "Go back 3 spaces") {
        players['player' + playerturn].prevpos = players['player' + playerturn].currentpos;
        players['player' + playerturn].currentpos = players['player' + playerturn].currentpos - 3;
        players['player' + playerturn].startpos = players['player' + playerturn].currentpos;

        movePiece();
        checkForSale();

    }
    $(".cards").css('display', 'block');
    $(".cards").flippy({
        color_target: "#F8F8F8",
        duration: "500",
        verso: '<span id="cardtitle">Chance</span><span id="cardinfo"> ' + title + '</span>'
    });
    flipped = 1;
}

function chestCard() {
    var balance = players['player' + playerturn].balance;
    var x = Math.floor(Math.random() * ((14 - 1) + 1) + 1);
    var title = chestcards['chest' + x].title;
    var chesttype = chestcards['chest' + x].type;
    var bill = chestcards['chest' + x].bill;
    var bonus = chestcards['chest' + x].bonus;

    if (chesttype == "bill") {
        players['player' + playerturn].balance = balance - bill;
        $("#debug2").text("- $" + bill);
    } else if (chesttype == "bonus") {
        players['player' + playerturn].balance = balance + bonus;
        $("#debug2").text("+ $" + bonus);
    } else if (chesttype == "move") {
        var newposition = chestcards['chest' + x].newposition;
        var currentposition = players['player' + playerturn].currentpos;
        if (newposition == 40) { //this if the player has to "advance to go"
            advanceToGo();
        } else if (newposition < currentposition) { //if the new position is less than the current one it means the player has to go past go
            players['player' + playerturn].balance = balance + 200;
            $("#debug2").text("+ $200");
        }
        players['player' + playerturn].prevpos = players['player' + playerturn].currentpos;
        players['player' + playerturn].currentpos = newposition;
        players['player' + playerturn].startpos = players['player' + playerturn].currentpos;

        movePiece();
        checkForSale();

    }
    //$("#cardtitle").text("Community Chest");
    //$("#cardinfo").text(title);
    $(".cards").css('display', 'block');
    $(".cards").flippy({
        color_target: "#F8F8F8",
        duration: "500",
        verso: '<span id="cardtitle">Community Chest</span><span id="cardinfo"> ' + title + '</span>'
    });
    flipped = 1;
}

function advanceToGo() {
    var balance = players['player' + playerturn].balance;
    players['player' + playerturn].balance = balance + 200;
    $("#debug2").text("+ $200");
}

function checkDouble() {
    if (dice1 == dice2) {
        doubleCount++;
        if (doubleCount == 3) {
            var currentpossition = players['player' + playerturn].currentpos;
            players['player' + playerturn].currentpos = 10;
            changeTurn();
        }
    } else {
        changeTurn();
        doubleCount = 0;
    }
}

function changeTurn() {

    if (playerturn == 1) {
        playerturn = 2;
        $("#roll1").prop("disabled", true);
        $("#roll2").prop("disabled", false);
        $(".buildmenu").hide();
        canBuild();
    } else {
        playerturn = 1;
        $("#roll2").prop("disabled", true);
        $("#roll1").prop("disabled", false);
        $(".buildmenu").hide();
        canBuild();
    }

}

function createPlayers() {
    players = {
        player1: {
            currentpos: 0,
            prevpos: 0,
            startpos: 0,
            balance: 1500
        },
        player2: {
            currentpos: 0,
            prevpos: 0,
            startpos: 0,
            balance: 1500
        }
    };
}

function createPositions() {
    positions = {
        position1: {
            title: "Cairo",
            type: "brown",
            owner: "player1",
            price: 60,
            rent: [2, 10, 30, 90, 160, 250],
            rating: 0,
            forsale: "y"
        },
        position3: {
            title: "Vienna",
            type: "brown",
            owner: "player1",
            price: 60,
            rent: [2, 20, 60, 180, 320, 450],
            rating: 0,
            forsale: "y"
        },
        position5: {
            title: "Schiphol",
            type: "airport",
            owner: "none",
            price: 200,
            rent: 25,
            rating: 0,
            forsale: "y"
        },
        position6: {
            title: "Brussels",
            type: "blue",
            owner: "none",
            price: 100,
            rent: [6, 30, 90, 270, 400, 550],
            rating: 0,
            forsale: "y"
        },
        position8: {
            title: "Oslo",
            type: "blue",
            owner: "none",
            price: 100,
            rent: [6, 30, 90, 270, 400, 550],
            rating: 0,
            forsale: "y"
        },
        position9: {
            title: "Zurich",
            type: "blue",
            owner: "none",
            price: 120,
            rent: [6, 30, 90, 270, 400, 550],
            rating: 0,
            forsale: "y"
        },
        position11: {
            title: "Amsterdam",
            type: "pink",
            owner: "none",
            price: 140,
            rent: [10, 50, 150, 450, 625, 750],
            rating: 0,
            forsale: "y"
        },
        position13: {
            title: "Bangkok",
            type: "pink",
            owner: "none",
            price: 140,
            rent: [10, 50, 150, 450, 625, 750],
            rating: 0,
            forsale: "y"
        },
        position14: {
            title: "Istanbul",
            type: "pink",
            owner: "none",
            price: 160,
            rent: [12, 60, 180, 500, 700, 900],
            rating: 0,
            forsale: "y"
        },
        position15: {
            title: "Charles de Gaulle",
            type: "airport",
            owner: "none",
            price: 200,
            rent: 25,
            rating: 0,
            forsale: "y"
        },
        position16: {
            title: "Hong Kong",
            type: "orange",
            owner: "none",
            price: 180,
            rent: [14, 70, 200, 550, 750, 950],
            rating: 0,
            forsale: "y"
        },
        position18: {
            title: "Madrid",
            type: "orange",
            owner: "none",
            price: 180,
            rent: [14, 70, 200, 550, 750, 950],
            rating: 0,
            forsale: "y"
        },
        position19: {
            title: "Sydney",
            type: "orange",
            owner: "none",
            price: 200,
            rent: [16, 80, 220, 600, 800, 100],
            rating: 0,
            forsale: "y"
        },
        position21: {
            title: "Toronto",
            type: "red",
            owner: "none",
            price: 220,
            rent: [18, 90, 250, 700, 875, 1050],
            rating: 0,
            forsale: "y"
        },
        position23: {
            title: "Mumbai",
            type: "red",
            owner: "none",
            price: 220,
            rent: [18, 90, 250, 700, 875, 1050],
            rating: 0,
            forsale: "y"
        },
        position24: {
            title: "Rome",
            type: "red",
            owner: "none",
            price: 240,
            rent: [20, 100, 300, 750, 925, 1100],
            rating: 0,
            forsale: "y"
        },
        position25: {
            title: "Heathrow",
            type: "airport",
            owner: "none",
            price: 200,
            rent: 25,
            rating: 0,
            forsale: "y"
        },
        position26: {
            title: "Rio",
            type: "yellow",
            owner: "none",
            price: 240,
            rent: [22, 110, 330, 800, 975, 1150],
            rating: 0,
            forsale: "y"
        },
        position27: {
            title: "Tokyo",
            type: "yellow",
            owner: "none",
            price: 240,
            rent: [22, 110, 330, 800, 975, 1150],
            rating: 0,
            forsale: "y"
        },
        position29: {
            title: "Paris",
            type: "yellow",
            owner: "none",
            price: 280,
            rent: [24, 120, 360, 850, 1025, 1200],
            rating: 0,
            forsale: "y"
        },
        position31: {
            title: "Berlin",
            type: "green",
            owner: "none",
            price: 300,
            rent: [26, 130, 390, 900, 1100, 1275],
            rating: 0,
            forsale: "y"
        },
        position32: {
            title: "Bejing",
            type: "green",
            owner: "none",
            price: 300,
            rent: [26, 130, 390, 900, 1100, 1275],
            rating: 0,
            forsale: "y"
        },
        position34: {
            title: "Moscow",
            type: "green",
            owner: "none",
            price: 320,
            rent: [28, 150, 450, 1000, 1200, 1400],
            rating: 0,
            forsale: "y"
        },
        position35: {
            title: "John F Kennedy",
            type: "airport",
            owner: "none",
            price: 200,
            rent: 25,
            rating: 0,
            forsale: "y"
        },
        position37: {
            title: "New York",
            type: "navy",
            owner: "player2",
            price: 350,
            rent: [35, 175, 500, 1100, 1300, 1500],
            rating: 0,
            forsale: "y"
        },
        position39: {
            title: "London",
            type: "navy",
            owner: "player2",
            price: 400,
            rent: [50, 200, 600, 1400, 1700, 2000],
            rating: 0,
            forsale: "y"
        },
        position12: {
            title: "Electro",
            type: "utility",
            owner: "none",
            price: 150,
            rent: 10,
            rating: 0,
            forsale: "y"
        },
        position28: {
            title: "Nuclear",
            type: "utility",
            owner: "none",
            price: 150,
            rent: 10,
            rating: 0,
            forsale: "y"
        },
        position2: {
            title: "Community Chest",
            type: "chest"
        },
        position17: {
            title: "Community Chest",
            type: "chest"
        },
        position33: {
            title: "Community Chest",
            type: "chest"
        },
        position7: {
            title: "Chance",
            type: "chance"
        },
        position22: {
            title: "Chance",
            type: "chance"
        },
        position36: {
            title: "Chance",
            type: "chance"
        },
        position10: {
            title: "Jailhouse",
            type: "jail"
        },
        position20: {
            title: "Coffee House",
            type: "coffee"
        },
        position30: {
            title: "Go to Jail",
            type: "jail"
        },
        position40: {
            title: "Go",
            type: "home"
        },
        position4: {
            title: "Income Tax",
            type: "tax",
            tax: 200
        },
        position38: {
            title: "Super Tax",
            type: "tax",
            tax: 100
        }
    };
}

function createCards() {
    chancecards = {
        chance1: {
            title: "Advance to go",
            type: "move",
            newposition: 40
        },
        chance2: {
            title: "Advance to London",
            type: "move",
            newposition: 39
        },
        chance4: {
            title: "Your ass is going to jail",
            type: "move",
            newposition: 10
        },
        chance9: {
            title: "Advance to Rome",
            type: "move",
            newposition: 24
        },
        chance10: {
            title: "Advance to Charles de Gaulle",
            type: "move",
            newposition: 15
        },
        chance11: {
            title: "Advance to Amsterdam",
            type: "move",
            newposition: 11
        },
        chance6: {
            title: "Go back 3 spaces",
            type: "movex",
            newposition: -3
        },
        chance14: {
            title: "No drink and driving mate1",
            type: "bill",
            bill: 20
        },
        chance15: {
            title: "Get out of Jail free card",
            type: "bill",
            bill: 150
        },
        chance7: {
            title: "Pay school fees",
            type: "bill",
            bill: 150
        },
        chance12: {
            title: "Speeding fine",
            type: "bill",
            bill: 150
        },
        chance5: {
            title: "Bank pays you dividend",
            type: "bonus",
            bonus: 40
        },
        chance13: {
            title: "You have won the competition",
            type: "bonus",
            bonus: 200
        },
        chance16: {
            title: "Your building loan matures",
            type: "bonus",
            bonus: 200
        },
        chance3: {
            title: "You are assessed for street repairs $40 per house $115 per hotel",
            type: "billx"
        },
        chance8: {
            title: "House repairs $25 per house $100 per hotel",
            type: "billx"
        }
    };
    chestcards = {
        chest1: {
            title: "Advance to go",
            type: "move",
            newposition: 40,
            bonus: 200
        },
        chest2: {
            title: "Advance to Cairo",
            type: "move",
            newposition: 1
        },
        chest3: {
            title: "Go to Jail",
            type: "move",
            newposition: 10
        },
        chest4: {
            title: "Pay hospital fees",
            type: "bill",
            bill: 100
        },
        chest5: {
            title: "Pay doctor fees",
            type: "bill",
            bill: 50
        },
        chest6: {
            title: "Pay insurance premium",
            type: "bill",
            bill: 50
        },
        chest7: {
            title: "Bank error. Collect $200",
            type: "bonus",
            bonus: 200
        },
        chest8: {
            title: "Annuity matures. Collect $100",
            type: "bonus",
            bonus: 100
        },
        chest9: {
            title: "You inherit $100",
            type: "bonus",
            bonus: 100
        },
        chest10: {
            title: "From sale of stock you get $50",
            type: "bonus",
            bonus: 50
        },
        chest11: {
            title: "Preference shares: $25",
            type: "bonus",
            bonus: 25
        },
        chest12: {
            title: "You have won second prize in a beauty contest. Collect $10.",
            type: "bonus",
            bonus: 10
        },
        chest13: {
            title: "It is your birthday. Collect $10.",
            type: "bonus",
            bonus: 10
        },
        chest14: {
            title: "You win the lottery. Collect $10",
            type: "bonus",
            bonus: 10
        }
    };
}

function createSets() {
    sets = {
        brown: {
            cost: 100,
            rating: 0,
            color: "#996600"
        },
        blue: {
            cost: 150,
            rating: 0,
            color: "#99CCFF"
        },
        pink: {
            cost: 300,
            rating: 0,
            color: "#FF0066"
        },
        orange: {
            cost: 300,
            rating: 0,
            color: "#FF6600"
        },
        red: {
            cost: 450,
            rating: 0,
            color: "#CC0000"
        },
        yellow: {
            cost: 450,
            rating: 0,
            color: "#FFFF00"
        },
        green: {
            cost: 600,
            rating: 0,
            color: "#006600"
        },
        navy: {
            cost: 400,
            rating: 0,
            color: "#003399"
        }
    };
}


我的代码有什么问题?在控制台日志中,我收到以下错误“ Uncaught SyntaxError:Unexpected token [”。与rent属性有关吗?很抱歉,如果问题不清楚,也不知道如何提出。

最佳答案

alert(positions['position1'].rent[0])


在'position1'周围加上引号。

我还建议,当只有一个租金时(如位置25),您仍然可以将其放在阵列中。像这样:rent : [25]

同样,在函数的第一行中,执行以下操作:

window.positions = { /* ... your positions ... */ }

关于javascript - javascript属性内的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21240613/

10-12 20:31