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

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

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

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

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

輸出效果圖:

當我們已經(jīng)拿到牌數(shù)組了,像平時我們打牌是不是都是隨機發(fā)放手里的牌的?那我們在進行一個打亂。這時候我們需要用到一個隨機生成的函數(shù)和一個去重生成下標的數(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: "大王" })
}

//生成一個隨機數(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];
}

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

輸出效果圖:

在到最后我們需要一個排序。當 3 和 3 比肯定是沒有辦法比的是不是?我們在最開始拿到牌組的內(nèi)容的時候就定義了 黑桃 < 紅心 < 梅花 < 方塊 這時候我們需要對 牌的 內(nèi)容 和 數(shù)字 進行一個大小對對象的添加。然后再書寫一個函數(shù)進行一個排序。排序需要用到 sort sort的用意:對數(shù)組的元素進行排序,不是真實按照數(shù)字排列去排序的,按照字符進行一個比較。當需要比較數(shù)字需要重寫。例如sort((a,b)=> a-b)升序 sort((a,b)=> b-a) 降序! 在生成牌組里面需要添加 花色的大小 和 數(shù)字 的大小 ,最后進行一些列的優(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;
    }})
    
}
//生成一個隨機數(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實現(xiàn)撲克牌游戲的示例代碼的詳細內(nèi)容,更多關于JavaScript撲克牌游戲的資料請關注腳本之家其它相關文章!

相關文章

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

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

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

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

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

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

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

    JavaScript中的錯誤處理全面指南

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

    WebPack工具運行原理及入門教程

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

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

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

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

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

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

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

    TypeScript中正確使用interface和type的方法實例

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

    學習JavaScript設計模式之模板方法模式

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

最新評論

同德县| 常州市| 印江| 衡阳县| 濉溪县| 永泰县| 娱乐| 阆中市| 和林格尔县| 桂东县| 桂东县| 新源县| 抚顺县| 济阳县| 阳朔县| 措美县| 迭部县| 行唐县| 石林| 陇南市| 武清区| 紫阳县| 阿克陶县| 扬州市| SHOW| 河北省| 南郑县| 松滋市| 嫩江县| 丘北县| 郧西县| 平泉县| 沙坪坝区| 广德县| 蒙自县| 汝州市| 阿尔山市| 壤塘县| 台州市| 邵东县| 西畴县|