Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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
Javascript 计算6个数字的每个组合_Javascript_Arrays_Loops - Fatal编程技术网

Javascript 计算6个数字的每个组合

Javascript 计算6个数字的每个组合,javascript,arrays,loops,Javascript,Arrays,Loops,我更多的是一个媒体开发人员,而不是最好的程序员,但我发现自己需要更好地学习javascript。我正在创建一个数学纸牌游戏,其中人类玩家和自动玩家每人发6张牌。每个玩家必须组合(连接)三张牌,形成一个最上面的数字,另外三张牌形成最下面的数字。然后将这两个数字相减。对于自动玩家来说,我必须经历六张牌的可能组合,所以当两个数字相减时,它会尽可能接近目标数字。我不太擅长阵列,所以我开始测试每一种可能的组合,然后比较哪一种更接近(见下面的示例)。这是一种非常低效的编码方式,但我不知道如何做,否则。任何帮

我更多的是一个媒体开发人员,而不是最好的程序员,但我发现自己需要更好地学习javascript。我正在创建一个数学纸牌游戏,其中人类玩家和自动玩家每人发6张牌。每个玩家必须组合(连接)三张牌,形成一个最上面的数字,另外三张牌形成最下面的数字。然后将这两个数字相减。对于自动玩家来说,我必须经历六张牌的可能组合,所以当两个数字相减时,它会尽可能接近目标数字。我不太擅长阵列,所以我开始测试每一种可能的组合,然后比较哪一种更接近(见下面的示例)。这是一种非常低效的编码方式,但我不知道如何做,否则。任何帮助都将不胜感激

变量已经声明

alienTopNum = "" + alienNum1 + alienNum2 + alienNum3;
alienBottomNum = "" + alienNum4 + alienNum5 + alienNum6;
oldDiff = targetNum - (alienTopNum - alienBottomNum);
player.SetVar("AC1R1", alienNum1);
player.SetVar("AC2R1", alienNum2);
player.SetVar("AC3R1", alienNum3);
player.SetVar("AC4R1", alienNum4);
player.SetVar("AC4R1", alienNum5);
player.SetVar("AC4R1", alienNum6);
player.SetVar("ATR1", alienTopNum - alienBottomNum);
alienTopNum = "" + alienNum1 + alienNum2 + alienNum3;
alienBottomNum = "" + alienNum4 + alienNum6 + alienNum5;
newDiff = targetNum - (alienTopNum - alienBottomNum);
if (Math.abs(newDiff) < Math.abs(oldDiff)) {
    oldDiff = newDiff;
    player.SetVar("AC1R1", alienNum1);
    player.SetVar("AC2R1", alienNum2);   
    player.SetVar("AC3R1", alienNum3);
    player.SetVar("AC4R1", alienNum4);
    player.SetVar("AC4R1", alienNum6);   
    player.SetVar("AC4R1", alienNum5);
    player.SetVar("ATR1", alienTopNum - alienBottomNum);
}
alienTopNum=”“+alienNum1+alienNum2+alienNum3;
alienBottomNum=“”+alienNum4+alienNum5+alienNum6;
oldDiff=targetNum-(alienTopNum-alienBottomNum);
player.SetVar(“AC1R1”,alienNum1);
player.SetVar(“AC2R1”,alienNum2);
player.SetVar(“AC3R1”,alienNum3);
player.SetVar(“AC4R1”,alienNum4);
player.SetVar(“AC4R1”,alienNum5);
player.SetVar(“AC4R1”,alienNum6);
player.SetVar(“ATR1”,alienTopNum-alienBottomNum);
alienTopNum=“”+alienNum1+alienNum2+alienNum3;
alienBottomNum=“”+alienNum4+alienNum6+alienNum5;
newDiff=targetNum-(alienTopNum-alienBottomNum);
if(数学abs(newDiff)

等等……

将发牌存储在一个数组中,而不是存储在单个变量中,因为这使它们在生成排列时更容易处理。你没有说卡片可以有什么值,但是作为一个例子,如果你把排列作为一个数组,给一手
[1,2,3,4,5,6]

[ [1,2,3,4,5,6], [1,2,3,4,6,5], [1,2,3,5,4,6], ...etc. ]
然后你可以循环处理每个排列,取前三张“卡片”,最后三张,得到当前迭代的两个数字,减去它们,看看结果是否比之前迭代的结果更接近目标

下面使用我在中找到的数组置换函数来实现这一点。我不打算解释这个算法,因为你可以轻松地为自己搜索各种排列算法,但我在我的
bestPlay()
函数中添加了注释,解释我如何处理排列,以找出哪一个是一手牌的最佳分数

我还没有尝试使用您的
player
player.SetVar()
方法,但希望如果您研究了这个方法,您可以将其调整为与对象一起使用

你没有说这些牌可以有什么价值,所以我假设一副20张牌,重复数字0-9两次

功能最佳发挥(手部、目标){
var perms=permutator(hand);//获取hand的所有置换
var best=perms[0];//使用第一个作为初始最佳值
var bestDiff=差异(最佳);
对于(var i=1;i}
将发牌存储在数组中,而不是存储在单个变量中,因为这使它们在生成排列时更易于处理。你没有说卡片可以有什么值,但是作为一个例子,如果你把排列作为一个数组,给一手
[1,2,3,4,5,6]

[ [1,2,3,4,5,6], [1,2,3,4,6,5], [1,2,3,5,4,6], ...etc. ]
然后你可以循环处理每个排列,取前三张“卡片”,最后三张,得到当前迭代的两个数字,减去它们,看看结果是否比之前迭代的结果更接近目标

下面使用我在中找到的数组置换函数来实现这一点。我不打算解释这个算法,因为你可以轻松地为自己搜索各种排列算法,但我在我的
bestPlay()
函数中添加了注释,解释我如何处理排列,以找出哪一个是一手牌的最佳分数

我还没有尝试使用您的
player
player.SetVar()
方法,但如果您研究了这一点,希望可以将其调整为与您的对象一起使用