通過JavaScript實現撲克牌遊戲的示例代碼

首先,我們知道一副牌裡有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撲克牌遊戲的資料請關註WalkonNet其它相關文章!

推薦閱讀: