<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
    之前編寫過一個單機版的游戲letters,晚上睡不著,稍加改動,變成聯(lián)機版的了。

    靜態(tài)頁面 letters.htm
    <SCRIPT>
    var isIE=!!document.all;
    function checkMouseMove(event){
    if (window.activeElement){
    var elm = window.activeElement;
    elm.style.left 
    = event.clientX-elm.innerX;
    elm.style.top 
    = event.clientY-elm.innerY;
    if(xmlhttp)xmlhttp.abort();
    if(timer)clearTimeout(timer);
    }

    }

    function releaseMouse(event){
    if (window.activeElement){
        
    var x = activeElement.offsetLeft;
        
    var y = activeElement.offsetTop;
        
    var pos = activeElement.id;
        
    var data =y.toString(16);
        data 
    = x.toString(16)+"0000".substr(data.length)+data;
        
    var url = "http://localhost:8080/letters/letters.jsp?pos="+pos+"&data="+data;
        
    if(xmlhttp)xmlhttp.abort();
        xmlhttp 
    = window.XMLHttpRequest?(new XMLHttpRequest()):(new ActiveXObject("Microsoft.XMLHTTP"));
        xmlhttp.onreadystatechange
    = handleXML;
        xmlhttp.open(
    "GET",url,true);
        xmlhttp.send(
    null);
        window.activeElement 
    = null;
    }

    }

    function drag(event){
    if (event.button>1return;
    var elm = isIE?event.srcElement:event.target;
    window.activeElement 
    = elm;
    elm.oldX 
    = elm.offsetLeft;
    elm.oldY 
    = elm.offsetTop;
    elm.innerX 
    = event.clientX - elm.oldX;
    elm.innerY 
    = event.clientY - elm.oldY;
    }


    function slideTo(id,x,y){
    var d=3;    
    var e = document.getElementById(id);
    var l = e.style.left?parseInt(e.style.left):0;
    var t = e.style.top?parseInt(e.style.top):0;
    if(Math.abs(l-x)<=&& Math.abs(t-y)<=d) return;
    if(l!=x) e.style.left=l+(l<x?d:-d);
    if(t!=y) e.style.top=t+(t<y?d:-d);
    if(e.timer) clearTimeout(e.timer);
    e.timer
    =setTimeout("slideTo("+id+","+x+","+y+")",3)
    }


    function jumpTo(id,x,y){
    var e = document.getElementById(id);
    if(e.timer) clearTimeout(e.timer);
    e.style.left
    =x;
    e.style.top
    =y;
    }


    var xmlhttp;
    function refreshPos(){
        
    if(xmlhttp) return;
        xmlhttp 
    = window.XMLHttpRequest?(new XMLHttpRequest()):(new ActiveXObject("Microsoft.XMLHTTP"));
        xmlhttp.onreadystatechange
    = handleXML;
        xmlhttp.open(
    "GET","http://localhost:8080/letters/letters.jsp",true);
        xmlhttp.setRequestHeader(
    "If-Modified-Since","0");
        xmlhttp.send(
    null);
    }

    function handleXML(){
        
    if(xmlhttp.readyState==4&&xmlhttp.status==200){
            
    var posList = xmlhttp.responseText.split(",");
            
    if(posList.length>=n)
            
    for(var i=0;i<n;i++){
                
    var p = posList[i];
                
    var x = parseInt(p.substring(0,p.length-4),16);
                
    var y = parseInt(p.substr(p.length-4),16);
                
    if(!timer) jumpTo(i,x,y);
                
    else slideTo(i,x,y);
            }

            xmlhttp
    =null;
            timer 
    = setTimeout("refreshPos()",500);
        }

    }

    var n=104;
    var timer;
    window.onload
    =refreshPos;
    </SCRIPT>
    </HEAD>
    <style>b{position:absolute;cursor:pointer;font-size:20}</style>
    <BODY onmousemove="checkMouseMove(event)" onmouseup="releaseMouse(event)" oncontextmenu="return false" onselectstart="return false" ondblclick="return false">
    <div style="background-color:yellow;width:600;height:500;overflow:hidden">
    <SCRIPT>
    for(var i=0;i<n;i++)
    document.write(
    "<b onmousedown=\"drag(event)\" id=\""+i+"\" style=\"color:#"+(Math.floor(Math.random()*(1<<24))|(1<<23)).toString(16)+"\" onbeforselect=\"return false\">"+String.fromCharCode(i%26+65)+"</b>");
    </SCRIPT>
    </div>

    服務程序letters.jsp:
    <%@ page contentType="text/html; charset=GBK" %>
    <%int[] letters;
    int maxLetters = 104;
    %><%
    letters 
    = (int[])application.getAttribute("letters");
    if(null == letters){
      letters 
    = new int[maxLetters];
      
    for(int i=0;i<maxLetters;i++) letters[i]=(Math.round(i/26)*15+1)+(((i%26+1)*15)<<16);
      application.setAttribute(
    "letters",letters);
    }
    String stPos = request.getParameter("pos");
    String stData = request.getParameter("data");
    if(stPos!=null && stData !=null){
      try{
        
    int pos = Integer.parseInt(stPos);
        
    int data = Integer.parseInt(stData,16);
        letters[pos]
    =data;
      }catch(Exception e){
        e.printStackTrace();
      }
    }
    for(int i=0;i<maxLetters;i++) out.print(Integer.toHexString(letters[i])+",");
    %>

    當然服務程序如果直接寫servlet可以更優(yōu)化,不過我寫servlet很依賴IDE或者手冊,用jsp寫就比較容易貫徹裸奔精神了。直接用tomcat發(fā)布出去即可運行(注意靜態(tài)頁面中兩處hardcode的“http://localhost:8080/letters/letters.jsp”有可能需要根據發(fā)布環(huán)境做相應的修改)。服務程序代碼做的相當簡單,改asp版應該也不為難。詳細的說明春節(jié)后補充,簡單的介紹一下數據結構:
    1 每個字母的位置由一個32位十六進制數字表示,前16位為橫坐標,后16位為縱坐標,坐標空間65536*65536
    2 application中維持一個所有字母的位置列表,通過“l(fā)etters”這個key引用。
    3 參數格式為pos:被移動的字母的序號,data:為該字母的新位置。

    點擊這里下載源碼
    posted on 2006-02-02 02:39 emu 閱讀(2836) 評論(2)  編輯  收藏

    評論

    # re: 一個Ajax實現(xiàn)的聯(lián)機游戲 2006-02-03 12:48 emu
    稍微優(yōu)化了一下。點擊這里下載優(yōu)化后的版本。  回復  更多評論
      

    # re: 一個Ajax實現(xiàn)的聯(lián)機游戲 2006-02-24 00:00 emu
    終于搞到一個公網地址,發(fā)布一個:

    http://stonelf.s43.eatj.com/emu/game/letters.htm

    大家一起來玩哈:)

      回復  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 一级一级一片免费高清| 亚洲人成影院在线无码观看| 亚洲AV无码国产精品麻豆天美| 特级毛片全部免费播放a一级 | 国产成人精品免费视频网页大全 | 小草在线看片免费人成视久网| 国产亚洲精品a在线无码| 在线观看肉片AV网站免费| 国产乱色精品成人免费视频| 亚洲中文字幕一二三四区苍井空 | 色婷婷亚洲一区二区三区| 在线看片无码永久免费aⅴ| 国产99视频精品免费视频7| 猫咪免费人成在线网站| 亚洲人成无码网站久久99热国产| 国产在线精品一区免费香蕉| 亚洲AV永久无码精品| 精品免费久久久久久久| 亚洲AV无码成人精品区日韩| avtt亚洲天堂| 亚洲激情黄色小说| 在线观看免费污视频| 91久久亚洲国产成人精品性色| 国产精品亚洲专区无码WEB| 亚洲福利视频一区二区| 亚洲成av人无码亚洲成av人| 18pao国产成视频永久免费| 精品亚洲综合在线第一区| 久久九九兔免费精品6| 精品久久亚洲一级α| 国产亚洲精品a在线无码| 一二三四影视在线看片免费 | 中文字幕在线日亚洲9| 99热这里只有精品6免费| 亚洲人成在线播放| 97碰公开在线观看免费视频| 亚洲视频在线观看免费| 卡一卡二卡三在线入口免费| 在线看片免费人成视频播| 亚洲精品国产精品| 亚洲激情在线视频|