洗牌/展示牌到二十一点游戏 (Javascript)
Shuffle / display cards to a blackjack game (Javascript)
你知道为什么"card2"随机将一个对象放入数组吗?它应该总是将一个对象放入数组中。
const cards=[
{
card: '🂡',
value: '1'
},
{
card: '🂢',
value: '2'
},
{
card: '🂣',
value: '3'
},
{
card: '🂤',
value: '4'
},
{
card: '🂥',
value: '5'
},
{
card: '🂦',
value: '6'
},
{
card: '🂧',
value: '7'
},
{
card: '🂨',
value: '8'
},
{
card: '🂩',
value: '9'
},
{
card: '🂪',
value: '10'
}
];
var deck = [];
shuffleDeck = () =>{
var tempDeck = [...cards];
var card1 = [0];
var card2 = [0];
while(0 !== tempDeck.length) {
var randomIndex = Math.floor(Math.random() * tempDeck.length);
card1 = tempDeck.splice(randomIndex, 1);
card2 = tempDeck.splice(randomIndex, 1);
deck = [...card1, ...card2];
}
}
shuffleDeck();
for(var i = 0; i <= deck.length; i++){
console.log(deck[i]);
}
我想这个问题应该更清楚了...但是 运行 你应该并且认为代码应该洗牌我猜你的错误在那一行 deck = [...card1, ...card2];
因为你在循环,您当时只是将 2 张牌放入您的新牌组中,因此在下一次交互中它们将忽略最后的值并覆盖它,您应该使用 deck.push
在牌组中添加新牌。
const cards=[
{
card: '🂡',
value: '1'
},
{
card: '🂢',
value: '2'
},
{
card: '🂣',
value: '3'
},
{
card: '🂤',
value: '4'
},
{
card: '🂥',
value: '5'
},
{
card: '🂦',
value: '6'
},
{
card: '🂧',
value: '7'
},
{
card: '🂨',
value: '8'
},
{
card: '🂩',
value: '9'
},
{
card: '🂪',
value: '10'
}
];
var deck = [];
shuffleDeck = () => {
var tempDeck = [...cards];
var card1 = [0];
var card2 = [0];
while(0 !== tempDeck.length) {
var randomIndex = Math.floor(Math.random() * tempDeck.length);
card1 = tempDeck.splice(randomIndex, 1);
card2 = tempDeck.splice(randomIndex, 1);
deck.push(...card1, ...card2);
}
}
shuffleDeck();
for(var i = 0; i < deck.length; i++){
console.log(deck[i]);
}
您的代码中有两件事需要修复:
在 while
中,您只设置一次 randomIndex
并将其用于 card1
和 card2
,但是当您设置 card1
它使用 splice
并删除该索引,因此 card2 未定义。
FIX:设置 randomIndex
后再次设置 [=13] =]
在for
循环中,需要i < deck.length
而不是i <= deck.length
,这样可以避免未定义的值,因为当i
等于deck.length
应该是 2,deck 没有索引 2,它只有索引 0 和 1。
const cards = [{card: '🂡', value: '1'}, {card: '🂢', value: '2'}, {card: '🂣', value: '3'}, {card: '🂤', value: '4'}, {card: '🂥', value: '5'}, {card: '🂦', value: '6'}, {card: '🂧', value: '7'}, {card: '🂨', value: '8'}, {card: '🂩', value: '9'}, {card: '🂪', value: '10'}];
var deck = [];
shuffleDeck = () =>{
var tempDeck = [...cards];
var card1 = [0];
var card2 = [0];
while(0 !== tempDeck.length) {
var randomIndex = Math.floor(Math.random() * tempDeck.length);
card1 = tempDeck.splice(randomIndex, 1);
randomIndex = Math.floor(Math.random() * tempDeck.length);
card2 = tempDeck.splice(randomIndex, 1);
deck = [...card1, ...card2];
}
}
shuffleDeck();
for(var i = 0; i < deck.length; i++){
console.log(deck[i]);
}
你知道为什么"card2"随机将一个对象放入数组吗?它应该总是将一个对象放入数组中。
const cards=[
{
card: '🂡',
value: '1'
},
{
card: '🂢',
value: '2'
},
{
card: '🂣',
value: '3'
},
{
card: '🂤',
value: '4'
},
{
card: '🂥',
value: '5'
},
{
card: '🂦',
value: '6'
},
{
card: '🂧',
value: '7'
},
{
card: '🂨',
value: '8'
},
{
card: '🂩',
value: '9'
},
{
card: '🂪',
value: '10'
}
];
var deck = [];
shuffleDeck = () =>{
var tempDeck = [...cards];
var card1 = [0];
var card2 = [0];
while(0 !== tempDeck.length) {
var randomIndex = Math.floor(Math.random() * tempDeck.length);
card1 = tempDeck.splice(randomIndex, 1);
card2 = tempDeck.splice(randomIndex, 1);
deck = [...card1, ...card2];
}
}
shuffleDeck();
for(var i = 0; i <= deck.length; i++){
console.log(deck[i]);
}
我想这个问题应该更清楚了...但是 运行 你应该并且认为代码应该洗牌我猜你的错误在那一行 deck = [...card1, ...card2];
因为你在循环,您当时只是将 2 张牌放入您的新牌组中,因此在下一次交互中它们将忽略最后的值并覆盖它,您应该使用 deck.push
在牌组中添加新牌。
const cards=[
{
card: '🂡',
value: '1'
},
{
card: '🂢',
value: '2'
},
{
card: '🂣',
value: '3'
},
{
card: '🂤',
value: '4'
},
{
card: '🂥',
value: '5'
},
{
card: '🂦',
value: '6'
},
{
card: '🂧',
value: '7'
},
{
card: '🂨',
value: '8'
},
{
card: '🂩',
value: '9'
},
{
card: '🂪',
value: '10'
}
];
var deck = [];
shuffleDeck = () => {
var tempDeck = [...cards];
var card1 = [0];
var card2 = [0];
while(0 !== tempDeck.length) {
var randomIndex = Math.floor(Math.random() * tempDeck.length);
card1 = tempDeck.splice(randomIndex, 1);
card2 = tempDeck.splice(randomIndex, 1);
deck.push(...card1, ...card2);
}
}
shuffleDeck();
for(var i = 0; i < deck.length; i++){
console.log(deck[i]);
}
您的代码中有两件事需要修复:
在
while
中,您只设置一次randomIndex
并将其用于card1
和card2
,但是当您设置card1
它使用splice
并删除该索引,因此 card2 未定义。
FIX:设置randomIndex
后再次设置 [=13] =]在
for
循环中,需要i < deck.length
而不是i <= deck.length
,这样可以避免未定义的值,因为当i
等于deck.length
应该是 2,deck 没有索引 2,它只有索引 0 和 1。
const cards = [{card: '🂡', value: '1'}, {card: '🂢', value: '2'}, {card: '🂣', value: '3'}, {card: '🂤', value: '4'}, {card: '🂥', value: '5'}, {card: '🂦', value: '6'}, {card: '🂧', value: '7'}, {card: '🂨', value: '8'}, {card: '🂩', value: '9'}, {card: '🂪', value: '10'}];
var deck = [];
shuffleDeck = () =>{
var tempDeck = [...cards];
var card1 = [0];
var card2 = [0];
while(0 !== tempDeck.length) {
var randomIndex = Math.floor(Math.random() * tempDeck.length);
card1 = tempDeck.splice(randomIndex, 1);
randomIndex = Math.floor(Math.random() * tempDeck.length);
card2 = tempDeck.splice(randomIndex, 1);
deck = [...card1, ...card2];
}
}
shuffleDeck();
for(var i = 0; i < deck.length; i++){
console.log(deck[i]);
}