天天看點

80行JavaScript代碼實作的貪食蛇遊戲,簡約之美

snake  

 </div><div data-lake-id="bd337d9f320f08c775f9dff0a24179d9">body { overflow:hidden; text-align:center; background-color:lavender; }  </div><div data-lake-id="e22ab0102d27f11560e4c6d3d8897929">div#main { position:relative; overflow:hidden; margin:10px auto; border: 1px solid green; width:400px; height:400px; }  </div><div data-lake-id="37dc63d97f9d75f01f8a699aa8310c37">div#main div { position:absolute; font-size:0; background-color:green; width:10px; height:10px; }  </div><div data-lake-id="66d7c2fb2e56fb36c6cd31a730960555">div#main div#head { background-color:red; }  </div><div data-lake-id="230f09406eaf452c60a37c33cb7450b6">div#main div#food { background-color:green; }  </div><div data-lake-id="db2b1b9c750cdda6ef8515c743d1169d">  

 </div><div data-lake-id="a2e41320a1e686930e0272cc939081b2">var w=40, h=40, n=10, m=200;  </div><div data-lake-id="7e489952192d42435604656583784e12">var S={},X=[],B=[],L=[],T=[],dirs=[-1,-w,1,w],dir=2,ifood=-5,pause,f,timer,D=document;  </div><div data-lake-id="ad63bcceaac333f7e7f6c394b860d39c">function rnd(){return Math.floor(Math.random()*w*h)}  </div><div data-lake-id="aa9b995ccbd0d60772b573602855a337">function newd(i){var div=main.appendChild(D.createElement("div"));p(div,i);return div;}  </div><div data-lake-id="d23aaeaac6fcf2dccbfcec9c7ae33f67">function p(o,i){o.style.left=L[i]+'px';o.style.top=T[i]+'px';}  </div><div data-lake-id="87f4cb8ddae019f35f24d579d8bbd258">function m(o,dir){p(o,i);}  </div><div data-lake-id="47e67011e1ff8bfe6fc266bf6c4f02e4">function $(id){ return D.getElementById(id); }  </div><div data-lake-id="a7cd85015594a50964e6761d2c09ea3f">function cli(){ clearInterval(tmr); }  </div><div data-lake-id="d7e045fc274eef33798cf5d6f6ea0ee2">function sei(m){ tmr=setInterval(Main,m); }  </div><div data-lake-id="c9dec725ffc1ca448c33fee18540596f">function Main(){  </div><div data-lake-id="e9df1539ba7754b119527c192c9fe341">    if(pause)return;  </div><div data-lake-id="906fa65491fdf4a9d6ceee30d91aa066">    var ox=X[0],x=ox%w,y=(ox-x)/h,eat,die;  </div><div data-lake-id="2386a145dd43e2c4f617e899c1a2c9a3">    X[0]+=dirs[dir];  </div><div data-lake-id="334fce37afddd12d3145d53153e3b5ba">    if(x==0&&dir==0||x==w-1&&dir==2||y==0&&dir==1||y==h-1&&dir==3)die='Died';  </div><div data-lake-id="476984ac303868eea190a2d76748c416">    else if(S[X[0]])die='died';  </div><div data-lake-id="59e6e919b25e0419ca5c4b2980a6971c">    if(die){  </div><div data-lake-id="50fd3223220aa9900cc90e8607c14d27">        cli();  </div><div data-lake-id="c167cfc91ead884bf1b3f05d04ab43fe">        alert(die+'/n/ndied'+(B.length-1)+'died');  </div><div data-lake-id="a8f612b0a55c7f7d333fa47b75c5c352">        restart();  </div><div data-lake-id="afc90a29cc0780645bddfcfe63fdc0ec">        return;  </div><div data-lake-id="ce840d0bb753bacad629b42a6cdef534">    }  </div><div data-lake-id="f6f0cf9f5639c0846d4ae5cfa309f93f">    if(ifood==X[0]){  </div><div data-lake-id="21856a19bed2cce85e4fd629f7feeff4">        eat=true;  </div><div data-lake-id="929e6c9b995eb209aa00460356605382">        food.style.visibility='hidden';  </div><div data-lake-id="2aee87aaea121cc120e0c1ffca53dad8">        ifood=-5;  </div><div data-lake-id="51c018f1d9a7c9407d1fee31da8be4e7">        B.unshift(newd(ox));  </div><div data-lake-id="ccfd00d5ceacd33a43e62d15d0db0830">    }else if(ifood==-1){  </div><div data-lake-id="8b7f6e0f2afb5b8cc5cdbcb417dcf2af">        while(S[ifood=rnd()]);  </div><div data-lake-id="6d464bd1c1fce83e957a0220596853ef">        food.style.visibility='visible';  </div><div data-lake-id="11742b216040c1f498b6c609d334f760">        p(food,ifood);  </div><div data-lake-id="0c6cd21f5b599b4f29c495bbab6d96ab">    }else if(ifood<-1){ifood++}  </div><div data-lake-id="8dab8a70ac3254d95539f563e67ad632">    p(head,X[0]);  </div><div data-lake-id="2076b0ed4abc1376ed69fa258df43d7f">    X.unshift(X[0]);  </div><div data-lake-id="21a1eca97a63947a75fd5a432a94dfe5">    X[1]=ox;  </div><div data-lake-id="7bc80ca1a17cdb7678603837e1369ede">    S[X[0]]=true;  </div><div data-lake-id="09b4f834e6ea8b59fe7c1b686456eca9">    if(!eat){delete S[X.pop()];B.unshift(B.pop());p(B[0],ox);}  </div><div data-lake-id="84773be29cd0c14c55f77de28be07cb8">}  </div><div data-lake-id="f5c3f72954c757b30c6fd73ffa226a6d">D.onkeydown=function(evt){  </div><div data-lake-id="a6f8360540cc1541f5ff937e6930c50e">    var c=(evt||window.event).keyCode-37;  </div><div data-lake-id="1c4d4c7159f964c7a5798ab6a71c234f">    if(c==-24)pause=!pause;  </div><div data-lake-id="70dfd9fe738251a676858d0beb252ee0">    else if(c>=0&&c<4){  </div><div data-lake-id="bd8270546e0692b40771430752bf61c6">        if(dir==c){if(!f){f=true;cli();sei(m/2)}}  </div><div data-lake-id="4e596e9d8669fd0b661e50f3127d01bb">        else if(dir%2!=c%2)dir=c;  </div><div data-lake-id="90ddae78fc8c8ef56699449c45d994a2">    }  </div><div data-lake-id="af01c33f832be67a5427dd8b603c64c3">}  </div><div data-lake-id="ce2f2e65fdeec9360a69150d0e6132e9">D.onkeyup=function(evt){  </div><div data-lake-id="3c0610ef9b3e72ffe92c16a198d89395">    var c=(evt||window.event).keyCode-37;  </div><div data-lake-id="07ac97b6f287971bc3bc4aa0cd8cb099">    if(dir==c&&f){f=false;cli();sei(m)}  </div><div data-lake-id="a8e2a64e00e9e8c99bc06d7ca706073e">}  </div><div data-lake-id="a9b1de9ee9b8a88c5a7df1660eed8b00">for(var i=w*h-1;i>=0;i--){L[i]=i%w*n, T[i]=(i-i%w)*n/h}  </div><div data-lake-id="70973f3657dc2b04ed28343f58f30398">var main=$("main"), head=$("head"), food=$("food");  </div><div data-lake-id="1f481db6d4d1735d95b8e174ad0b251b">function restart(){  </div><div data-lake-id="07609cfaafa39d2d7616177c552f875e">S={},X=[],B=[],dir=2,ifood=-5,pause=f=false;  </div><div data-lake-id="377e69fd355463ed0406bbacca86096c">while(main.childNodes.length>2)main.removeChild(main.lastChild);  </div><div data-lake-id="2cf4782ac87ae5b9595d0dfe39fffbf4">food.style.visibility='hidden';  </div><div data-lake-id="714190e2e73049c4a28de8fccbf44ae0">X[1]=w*h/2;  </div><div data-lake-id="73ef8f4cc2723705b5aa459c0f7ef4ea">X[0]=X[1]+1;  </div><div data-lake-id="636993f5d8af3fd4c75392fbac8520c9">p(head,X[0]);  </div><div data-lake-id="2d02b50aa40ef51de085f7916190e4b2">B[0]=newd(X[1]);  </div><div data-lake-id="d77d1417adad7d0794832334b7ae7f00">S[X[0]]=S[X[1]]=true;  </div><div data-lake-id="fcc3991107b397fec6326820305038a5">sei(m);  </div><div data-lake-id="269c27a389e825d00fbeb39955b5a7f6">}  </div><div data-lake-id="b95312cced8f66c6e5efbd796c67f167">restart();  </div><div data-lake-id="4dbeafc7c5d4399e73a35c546d89c173">  

80行JavaScript代碼實作的貪食蛇遊戲,簡約之美
80行JavaScript代碼實作的貪食蛇遊戲,簡約之美
80行JavaScript代碼實作的貪食蛇遊戲,簡約之美

繼續閱讀