zoukankan      html  css  js  c++  java
  • 服务端 模拟 检测 攻击。。乱写

    <title>模拟服务端攻击算法。。。汗。。 solq</title>
    <body>
        <style>
        #target1,#target2,.s{
            color:red;
            position:absolute;
        }
        #target1{
            top:330px;
            left:500px;
        }
        </style>
        <div id="target1">*1</div>
        <div id="target2">*2</div>
    </body>
    <script>
    /*
        当两人物的距离在范围内 并且
        被攻击的目标要在 攻击的技能 角度 范围 内,就当碰撞成功。。。。
        blog:cnblogs.com/solq
    */
    
        var angle=350;        //当前攻击玩家角度     如果=60  攻击目标 30(60-angleRange/2)~90(60+angleRange/2) 角度内
        var angleRange=60;    //角度范围
        var radius=150;        //半径 c = 三角形斜边    其实是两物体的距离
    
    window.onload=function()
    {
        document.onmousedown=function(e){
            //console.log($$("target2"))
            $$("target2").style.left=e.clientX;
            $$("target2").style.top=e.clientY;
            //alert(" clientx:"+e.clientX+" clienty:"+e.clientY + " layerX:"+e.layerX+" layery:"+e.layerY)
            check();
        }
    }
        ////////////////////////////////////////////////////////////////////
    
        function check()
        {
            var x1,x2,y1,y2,a,b,c;
            x1=getOffset($$("target1")).left;
            x2=getOffset($$("target2")).left;
            y1=getOffset($$("target1")).top;
            y2=getOffset($$("target2")).top;
            
            a=x2-x1;
            b=y2-y1;
            c=getC(a,b);
            
            /*
            
        cosC = (a^2 + b^2 - c^2) / (2·a·b)
      cosB = (a^2 + c^2 -b^2) / (2·a·c)
      cosA = (c^2 + b^2 - a^2) / (2·b·c) 
            */
            var t=getAngle(a,c);
            
            //alert( a + " " + b);
            if( (a<0 && b<0 ) || (a>0 && b<0))
            {
            
            }else //if(a>0 && b>0) //修正在攻击玩家背后。。的角度
            {
                t=360-(t+180);
            }
            //alert(" 角 : " +( t+90) + " a边:" + a + " b边:" + b )
            if(!checkRadius(c)) //checkRadius(c) && 
            {
                alert("距离太远");
            }
            if(!checkAngle(t+90))
            {
                alert(t+90 + "不在范围内")
            }
            
        }
        
        function checkRadius(c) //检测距离
        {
            if(c>radius)
            {
                return false;
            }
            return true;
        }
     
        function reviseAngle(angle) //修正角度
        {
            if(angle<0)
                angle+=360;
            else if(angle > 360)
                angle-=360;
            return angle;
        }
        function checkAngle(a)
        {
                
            var angleA=angle-angleRange/2; //范围 a 
            var angleB=angle+angleRange/2; //范围 b 
    
            if(angleA<0 || angleB>360) //特殊的角度处理
            {
                angleA=reviseAngle(angleA);
                angleB=reviseAngle(angleB);
                if(a>=180 && a>=angleA)
                    return true;
                else if(a<=180 && a<=angleB)
                    return true;
                else 
                    return false;
            } 
            
            
            //alert("angleA:" + angleA + " angleb : " + angleB  + "a: " + a );
        
            if(a>=angleA && a<=angleB)
            {
                return true;
            }
            return false;
        }
        
        function getAngle(a,c)
        {
            var pai=2*Math.asin(1);
            return 180*Math.asin(a/c)/pai;
        }
        function getC(a,b)
        {
            return Math.sqrt(a*a+b*b);
        }
        
        function getY(x)
        {
            var y= Math.sqrt(radius*radius-x*x);
            return y;
        }
        
        
        
        //js 处理函数
        /*
        function init()
        {
                
        
        var angleA=angle-angleRange/2; //范围 a 
        var angleB=angle+angleRange/2; //范围 b 
            var d1=createDom("a点");
            var d2=createDom("b点");
            
            var d3=createDom("中间点");
            
            var x,y,px,py;
            px=getOffset($$("target1")).left;
            py=getOffset($$("target1")).top;
            
            x=radius* Math.sin(60 * Math.PI / 180);
            y=radius* Math.cos(60 * Math.PI / 180);
            
            //alert(x + " == " + y);
            setXY(d3,px+x,px+y);
            
            
            var ax,ay;
            ax=radius*Math.cos(30);
            ay=radius*Math.sin(30);
            //alert(ax + "" + ay)
            //a - op =np
            //setXY(d1,px+ax,px+ay);
            //alert(ax + " == " + ay);
            
            var bx,by;
            bx=radius*Math.cos(90);
            by=radius*Math.sin(90);
            //setXY(d2,px-bx,py-by);
            //alert(by + " xx " + (radius*Math.cos(90)) )
            
        }*/
        function setXY(dom,x,y){
            dom.style.left=x;
            dom.style.top=y;
        }
    
        function createDom(arg) {
          var objE = document.createElement("div");
              objE.setAttribute("class","s");
          objE.innerHTML = arg;
            document.body.appendChild(objE);
          return objE;
        }
        function getOffset( el ) {
            var _x = 0;
            var _y = 0;
            while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
                _x += el.offsetLeft - el.scrollLeft;
                _y += el.offsetTop - el.scrollTop;
                el = el.parentNode;
            }
            return { top: _y, left: _x };
        }
    
        function $$(id){return document.getElementById(id);}
    </script>
    
    <script type="text/javascript">
        var pai=2*Math.asin(1);
        //document.write(180*Math.asin(0.5)/pai+"<br>");//正弦值0.5的反三角度数
        //document.write(Math.sin(30*pai/180));//30度角的正弦
        
        
    </script>
  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/solq/p/2561349.html
Copyright © 2011-2022 走看看