Dealing cards in Javascript



我试图创建一个函数来处理从javascript中的甲板牌,但当我在我的交易函数中为未来的对象属性创建一个参数时,它返回属性为未定义。为什么会发生这种情况?

//Creates the deck
var deck = Math.ceil(Math.random() * 52) + 1;
var Ace = 1;
var Face = 10;
if (deck % 13 == 1) {
deck = Ace;
} else if (deck % 13 === 11 || deck % 13 === 12 || deck % 13 === 0) {
    deck = Face;
} else if (deck % 13 === 2) {
    deck = 2;
} else if (deck % 13 === 3) {
    deck = 3;
} else if (deck % 13 === 4) {
    deck = 4;
} else if (deck % 13 === 5) {
    deck = 5;
} else if (deck % 13 === 6) {
    deck = 6;
} else if (deck % 13 === 7) {
    deck = 7;
} else if (deck % 13 === 8) {
    deck = 8;
} else if (deck % 13 === 9) {
    deck = 9;
} else {
    deck = 10;
}
//Creates the player as an object
function Player(pcard1) {
    pcard1 = pcard1;
}
//Deals a random card out of the deck
var deal = function (pob) {
    pob = deck;
};
deal(Player.pcard1);
alert(Player.pcard1);

在看了一些评论之后,一些初步的注意事项。我猜你错过了一些关于Javascript工作原理的基础知识:

  1. Player是一个函数,这是一个很好的起点。然后尝试访问其中的一个成员。这只有在从函数实例化一个新对象之后才有可能,使用它作为构造函数:

    var player = new Player(card_value);
    player.pcard1; // this is the public member of a Player instance
    
  2. Deal函数要么返回一个值,要么遵循前面提到的原则;

  3. 这是不清楚(虽然两者都是正确的)为什么你使用"function FunctionName",然后"var FunctionName = function"的方法。

也就是说,您可以完全跳过长if/else块,用更结构化的方法替换它:
var Ace = 1;
var Face = 10;
var symbols = [Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Face, Face, Face];
var deal = function() {
    var card = Math.random() * 51;
    return symbols[Math.floor(card % 12)];
}
var Player = function(card_value) {
    this.card = card_value;
}
var card_value = deal();
var player = new Player(card_value);
alert(player.card);

然后你可以给玩家分配一张新卡:

player.card = deal();

请记住,您可以将任何成员附加到player:

player.name = "Rambo";

通过传递Player.pcard1,您只会将变量的当前值传递给bob参数,无论您在bob上做什么都不适用于Player.pcard1

你应该为不同的参数写不同的函数。

//Creates the player as an object
function Player(pcard1) {
    Player.pcard1 = pcard1;
}
//Deals a random card out of the deck
var deal = function () {
    Player.pcard1 = deck;
};
var deal2=function(){
    Player.id="hello";   
}
deal();
deal2();
alert(Player.pcard1);
alert(Player.id);

(或)

写函数返回值:

function getDeckValue(){
        return deck;
 }
 function getID(){
        return "1234";
  }
 Player.pcard1=getDeckValue();
 Player.id=getID();

(或)

使用@sixFingers指出的灵活的javascrit概念,定义一个类,实例化它,编写成员函数等。通过这种方式,您可以访问Player.variable等。

优秀的教程(我的意思是)在javascript的jquery开发人员:高级javascript。它涉及所有你想要的面向对象概念,并讨论了许多javascript的特性,你在w3schools上找不到。

EDIT:第二个示例的工作代码

    //Creates the deck
var deck = Math.ceil(Math.random() * 52) + 1;
var Ace = 1;
var Face = 10;
if (deck % 13 == 1) {
    deck = Ace;
} else if (deck % 13 === 11 || deck % 13 === 12 || deck % 13 === 0) {
    deck = Face;
} else if (deck % 13 === 2) {
    deck = 2;
} else if (deck % 13 === 3) {
    deck = 3;
} else if (deck % 13 === 4) {
    deck = 4;
} else if (deck % 13 === 5) {
    deck = 5;
} else if (deck % 13 === 6) {
    deck = 6;
} else if (deck % 13 === 7) {
    deck = 7;
} else if (deck % 13 === 8) {
    deck = 8;
} else if (deck % 13 === 9) {
    deck = 9;
} else {
    deck = 10;
}
//Creates the player as an object
function Player(pcard1){
   Player.pcard1=pcard1;   
}
function getDeckValue(){
        return deck;
 }
 function getID(){
        return "1234";
  }
 Player.pcard1=getDeckValue();
 Player.id=getID();
alert(Player.pcard1);
alert(Player.id);

最新更新