gpt4 book ai didi

javascript - jquery:避免过多的递归

转载 作者:行者123 更新时间:2023-12-03 07:20:57 26 4
gpt4 key购买 nike

我有一个脚本,可以将 54 张扑克牌随机分配给 4 个玩家,它将生成 2 个随机数来获得一张随机牌,类别号(从 1 到 4)表示:“红心、黑桃、方 block 、梅花”,以及卡号(从 1 到 13)。

问题是这个脚本中有太多的递归,那么我如何通过调用线程中的函数或类似的东西来避免这个错误?

我的代码:

$(document).ready(function(){
var human = [];
var east = [];
var west = [];
var north = [];
var used_cards = [];

distributeCards(north,$('#north'));
distributeCards(east,$('#east'),'vertical');
distributeCards(west,$('#west'));
distributeCards(human,$('#south'));

function distributeCards(array,container,view){
for(var i = 0; i < 13; i++){
var category,card;
do{
var uniqueCard = uniqueRandomCard();
}while(typeof uniqueCard === "undefined")
category = uniqueCard[0];
card = uniqueCard[1];
array.push(uniqueCard);
var category_name = '';
if(category === 1){
category_name = 'hearts';
}
else if(category === 2){
category_name = 'spades';
}
else if(category === 3){
category_name = 'diamonds';
}
else if(category === 4){
category_name = 'clubs';
}
if(card === 1){
card = 'ace';
}
else if(card === 11){
card = 'jack';
}
else if(card === 12){
card = 'queen';
}
else if(card === 13){
card = 'king';
}
if(view === 'vertical'){
$(container).children('.row').append('<img src="cards/backRotate.png" class="card"/>');
}
else if(view === 'horizontal'){
$(container).children('.row').append('<img src="cards/back.png" class="card"/>');
}
}
}
function randomNumberFromRange(min,max){
return Math.round(Math.floor(Math.random()*max)+min);
}
function uniqueRandomCard(){
var card = randomNumberFromRange(1, 13);
var category = randomNumberFromRange(1, 4);
if(!inAssocArray(category,card,used_cards)){
var array = [];
array[0] = category;
array[1] = card;
used_cards.push(array);
return array;
}
else{
uniqueRandomCard();
}
}
function inAssocArray(key,value,array){
var flag = false;
for(var i = 0; i < array.length; i++){
if(array[i][0] === key && array[i][1]=== value){
flag = true;
}
}
return flag;
}
});

最佳答案

按照您实现的方式修复递归非常简单。只需用 while 语句替换您的 call 和 if 语句即可。

function uniqueRandomCard(){
var card = randomNumberFromRange(1, 13);
var category = randomNumberFromRange(1, 4);
while(inAssocArray(category,card,used_cards)) {
card = randomNumberFromRange(1, 13);
category = randomNumberFromRange(1, 4);
}
var array = [];
array[0] = category;
array[1] = card;
used_cards.push(array);
return array;
}

话虽这么说,有一些基本的更好的方法来处理这样的有限集。存储未使用的卡片并从中随机选择要优越得多。

关于javascript - jquery:避免过多的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36211543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com