【发布时间】:2016-01-27 11:07:08
【问题描述】:
我正在用 JavaScript 编写扑克程序。我有一个 Hand 类,它具有“cards”、“value”和“valueCards”属性。 value 属性是对应手型的整数,valueCards 是也对应手型的五张牌的数组。例如,如果我原来的七张牌(包含在 cards 属性中)包含同花,则 this.value 将翻转为 6,并且 this.valueCards 将仅等于等于最高同花的五张牌。
我对每种手型都有一个方法,如果检测到该手型,它们都会更改 value 和 valueCards。我有一个名为 getValue 的值的访问器方法,所以当我创建一个方法来运行所有测试并保持最高的测试时,它看起来像这样:
POKER.Hand.prototype.getTrueValue = function () {
this.testStraightFlush();
if(this.value == POKER.HAND_TYPE.STRAIGHT_FLUSH){ return; }
this.testQuads();
if(this.value == POKER.HAND_TYPE.QUADS){ return; }
this.testFullHouse();
if(this.value == POKER.HAND_TYPE.FULL_HOUSE){ return; }
this.testFlush();
if(this.value == POKER.HAND_TYPE.FLUSH){ return; }
this.testStraight();
if(this.value == POKER.HAND_TYPE.STRAIGHT){ return; }
this.testTrips();
if(this.value == POKER.HAND_TYPE.TRIPS){ return; }
this.testTwoPair();
if(this.value == POKER.HAND_TYPE.TWO_PAIR){ return; }
this.testPair();
if(this.value == POKER.HAND_TYPE.PAIR){ return; }
this.getHighCards();
};
我的意思是,该方法效果很好。它只是困扰着我,就像也许我应该以不同的方式做这件事。这是否违反惯例?
【问题讨论】:
-
你想使用switch-statement
-
但是 switch 语句中的控制变量是什么?
-
你的函数
testStraightFlush、testQuads等的内容是否有很大不同? -
单独测试每只手没有多大意义。简单地测试相同等级的数量,那么您已经涵盖了除顺子和同花顺之外的所有内容。如果没有相同的排名,您可以测试顺子,然后(或同时)测试同花顺。
-
testStraightFlush 和 testQuads 是不同的。 testStraightFlush 首先测试同花,得到这些牌的花色,然后抓住该花色的所有牌,以防超过五张。然后,如果第一张牌的点数减去第五张牌的点数等于 4,则为同花顺。 Quads 是一种类似的机制。我尝试测试相同等级的数量。它变得非常混乱,我放弃了它。另外,我认为比较我的做法更容易比较手。也许我错了。
标签: javascript if-statement conventions