最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過JavaScript實(shí)現(xiàn)撲克牌游戲的示例代碼

 更新時(shí)間:2022年07月13日 11:52:17   作者:我的目標(biāo)是開458  
這篇文章主要為大家詳細(xì)介紹了JavaScript如何通過面向?qū)ο髮?shí)現(xiàn)一個(gè)簡單的撲克牌游戲,文中的示例代碼代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下

首先,我們知道一副牌里有54張牌,然后牌里的數(shù)字是從 3 - 2 的里面總共有13張牌,然后 4 中花色 分別是 ♠? ♥? ♣? ♦? 另外加上2個(gè)大小王!第一步:我們肯定需要有一個(gè)數(shù)組來裝牌吧? 然后再書寫一個(gè)函數(shù),我們知道有多少張牌,然后牌里有多少花色是不是應(yīng)該用一個(gè)雙重循環(huán)將 number 里面的內(nèi)容 和 flower 里面的內(nèi)容 進(jìn)行一個(gè)循環(huán)嵌入?最后在用 push 生成一個(gè)對(duì)象放到數(shù)組的后面?再到最后放入 大小王 。

const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2'];
const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊
/**
生成一個(gè)撲克牌,然后分發(fā)3副牌,1副牌中有17張牌,然后有四種顏色,底牌留三張。按照大小進(jìn)行排序
 * 54 張
 * 大小王
 * 張三: 17
 * 李四: 17
 * 王五: 17
 * 底牌: 3
 * 
 * 排序 方塊3 黑桃3 升序  黑桃3-方塊3 如果點(diǎn)數(shù)相同,按花色排
 */

語法:

//系統(tǒng)牌
const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2'];
const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊
//牌組
let arr = [];

//生成牌的函數(shù)
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: "大王" })
}

輸出效果圖:

當(dāng)我們已經(jīng)拿到牌數(shù)組了,像平時(shí)我們打牌是不是都是隨機(jī)發(fā)放手里的牌的?那我們?cè)谶M(jìn)行一個(gè)打亂。這時(shí)候我們需要用到一個(gè)隨機(jī)生成的函數(shù)和一個(gè)去重生成下標(biāo)的數(shù)組

語法:

//系統(tǒng)牌
const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2'];
const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊
//牌組
let arr = [];

//生成牌的函數(shù)
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: "大王" })
}

//生成一個(gè)隨機(jī)數(shù)
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];
}

詳解:當(dāng)我們知道需要發(fā)牌的時(shí)候是隨機(jī)生成的字牌,然后我們已經(jīng)知道有54張牌,然后需要不重復(fù)的下標(biāo)需要用到 Set 來曬重,數(shù)組的長度是 54 但是下標(biāo)是 53 所以在生成隨機(jī)數(shù)的時(shí)候需要主要辨別。然后需要用到 map map的用意:通過指定函數(shù)處理數(shù)組(遍歷數(shù)組)的每個(gè)元素,并操作數(shù)組的元素或者下標(biāo),并返回處理后的數(shù)組。 當(dāng)我們已經(jīng)得到下標(biāo)了是不是需要將 arr 里面的元素進(jìn)行找到,然后并將進(jìn)行返回出來,然后再使用 slice slice的用意:用于把數(shù)組中的字符串元素轉(zhuǎn)換成數(shù)字?jǐn)?shù)組,元素是通過指定的分隔符進(jìn)行分隔的。進(jìn)行一個(gè)返回接收 我們知道 zhangsan、wangwu、lisi 是有 17 張牌的 而底牌只有三張可以得到手牌。并將函數(shù)里面的內(nèi)容返回出去進(jìn)行一個(gè)接收輸出。

輸出效果圖:

在到最后我們需要一個(gè)排序。當(dāng) 3 和 3 比肯定是沒有辦法比的是不是?我們?cè)谧铋_始拿到牌組的內(nèi)容的時(shí)候就定義了 黑桃 < 紅心 < 梅花 < 方塊 這時(shí)候我們需要對(duì) 牌的 內(nèi)容 和 數(shù)字 進(jìn)行一個(gè)大小對(duì)對(duì)象的添加。然后再書寫一個(gè)函數(shù)進(jìn)行一個(gè)排序。排序需要用到 sort sort的用意:對(duì)數(shù)組的元素進(jìn)行排序,不是真實(shí)按照數(shù)字排列去排序的,按照字符進(jìn)行一個(gè)比較。當(dāng)需要比較數(shù)字需要重寫。例如sort((a,b)=> a-b)升序 sort((a,b)=> b-a) 降序! 在生成牌組里面需要添加 花色的大小 和 數(shù)字 的大小 ,最后進(jìn)行一些列的優(yōu)化代碼如下:

