カードデッキをシミュレートする次のコードに問題があります。Javascript whileループ(カードデッキシミュレーション)
デッキは正しく作成されます(それぞれ13個の要素(面の値)を含む4つの配列(スーツ)を含む1つの配列)と、G.test();それは正常に13のランダムなカードを引っ張っているが、39x "Empty"(合計52)を返します。
私は助けを求めるのが嫌いですが、私は一晩中問題を残してしまいましたが、私はまだこれが起こっている理由を見つけることができません。私は提供することができるすべての洞察に感謝します。
var G = {};
G.cards = [[], [], [], []];
G.newCard = function(v) { //currently a useless function, tried a few things
return v;
};
G.deck = {
n: function() { //new deck
var x; var list = [];
list.push(G.newCard("A"));
for (x = 2; x <= 10; x += 1) {
list.push(G.newCard(x.toString()));
}
list.push(G.newCard("J"), G.newCard("Q"), G.newCard("K"));
for (x = 0; x < G.cards.length; x += 1) {
G.cards[x] = list;
}
},
d: function() { //random card - returns suit & value
var s; var c; var v; var drawn = false; var n;
s = random(0, G.cards.length);
c = random(0, G.cards[s].length);
n = 0;
while (!drawn) {
if (G.cards[s].length > 0) {
if (G.cards[s][c]) {
v = G.cards[s].splice(c, 1);
drawn = true;
} else {
c = random(0, G.cards[s].length);
}
} else {
s = (s + 1 >= G.cards.length) ? 0 : s + 1;
n += 1;
console.log(s);
if (n >= G.cards.length) {
console.log(n);
return "Empty";
}
}
}
return {s: s, v: v[0]};
},
}; //G.deck
G.test = function() {
var x; var v;
G.deck.n();
for (x = 0; x < 52; x += 1) {
v = G.deck.d();
console.log(v);
}
};
これはランダム関数である、含むことを忘れて: ランダム=関数(MIN、MAX){ \tリターンMath.floor(MIN + Math.random()* MAX)。 }; – Deminal
そのランダム関数が問題の一部である可能性があります - この回答を参照してください:http://stackoverflow.com/a/1527820/3586783 – pacifier21
Nope!私がG.cards [s]からスプライシングするとき、それはただ4つの配列からスプライシングするだけではありません...私はまだ理由を理解していないが、少なくとも私はどこかで探し始めなければならない。 – Deminal