Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 actionscript 3.0如何将算法合并到我的代码中?_Actionscript 3 - Fatal编程技术网

Actionscript 3 actionscript 3.0如何将算法合并到我的代码中?

Actionscript 3 actionscript 3.0如何将算法合并到我的代码中?,actionscript-3,Actionscript 3,我是ActionScript3.0新手,我正在尝试使一副牌洗牌,我已经成功了,但我的问题是我的牌被重复了,所以洗牌后我在52张牌组中有同一张牌的副本。我正在尝试创建一个德州holdem游戏 我发现了这个讨论,但它没有告诉我如何将Fisher–Yates算法合并到我的代码中。我已经尝试了这里和其他网站上建议的几种不同方法,但都没有效果(我认为问题在于我缺乏经验) 有没有人能给我一个例子,说明如何将其整合到我的代码中,或者给我一个链接,说明如何正确地做到这一点 提前谢谢 保罗 包src.CardDe

我是ActionScript3.0新手,我正在尝试使一副牌洗牌,我已经成功了,但我的问题是我的牌被重复了,所以洗牌后我在52张牌组中有同一张牌的副本。我正在尝试创建一个德州holdem游戏

我发现了这个讨论,但它没有告诉我如何将Fisher–Yates算法合并到我的代码中。我已经尝试了这里和其他网站上建议的几种不同方法,但都没有效果(我认为问题在于我缺乏经验)

有没有人能给我一个例子,说明如何将其整合到我的代码中,或者给我一个链接,说明如何正确地做到这一点

提前谢谢

保罗

包src.CardDeck
{
公共级卡片组
{
公共变量allCards:Array=[];
公共var卡名:数组;
公共值:数组;
公共变量游戏类型:字符串;
公共变量drawnCards:uint=0;
公共功能卡片组(游戏:字符串)
{
游戏类型=游戏;
卡片名=[“A”,“2”,“3”,
“四”、“五”、“六”,
“七”、“八”、“九”,
“十”、“杰克”、“女王”、“国王”];
如果(游戏类型==“texasholdem”)
{
cardValues=[1,2,3,4,5,6,7,8,9,10,10,10];
}
制作套装(“黑桃”);
makeSuit(“心脏”);
人造西装(“钻石”);
makeSuit(“俱乐部”);
}
私有函数makeSuit(suitString:String):void
{
var卡:对象;
对于(变量i:uint=0;i
错误注意:

var shuffledArray:Array = [allCards.length];
使用ShuffleArray[0]=allCards.length的单个元素生成数组。 事实上,您不需要预先分配它,只需说:

var shuffledArray: Array = []; 
以下是经典的Fisher-Yates版本:

public function shuffleFisherYates():Array {
var shuffledArray:Array = [];
var randomCardIndex: int;
    do {
        randomCardIndex = Math.floor(Math.random()* allCards.length);
        shuffledArray.push(allCards[randomCardIndex]); // add to mix
        allCards.splice(randomCardIndex,1); // remove from deck
    }while(allCards.length); // Meaning while allCards.length != 0
    return shuffledArray;
}
以下是Durstenfeld的(就地)版本:

错误提示:

var shuffledArray:Array = [allCards.length];
使用ShuffleArray[0]=allCards.length的单个元素生成数组。 事实上,您不需要预先分配它,只需说:

var shuffledArray: Array = []; 
以下是经典的Fisher-Yates版本:

public function shuffleFisherYates():Array {
var shuffledArray:Array = [];
var randomCardIndex: int;
    do {
        randomCardIndex = Math.floor(Math.random()* allCards.length);
        shuffledArray.push(allCards[randomCardIndex]); // add to mix
        allCards.splice(randomCardIndex,1); // remove from deck
    }while(allCards.length); // Meaning while allCards.length != 0
    return shuffledArray;
}
以下是Durstenfeld的(就地)版本:


假设您的洗牌代码是正确的,我认为您看到重复牌的一个原因是,在getRandomCard()方法中,您没有考虑已绘制的牌。你随机生成一个索引并返回数组中的卡…但该卡仍在数组中,并且有可能再次随机生成相同的索引,从而返回相同的卡。

假设你的洗牌代码没有问题,我认为你看到重复卡的原因之一是在getRandomCard()中方法时,您不会对已提取的卡进行记帐。你随机生成一个索引,然后将卡片返回到数组中……但该卡片仍然在数组中,并且有可能再次随机生成相同的索引,从而返回相同的卡片。

要学习OOP,我还有很长的路要走。非常感谢lhsan现在编译没有错误,但是您可以快速查看一下。谢谢mitim shuffling,没有错误,但是我还在学习,所以你能帮我把它分解一下吗谢谢。你能不重复地抽牌吗?还是你原来的问题仍然存在?看看你上面链接的其他问题中的代码,看起来你已经开始使用shuffling了(我自己快速看了一下)。我在最初的回答中的意思是,假设你有一副牌,你想通过从1到52中选择一个随机数来抽一张。您可以这样做,但您只是在getRandomCard()方法中检查该号码处的卡。实际上,你并没有把那张牌移到任何地方,表明它已经从牌组中抽出。因此,如果您碰巧再次选择相同的数字(这可以通过Math.random()实现),您将得到相同的卡片结果;拾取阵列,即黑桃王牌等,因为我现在获得[object object]52次。同样感谢mitim你们帮了大忙。如果你想感谢Ihsan,我想你应该对他的帖子发表评论。我要学习OOP还有很长的路要走。非常感谢lhsan现在编译没有错误,但是您可以快速查看一下。谢谢mitim shuffling,没有错误,但是我还在学习,所以你能帮我把它分解一下吗谢谢。你能不重复地抽牌吗?还是你原来的问题仍然存在?看看你上面链接的其他问题中的代码,看起来你已经开始使用shuffling了(我自己快速看了一下)。我在最初的回答中的意思是,假设你有一副牌,你想通过从1到52中选择一个随机数来抽一张。您可以这样做,但您只是在getRandomCard()方法中检查该号码处的卡。你不是真的