我們說下想要實現,一副牌里有54張,我們可以知道 3 - 2 的牌總共有13張,這分為4個花色是 ?? ?? ?? ?? 另外加上2個大小王!第一步:形成一個數組, 就要寫一個函數,利用牌數量和花色,這樣可以用來形成一個雙重循環將 number 里面的內容 和 flower 里面的內容 進行一個循環嵌入?最后在用 push 生成一個對象放到數組的后面?再到最后放入 大小王 。
const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2']; const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊 /** 生成一個撲克牌,然后分發3副牌,1副牌中有17張牌,然后有四種顏色,底牌留三張。按照大小進行排序 * 54 張 * 大小王 * 張三: 17 * 李四: 17 * 王五: 17 * 底牌: 3 * * 排序 方塊3 黑桃3 升序 黑桃3-方塊3 如果點數相同,按花色排 */
語法:
//系統牌 const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2']; const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊 //牌組 let arr = []; //生成牌的函數 poker(); //生成一副牌 function poker() { for (let n = 0; n < number.length; n++) { for (let j = 0; j < flower.length; j++) { arr.push({ name: flower[j] + number[n]}) } } arr.push({ name: "小王" }, { name: "大王" }) }
輸出效果圖:
都知道牌要隨機,那我們在進行一個打亂。可以添加一個隨機生成的函數和一個去重生成下標的數組。
語法:
//系統牌 const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2']; const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊 //牌組 let arr = []; //生成牌的函數 poker(); //打亂后的拆開后的牌組 let [zhangsan, wangwu, lisi, d] = create(); //打印輸出 console.log(zhangsan); console.log(wangwu); console.log(lisi); console.log(d); //生成一副牌 function poker() { for (let n = 0; n < number.length; n++) { for (let j = 0; j < flower.length; j++) { arr.push({ name: flower[j] + number[n]}) } } arr.push({ name: "小王" }, { name: "大王" }) } //生成一個隨機數 function random(min, max) { if (max == undefined) { max = min; min = 0; } if (min > max) { [min, max] = [max, min]; } let number = parseInt(Math.random() * (max - min + 1) + min) return number; } //打亂 function create() { let a = new Set(); while (a.size < 54) { a.add(random(0, 53)); } let arrindex = [...a]; arr = arrindex.map(item => arr[item]); let zhangsan = arr.slice(0, 17); let wangwu = arr.slice(17, 34); let lisi = arr.slice(34, 51); let d = arr.slice(51); return [zhangsan, wangwu, lisi, d]; }
詳解:可以隨機54張牌,這里就是不重復的下標需要用到 Set 來曬重,但我們知道需要隨機機數的時候需要主要辨別。那就要用到map map的用意:通過指定函數處理數組(遍歷數組)的每個元素,并操作數組的元素或者下標,并返回處理后的數組。 下標,我們可以用 arr 里面的元素進行找到,然后并將進行返回出來,然后再使用 slice slice的用意:用于把數組中的字符串元素轉換成數字數組,元素是通過指定的分隔符進行分隔的。進行一個返回接收 我們知道 zhangsan、wangwu、lisi 是有 17 張牌的 而底牌只有三張可以得到手牌。并將函數里面的內容返回出去進行一個接收輸出。
輸出效果圖:
在到最后我們需要一個排序。當 3 和 3 比肯定是沒有辦法比的是不是?我們首先會對牌定義花色,再去對比數組。那我們要寫一個函數進行一個排序。排序需要用到 sort sort的用意:對數組的元素進行排序,不是真實按照數字排列去排序的,按照字符進行一個比較。當需要比較數字需要重寫。例如sort((a,b)=> a-b)升序 sort((a,b)=> b-a) 降序! 在生成牌組里面需要添加 花色的大小 和 數字 的大小 ,最后進行一些列的優化代碼如下:
語法:
const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2']; const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊 let arr = []; poker(); let [zhangsan, wangwu, lisi, d] = create(); sort(zhangsan); sort(wangwu); sort(lisi); sort(d); console.log("張三:",zhangsan); console.log("王五:",wangwu); console.log("王五:",lisi); console.log("底牌:",d); //排序 function sort(arr) { arr.sort((a,b)=>{if (a.number == b.number) {</p> <p> return a.flower - b.flower;</p> <p> }else{ return a.number - b.number; }}) } //生成一個隨機數 function random(min, max) { if (max == undefined) { max = min; min = 0; } if (min > max) { [min, max] = [max, min]; } let number = parseInt(Math.random() * (max - min + 1) + min) return number; } //打亂 function create() { let a = new Set(); while (a.size < 54) { a.add(random(0, 53)); } let arrindex = [...a]; arr = arrindex.map(item => arr[item]); let zhangsan = arr.slice(0, 17); let wangwu = arr.slice(17, 34); let lisi = arr.slice(34, 51); let d = arr.slice(51); return [zhangsan, wangwu, lisi, d]; } //生成一副牌 function poker() { for (let n = 0; n < number.length; n++) { for (let j = 0; j < flower.length; j++) { arr.push({ name: flower[j] + number[n],flower:j,number:n}) } } arr.push({ name: "小王" ,number:53}, { name: "大王" ,number:54}) }
請關注我們其它相關文章!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/127822.html
摘要:原文從零到一,擼一個在線斗地主上篇作者背景朋友來深圳玩,若說到在深圳有什么好玩的,那當然是宅在家里斗地主了可是天算不如人算,撲克牌丟了幾張不全大熱天的,誰愿意出去買牌啊。 原文:從零到一,擼一個在線斗地主(上篇) | AlloyTeam作者:TAT.vorshen 背景:朋友來深圳玩,若說到在深圳有什么好玩的,那當然是宅在家里斗地主了!可是天算不如人算,撲克牌丟了幾張不全……大熱天的,...
摘要:系統結構系統考慮使用和實現服務器端邏輯,前端使用。邏輯流程主要邏輯包括用戶進入游戲等待對家進入游戲游戲過程結束統計這個過程。 1. 系統結構 系統考慮使用Nodejs和SocketIo實現服務器端邏輯,前端使用HTML5。showImg(https://segmentfault.com/img/remote/1460000007643089); 2. 邏輯流程 1 . 主要邏輯包括用戶...
摘要:系統結構系統考慮使用和實現服務器端邏輯,前端使用。邏輯流程主要邏輯包括用戶進入游戲等待對家進入游戲游戲過程結束統計這個過程。 1. 系統結構 系統考慮使用Nodejs和SocketIo實現服務器端邏輯,前端使用HTML5。showImg(https://segmentfault.com/img/remote/1460000007643089); 2. 邏輯流程 1 . 主要邏輯包括用戶...
摘要:原文從零到一,擼一個在線斗地主下篇作者上篇回顧我們說了斗地主游戲的渲染展示部分,最后也講了下中交互的情況,下篇的重點就是游戲邏輯。 原文:從零到一,擼一個在線斗地主(下篇) | AlloyTeam作者:TAT.vorshen 上篇回顧:我們說了斗地主游戲的渲染展示部分,最后也講了下canvas中交互的情況,下篇的重點就是游戲邏輯。 邏輯主要分成兩塊:流程邏輯和撲克牌對比邏輯。 gith...
閱讀 561·2023-03-27 18:33
閱讀 750·2023-03-26 17:27
閱讀 647·2023-03-26 17:14
閱讀 603·2023-03-17 21:13
閱讀 537·2023-03-17 08:28
閱讀 1823·2023-02-27 22:32
閱讀 1315·2023-02-27 22:27
閱讀 2199·2023-01-20 08:28