美文网首页前端社团
两人斗地主比较大小

两人斗地主比较大小

作者: wuyumumu | 来源:发表于2016-11-18 20:36 被阅读9次

    用状态机先来判断出牌的类型

    将用户和对方出的牌的面值分别存到数组ownValue和oppValue里面,每次读取数组中的一个数,通过每次读取判断出牌的类型。

    var ONE="ONE",
        TWO="TWO",
        TWO_2="TWO_2",
        THREE="THREE",
        THREE_2="THREE_2",
        FOUR="FOUR",
        FOUR_2="FOUR_2",
        FIVE="FIVE",
        SIX="SIX",//飞机
        BIGGEST="BIGGEST",//大小王炸弹
        ERROR="ERROR";
    
    function typeMachine(type,n,m){
        switch(type){
            case ONE:
                if(n==m){
                    type=TWO;
                } else if(n==m-1){
                    type=TWO_2;
                } else if(n==m+1){
                    type=BIGGEST;
                }
                else{
                    type=ERROR;
                }
                break;
            case TWO:
                if(n==m){
                    type=THREE;
                } else if(n==m-1){
                    type=THREE_2;
                } else{
                    type=ERROR;
                }
              break;
            case TWO_2:
                if(n==m-1){
                    type=TWO_2;
                } else{
                    type=ERROR;
                }
                break;
            case THREE:
                if(n==m){
                    type=FOUR;
                } else if(n==m-1){
                    type=FOUR_2;
                } else {
                    type=ERROR;
                }
                break;
            case THREE_2:
                if(n==m){
                    type=TWO;
                } else if(n==m-1){
                    type=THREE_2;
                } else{
                    type=ERROR;
                }
                break;
            case FOUR:
                type=ERROR;
                break;
            case FOUR_2:
                if(n=m){
                    type=FIVE;
                } else {
                    type=ERROR;
                }
                break;
            case FIVE:
                if(n==m){
                    type=SIX;
                } else {
                    type=ERROR;
                }
                break;
            case SIX:
                type=ERROR;
                break;
            default:
                break;
        }
        return type;
    }
    

    获取面值

    function getValue(ownPoker,oppPoker){
        for(var i=0;i<ownPoker.length;i++){
            ownValue[i]=ownPoker[i]%100;
        }
        for(var i=0;i<pokerArray.oppPoker.length;i++) {
            oppValue[i] = oppPoker[i] % 100;
        }
    }
    

    获取对方和用户出的牌的类型

    function getType(array) {
        var type=ONE;
        var fir,next;
        for(var i=0;i<array.length-1;i++){
            fir=array[i];
            next=array[i+1];
            type=typeMachine(type,fir,next);
        }
        return type;
    }
    

    比较出的牌

    
    function compare(ownPoker,oppPoker) {
        var ownType,oppType;
        getValue(ownPoker,oppPoker);
        ownType=getType(ownValue);
        oppType=getType(oppValue);
        console.log(oppType);
        if(ownType!=ERROR&&oppType!=ERROR){
    //判断双方出的牌的类型和长度是否相同,相同的话就能出牌
            if(ownType==oppType && ownValue.length==oppValue.length) {
                if (ownValue[0] > oppValue[0]) {
                    return true;
                }
    //判断是不是4张牌相同的炸弹情况
            } else if(ownType==FOUR && oppType!==FOUR){
                return true;
    //判断是不是王炸
            } else if(ownType==BIGGEST){
                return true
            } else{
                alertMessage="您的牌小于上家!";
                return false;
            }
    //如果出牌类型为ERROR,则弹出”您的牌不符合出牌规则,请重新选择!"
        } else{
            alertMessage="您的牌不符合出牌规则,请重新选择!"
            return false;
        }
        ownValue.splice(0,ownValue.length);
        oppValue.splice(0,oppValue.length);
    }
    
    js中全局变量的使用

    局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中都可以调用的变量,在不同的js文件中也可以调用全局变量。当全局变量跟局部变量重名时,局部变量会覆盖掉全局变量

    e.target与事件委托简例

    target定义:
     target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口。

        event.target 
        event.target.nodeName   //获取事件触发元素标签name(li,p…) 
        event.target.id       //获取事件触发元素id 
        event.target.className  //获取事件触发元素classname 
        event.target.innerHTML  //获取事件触发元素的内容(li) 
        等。。。 
    

    jquery:this 与 e.target区别

    • this代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。
    • js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素;
    • this和event.target都是dom对象,如果要使用jquey中的方法可以将他们转换为jquery对象:$(this)和$(event.target);

    相关文章

      网友评论

        本文标题:两人斗地主比较大小

        本文链接:https://www.haomeiwen.com/subject/cjjspttx.html