• 使用javascript随机生成斗地主玩家手牌


    学习javascript估摸着有半个多月了,好歹自己有过编程基础,学的还算轻松,不过js里的面向对象是真的打脑壳,但都但不懂,和我以前学过的c#简直相差太远

    今天写了个随机生成斗地主玩家手牌的代码,自己还蛮满意的,一溜叽滚下床,戳开电脑来分享一手

    虽然这种东西根本没啥用,哈哈

    卡牌列表数组元素类型:

    [1, "黑桃", 11, "K"]
    

      

    每一张卡牌为一个数组,有4个元素,0号元素代表当前花色大小,2号元素代表当前卡片数值大小,1号和3号都是字符串,用来表示卡牌表面信息

    比较大小分为两种情况,卡片数值不同和卡片数值相同

    卡片数值不同情况直接比较卡片数值大小来排序,卡片数值相同就需要比较花色大小来排序

    难点就在于将手牌进行排序,有了思路以后就好做了,直接贴上代码!

    //创建卡牌
    function CreatePoker() {
        let color = [[1, "黑桃",], [2, "红桃"], [3, "梅花"], [4, "方块"]];
        let number = [[1, "3"], [2, "4"], [3, "5"], [4, "6"], [5, "7"], [6, "8"], [7, "9"], [8, "10"], [9, "J"], [10, "Q"], [11, "K"], [12, "A"], [13, "2"]];
        //创建卡牌数组,每种颜色对应一种数值
        let pokerList = [];
        for (let i = 0; i !== color.length; i++) {
            for (let j = 0; j !== number.length; j++) {
                pokerList.push([...color[i], ...number[j]]);
            }
        }
        //添加大小王
        pokerList.push(["", "", 14, "小 王"]);
        pokerList.push(["", "", 15, "大 王"]);
        //将卡牌数组打乱,随机返回-1或者是1就可以乱排序
        pokerList.sort(() => {
            return Math.random() > 0.5 ? -1 : 1;
        });
        return pokerList;//最后将得到的卡牌数组返回
    }
    function GivePoker(pokerList) {
        //直接从乱序数组中剔除得到17项,然后排序
        let sortArr = SortPoker(pokerList.splice(0, 17));
        //格式化输出
        let str = "";
        for (let poker of sortArr) {
            str += poker[1] + poker[3] + "	";
        }
        return str;
    }
    //排序数组
    function SortPoker(pokerList) {
        pokerList.sort((poker1, poker2) => {
            //卡牌数值相同比较花色
            if (poker1[2] === poker2[2]) {
                return poker1[0] - poker2[0];
            }
            //卡牌数值不同比较数值
            return poker1[2] - poker2[2];
        });
        return pokerList;
    }
    let pokerList = CreatePoker();
    let player1Poker = GivePoker(pokerList);
    let player2Poker = GivePoker(pokerList);
    let player3Poker = GivePoker(pokerList);
    let lastPoker = GivePoker(pokerList);
    console.log("玩家1:" + player1Poker);
    console.log("玩家2:" + player2Poker);
    console.log("玩家3:" + player3Poker);
    console.log("底 牌:" + lastPoker);

    下午的时候写的代码有足足80行,回家后又思考优化后只有40行了,个人感觉良好,哈哈,膨胀了膨胀了,睡觉!明天继续努力学习!

  • 相关阅读:
    Codeforces Round #687 A. Prison Break
    最小生成树自用笔记(Kruskal算法+prim算法)
    Codeforces Round #686 (Div. 3)(A->D)(模拟,vector,数学)
    Acwing 852. spfa判断负环
    Linux内核分析_课程学习总结报告
    结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程
    深入理解系统调用
    基于mykernel 2.0编写一个操作系统内核
    何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?——参考试题
    TCP三次握手Linux源码解析
  • 原文地址:https://www.cnblogs.com/sbzy/p/9153339.html
Copyright © 2020-2023  润新知