let play = document.querySelectorAll(".play");
let dizhupai = document.getElementById("dizhupai");
function creatPoker(){
    let paidui = [];
    let color = ["黑桃", "红桃", "梅花", "方块"];
    let number = ["3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"]
    for (let i = 0; i < number.length; i++) {
        let forColor = number[i];
        for (let j = 0; j < color.length; j++) {
            let forNum = color[j];
            paidui.push(
{
                    name:forColor + forNum,
                    order:i * 4 + j,
                    path:"../img/" + (i + 3) + "_" + (j + 1) + ".jpg"
                }
            )
        }
    }
    paidui.push(
        {
            name:"小王",
            order:52,
            path:"../img/16_1.jpg"
        }
    );
    paidui.push(
        {
            name:"大王",
            order:53,
            path:"../img/17_1.jpg"
        }
    );
    return paidui;
}
function shufflePoker(pokers){
    for (let i = 0; i < pokers.length; i++) {//通过循环随机的将牌进行交换,实现洗牌
        let ranNum = parseInt(Math.random() * pokers.length);
        [pokers[i], pokers[ranNum]] = [pokers[ranNum], pokers[i]];
    }
}
function dealPoker(pokers,...players){
    // let player = [[], [], []];
    while (pokers.length > 3) {//只要牌堆的牌大于3张,玩家继续摸牌
        for (let i = 0; i < players.length; i++) {//玩家3人轮流摸牌
            players[i].push(pokers.pop());
        }
    }
}
function orderPoker(...players){
    players.forEach(function (player) {//每个玩家将手里的牌理好
        //  players
        player.sort(function (a, b) {//a,b代表着排序过程中两个相互比较的元素
            return a.order - b.order;
        })
    });
}
function renderPocker(pokers,...players){
    dizhupai.innerHTML = "";
    let flag = true;
    for (let i = 0; i < players.length; i++) {
        let nowPlay = play[i];
        nowPlay.innerHTML = "";
        let k = 0;
        let timer = setInterval(function(){
            let newImg = document.createElement("img");
                nowPlay.appendChild(newImg);
                newImg.src = players[i][k].path;
                if (i == 0) {
                    newImg.style.left = (k * 20) + "px"
                } else if (i == 1 || i == 2) {
                    newImg.style.top = (k * 27) + "px"
                }
                if(k == players[i].length - 1){
                    clearInterval(timer);
                    if(flag){
                        for (let i = 0; i < pokers.length; i++) {
                            let pokerImg = document.createElement("img");
                            dizhupai.appendChild(pokerImg);
                            pokerImg.src = pokers[i].path;
                            pokerImg.style.left = (i * 20) + "px";
                        }
                    }
                    flag = false;
                }
                k++;
        },200);
        // for (let k = 0; k < players[i].length; k++) {
        //     let newImg = document.createElement("img");
        //     nowPlay.appendChild(newImg);
        //     newImg.src = players[i][k].path;
        //     if (i == 0) {
        //         newImg.style.left = (k * 20) + "px"
        //     } else if (i == 1 || i == 2) {
        //         newImg.style.top = (k * 27) + "px"
        //     }
        // }
    }
 
}
function run(){
    let pokers = creatPoker()
    shufflePoker(pokers);
    let players = [[],[],[]];
    dealPoker(pokers,...players)
    orderPoker(...players)
    renderPocker(pokers,...players)
}
let rePlaybtn = document.getElementById("rePlayBtn");
rePlaybtn.addEventListener("click", () => {
    run();
});

JS实现简单斗地主效果的更多相关文章

  1. 原生JS封装简单动画效果

    原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...

  2. JS实现简单时钟效果

    老师上课需要我们做一个时钟的小作业 ,我把它放在上面记录一下啦 表盘和时针我都是用的背景图的形式,然后绝对定位,通过调整left和top确定时针.分针.秒针的位置,transform-origin设置 ...

  3. 原生js实现简单打字机效果

    快过年了,公司基本没活,闲着也是闲着,就写了一个 打字机效果玩玩,感觉挺有意思的. 具体代码 请参见我的github,请戳这里 预览效果,请戳这里

  4. 如何通过JS实现简单抖动效果

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. 用JavaScript编写简单斗地主效果Es6

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 利用JS实现简单的瀑布流效果

    哈哈, 我又来啦, 在这一段时间里, 我简单的学习了一下javascript(JS), 虽然不是很懂啦, 但是我也简单的尝试着做了点小东西, 就比如现在流行的瀑布流效果, 经过我的努力终于成功的完成了 ...

  7. 史上最简单的js+css3实现时钟效果

    今天我看到百度搜索的时间那个效果不错,于是就产生了模仿一下的效果,不过为了节省时间,就随便布了下局,废话不多说,先看看效果吧,顺便把百度的效果也拿过来. 对比样子差了好多啊,但是基本功能都是实现了的, ...

  8. Query 一些简单的效果

    Query 一些简单的效果 $(selector).hide(speed,callback); 隐藏 $(selector).show(speed,callback); 显示 $(selector). ...

  9. HTML(.js) – 最简单的方式操作 DOM 的 JS 库

    HTML(.js) 是一个轻量的(压缩后~2kb) JavaScript 库,简化了与 DOM 交互的方法. 这个 JavaScript 库的方法可读性很好,并具有搜索和遍历 DOM 的方法.相比 j ...

随机推荐

  1. C# 生成海报,文本区域指定和换行,图片合成

    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string path = Server.MapPa ...

  2. ES - Index Templates 全局index模板

    1.Index Templates 之前我们聊过Dynamic template,它作用范围是特定的Index,如果我们想针对全局Index进行设置该如何操作呢? Index Templates 可以 ...

  3. global的使用

    对于一个全局变量,你的函数里如果只使用到了它的值,而没有对其赋值(指a = XXX这种写法)的话,就不需要声明global. 相反,如果你对其赋了值的话,那么你就需要声明global.声明global ...

  4. cplusplus标准库

    http://www.cplusplus.com/reference/   Standard C++ Library reference C Library The elements of the C ...

  5. 算法——001BitMap(位图)算法

    哈希表在查找定位操作上具有O(1)的常量时间,常用于做性能优化,但是内存毕竟是有限的,当数据量太大时用哈希表就会内存溢出了.而考虑对这些大数据进行存盘分批处理又有IO上的开销,性能又不能满足要求.这个 ...

  6. 工作中拓展的加密解密传输方式. DES对称加密传输.

    系统间通过xml传输, 不能采用明文, 就加密传输. 秘钥(真正有效的是前8位)存储于配置中. public static string EncryptStr(this string content, ...

  7. Nginx设置防止IP及非配置域名访问

    #设置IP或其它域名访问时返回500或304 server{ listen default; server_name _; ##标示空主机头 return ; } #设置IP或其它域名访问时重定向到w ...

  8. JS基础——原型和原型链

    1.相关知识点 (1)构造函数  (函数名首字母大写表示构造函数) function Foo(name,age){ this.name = name; this.age = age; this.cla ...

  9. 记一次深度系统安装至windows系统盘提示挂载为只读模式问题

    记一次深度系统安装至windows系统盘提示挂载为只读模式问题 来到新公司新电脑自己要安装deepin,安装的时候没考虑双系统直接装至默认win系统盘,导致deepin启动后提示如下: 提示多个挂载分 ...

  10. 2018-2019-2 20175328 《Java程序设计》第八周学习总结

    2018-2019-2 20175328 <Java程序设计>第八周学习总结 主要内容 泛型 泛型推出的主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 1.泛型类声 ...