<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
首先,我們知道一副牌裡有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 來曬重,陣列的長度是 54 但是下標是 53 所以在生成亂數的時候需要主要辨別。然後需要用到 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) { return a.flower - b.flower; }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}) }
以上就是通過JavaScript實現撲克牌遊戲的範例程式碼的詳細內容,更多關於JavaScript撲克牌遊戲的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45