語法:

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;
    }})
    
}
//生成一個(gè)隨機(jī)數(shù)
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實(shí)現(xiàn)撲克牌游戲的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于JavaScript撲克牌游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Bootstrap模態(tài)框使用詳解

    Bootstrap模態(tài)框使用詳解

    這篇文章主要為大家詳細(xì)介紹了Bootstrap模態(tài)框的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 異步加載JS、CSS代碼(推薦)

    異步加載JS、CSS代碼(推薦)

    這篇文章主要介紹了異步加載JS、CSS代碼的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • 用javascript實(shí)現(xiàn)放大鏡效果

    用javascript實(shí)現(xiàn)放大鏡效果

    這篇文章主要為大家詳細(xì)介紹了用javascript實(shí)現(xiàn)放大鏡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript中的錯(cuò)誤處理全面指南

    JavaScript中的錯(cuò)誤處理全面指南

    在JavaScript開發(fā)中,錯(cuò)誤處理是一個(gè)不可忽視的重要環(huán)節(jié),本文將深入探討JavaScript中的錯(cuò)誤處理機(jī)制,包括錯(cuò)誤的類型、捕獲與拋出錯(cuò)誤的方法,需要的可以參考下
    2024-10-10
  • WebPack工具運(yùn)行原理及入門教程

    WebPack工具運(yùn)行原理及入門教程

    這篇文章主要介紹了WebPack工具運(yùn)行原理及入門教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 微信小程序 scroll-view的使用案例代碼詳解

    微信小程序 scroll-view的使用案例代碼詳解

    這篇文章主要介紹了微信小程序 scroll-view的使用案例分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 一文帶你深入了解JavaScript中的閉包

    一文帶你深入了解JavaScript中的閉包

    閉包(closure)是一個(gè)函數(shù)以及其捆綁的周邊環(huán)境狀態(tài)的引用的組合,就是讓開發(fā)者可以從內(nèi)部函數(shù)訪問外部函數(shù)的作用域,下面下面小編就來和大家深入聊聊它的使用吧
    2023-07-07
  • 41個(gè)Web開發(fā)者必須收藏的JavaScript實(shí)用技巧

    41個(gè)Web開發(fā)者必須收藏的JavaScript實(shí)用技巧

    41個(gè)Web開發(fā)者必須收藏的JavaScript實(shí)用技巧,分享給大家,感興趣的小伙伴們可以參考一下
    2016-07-07
  • TypeScript中正確使用interface和type的方法實(shí)例

    TypeScript中正確使用interface和type的方法實(shí)例

    在ts中定義類型由兩種方式:接口(interface)和類型別名(type alias),interface只能定義對(duì)象類型,下面這篇文章主要給大家介紹了關(guān)于TypeScript中正確使用interface和type的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 學(xué)習(xí)JavaScript設(shè)計(jì)模式之模板方法模式

    學(xué)習(xí)JavaScript設(shè)計(jì)模式之模板方法模式

    這篇文章主要為大家介紹了JavaScript設(shè)計(jì)模式中的模板方法模式,對(duì)JavaScript設(shè)計(jì)模式感興趣的小伙伴們可以參考一下
    2016-01-01

最新評(píng)論

沽源县| 宿州市| 龙海市| 黎平县| 油尖旺区| 东平县| 徐州市| 潞城市| 眉山市| 隆林| 崇信县| 南通市| 扶余县| 普宁市| 瑞安市| 高清| 禹城市| 织金县| 阜新市| 天峻县| 淮滨县| 电白县| 兰坪| 那坡县| 阳信县| 安新县| 柏乡县| 休宁县| 兴城市| 石棉县| 都江堰市| 财经| 吐鲁番市| 广宁县| 满城县| 涟水县| 金川县| 永宁县| 平度市| 宜章县| 湟源县|