目录
步骤:
1.生成扑克牌
- 首先定义一个空数组
cardArray
,用来存储生成出来的扑克牌。 - 定义了两个数组
number
和color
,分别存储扑克牌的数字和花色 - 使用两个 for 循环嵌套,将每个数字和每个花色组合起来,生成一张扑克牌对象
card
- 将生成的扑克牌对象
card
添加到cardArray
数组中 - 最后,添加两张大小王,也加入到
cardArray
数组中
<script>
cardArray=[];
number=["3","4","5","6","7","8","9","10","J","Q","K","A","2"];
color=["♠","♥","♣","♦"];
for (let i=0;i<number.length;i++){
for (let j=0;j<color.length;j++){
let card={
number:number[i],
color:color[j],
numWeight:i,
colWeight:j
}
cardArray.push(card);
}
}
cardArray.push({number:"大王",numWeight:15},{number:"小王",numWeight:14});
</script>
2. 洗牌
- 使用 for 循环遍历
cardArray
数组,用随机数(注意转成整数)生成随机下标iRand
- 使用解构赋值,将当前牌和随机下标对应的牌交换位置,从而实现洗牌的效果
<script>
for (let i = 0; i < cardArray.length; i++) {
let iRand = parseInt(Math.random()*cardArray.length );
[cardArray[i],cardArray[iRand]]=[cardArray[iRand],cardArray[i]];
}
</script>
3.发牌
- 首先定义了三个空数组
player1
、player2
和player3
,用来分别存储三个玩家手中的牌 - 使用 for 循环,每次循环都将
cardArray
数组中的前三张牌分别发给三个玩家 - 发牌的同时,将已经分配出去的牌从
cardArray
数组中移除,使用shift()
方法可以将数组的第一个元素删除并返回该元素的值
<script>
let player1=[];
let player2=[];
let player3=[];
for (let i=0;i<17;i++){
player1.push(cardArray[0]);
cardArray.shift();
player2.push(cardArray[0]);
cardArray.shift();
player3.push(cardArray[0]);
cardArray.shift();
}
</script>
4.排序
- 定义一个比较函数
compareWeight
,用来比较两张牌的权重。该函数首先比较两张牌的数字权重,如果相等则比较花色权重,最后返回比较结果 - 使用数组的
sort()
方法,对三个玩家手中的牌进行排序。sort()
方法接受一个比较函数作为参数,该函数用来指定排序的规则 - 对于每个玩家的牌,使用箭头函数
(a,b) => compareWeight(a,b)
作为比较函数,对牌按照权重进行升序排序
<script>
function compareWeight(a,b) {
let rs1=a.numWeight-b.numWeight;
let rs2=a.colWeight-b.colWeight;
return rs1===0?rs2:rs1;
}
player1.sort( (a,b) => compareWeight(a,b));
player2.sort( (a,b) => compareWeight(a,b));
player3.sort( (a,b) => compareWeight(a,b));
console.log( player1,player2,player3,"地主牌:",cardArray);
</script>