桌游说明
https://blog.duduzui.com/2013/06/dobble.html
规则设计:任意两张牌都必有且仅有一种相同符号
该桌游共有55张卡牌、每张卡牌有8种图案
与现行程式码不符,再想想
其他整理方向:
将产生排组、洗乱花色、洗牌分开
删去第一轮、直接以第二轮的逻辑产製全部
写test
程式码如下
function newDobble(num) { let pic = 0; let dobble = new Array(num); // let picNum=countPicNumber(num-1); for (i = 0; i < num; i++) { dobble[i] = new Array(); } //第一轮 //从第一张牌开始跟下一张牌给予相同的花色 //直到倒数第二张牌结束 for (i = 0; i < num - 1; i++) { dobble[Math.floor(i % num)].push(i); dobble[Math.floor((i + 1) % num)].push(i); pic++; //每一次分配完就花色+1 } // console.log('第一轮'); // console.log(dobble); // console.log('第一轮pic:'+pic); //第二轮 remained = num - 2; //第一张牌剩下总数-自身-次张还没配对 //下一张牌开始每次扣除前次已配对的部分,所以逐次减一 for (j = 0; j < num - 2; j++) { //从第一张牌开始比对除了下一张牌以外的牌 //分别给予相同的花色 //次张在第一轮分配过了,所以从+2那一张开始 //remained表示要逐次分配的次数,故每次减一 for (k = j; k < j + remained; k++) { dobble[j].push(pic); dobble[k + 2].push(pic); pic++; } remained--; } return dobble; // // console.log('第二轮'); // for(i=0;i<num;i++){ // console.log(dobble[i]); // } // console.log('卡片总数:'+num); // console.log('花色总数:'+pic);}//functionfunction countPicNumber(num) { if (num == 1) return 1 else return (num + countPicNumber(num - 1))}function randomPics(arrOfArr) {//打乱花色的排序 for (m = 0; m < arrOfArr.length; m++) { for (i = 0; i < arrOfArr[m].length; i++) { j = Math.floor((Math.random() * arrOfArr[m].length)); k = Math.floor((Math.random() * arrOfArr[m].length)); temp=arrOfArr[m][j]; arrOfArr[m][j] = arrOfArr[m][k]; arrOfArr[m][k]=temp; } }}function randomCards(num) {//打乱牌的排序 dobble = newDobble(num); for (i = 0; i < num; i++) { j = Math.floor((Math.random() * num)); k = Math.floor((Math.random() * num)); // console.log(j+','+k); temp=dobble[j] dobble[j] = dobble[k]; dobble[k]=temp } randomPics(dobble); for (i = 0; i < num; i++) { console.log(dobble[i]); } console.log('卡片总数:' + num);}console.log();randomCards(5);randomCards(6);randomCards(7);//比对单一阵列中是否有重複值//比对阵列之间是否必有重複值//比对阵列之间的重複值是否为唯一