我正在尝试通过Javascript开发一个简化的扑克游戏。我已经列出了给定玩家手中所有可能的牌组合,按其值排序,如下所示:
switch(sortedHand)
{
//Pair
case [1,1,4,3,2]: sortedHand.push(1,"Pair"); break;
case [1,1,5,3,2]: sortedHand.push(2,"Pair"); break;
case [1,1,5,4,2]: sortedHand.push(3,"Pair"); break;
case [1,1,5,4,3]: sortedHand.push(4,"Pair"); break;
case [1,1,6,3,2]: sortedHand.push(5,"Pair"); break;
case [1,1,6,4,2]: sortedHand.push(6,"Pair"); break;
case [1,1,6,4,3]: sortedHand.push(7,"Pair"); break;
case [1,1,6,5,2]: sortedHand.push(8,"Pair"); break;
case [1,1,6,5,3]: sortedHand.push(9,"Pair"); break;
case [1,1,6,5,4]: sortedHand.push(10,"Pair"); break;
尽管"sortedHand“数组成功地存储值(就像我在console.log中看到的那样),但switch()语句总是返回默认情况,并且每个人都会得到一个直接刷新。我担心这是我用来声明可能的数组值的文字方法,以便与整个"sortedHand“进行比较,但我不知道更好的方法。有没有可能以这种方式使用switch()?
发布于 2013-07-24 02:31:53
您可以尝试对数组的文本表示形式执行switch
。
switch(sortedHand.join(' '))
{
//Pair
case '1 1 4 3 2': sortedHand.push(1,"Pair"); break;
case '1 1 5 3 2': sortedHand.push(2,"Pair"); break;
case '1 1 5 4 2': sortedHand.push(3,"Pair"); break;
case '1 1 5 4 3': sortedHand.push(4,"Pair"); break;
// etc.
}
作为直接指定每种情况的另一种选择,也许可以使用对象构建一个函数调度表,并完全摆脱开关。
var dispatch = {};
// Build the table however you'd like, for your application
for (var i = 0; i < 10; i++) {
(function(i) {
var hand = ...; // Add your hand logic here
dispatch[hand] = function() { sortedHand.push(i, "Pair"); };
})(i);
}
// Execute your routine
dispatch[sortedHand.join(' ')]();
发布于 2013-07-24 02:34:21
一种更快、可能可重用、更灵活的方法是使用对象而不是case:
var ok= {
'1 1 4 3 2':1,
'1 1 5 3 2':2,
'1 1 5 4 2':3,
'1 1 5 4 3':4
}[ sortedHand.join(' ') ] ;
if(ok){ sortedHand.push( ok ,"Pair"); }
当一个输出依赖于一个输入时,对象工作得很好。如果你需要在每种情况下做五件事,那么你必须用例,但如果你只需要X变成Y,( 1:1),查找对象形状的表是理想的。
我想象一个RegExp可以在这里工作,我在一个connect4游戏中使用它们来识别一行中的4个,但是上面的逻辑表应该可以和你描述的一样好或者更好。
发布于 2013-07-24 02:32:55
这并不能完全满足您的要求,但是您可以使用sortedHand.join(',')
并将其与[1,1,1,2,5].join(',')
进行比较,后者将比较两个数组,如果它们的内容完全相同,则应该为真(请注意使用类型为strings
的number
!)不过,公平地说,我不能想象你为什么要这样设计你的逻辑。即使是一个简单的纸牌游戏,也有数十万种可能的牌。您可能会更好地使用underscore.js
的集合管理函数,因为它会更简单,也是一种更好的实践。
https://stackoverflow.com/questions/17818127
复制相似问题