前端JS-- 貪吃蛇遊戲

來源:互聯網
上載者:User

標籤:style   blog   color   使用   os   width   

同樣是前端,可惜我做的不是遊戲前端,有些小遺憾。

不過靠著自己比常人多出的一點點學習能力,還是擠出不少時間自學了一些小玩意(姑且稱他為小玩意吧)。

都是自己摸索著做的,代碼很簡單,剛剛工作半個月,很無奈。給自己以後留點回憶的線索吧。

(因為是公司是香港那邊的,所以都是繁體系統,無奈只能使用我那蹩腳的英語注釋了。。。。更無奈的是給自己取了個很那個名字--snow)

代碼:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE> snake game test </TITLE></HEAD><style>    div{        width:20px;        height:20px;        position:absolute;        border:1px solid black;        }    a{        font-family:tmb;        font-size:18px;        color:green;    }    .normal{        background:white;    }    .snaker{        background:red;    }    .food{        background:black;    }</style><script>/*    @date:2014-07-21    @author: snow.he*/    var rows=20,        cols=20,        arr =[];        var map_top =100,        map_left=80;        var snake={dir: 39,snake_body:[]};    var firstLen =5;    var firstDir =39;    var firstRows =5;    var snow;    var len;    var isplay=true;//share functionfunction $(str){    return document.getElementById(str);}// initfunction init(){    initMap();    initSnake();    initData();    showSnake();    setNewFood();    changeMove();}function initData(){    var firstLev = 1;    var firstScore =0;    var continue_sta = false;    if(localStorage.lev&&localStorage.score){        if(confirm("are you continue last time?")){            continue_sta = true;        }    }    if(continue_sta){        $("lev").text =localStorage.Lev;        $("score").text = localStorage.score;    }else{        $("lev").text = firstLev ;        $("score").text = firstScore;    }}function initMap(){    for(i=0;i<rows;i++)    {     arr[i]=[];     for(j=0;j<cols;j++)    {        arr[i][j]=document.createElement(‘div‘);        arr[i][j].style.top=map_top+i*24+‘px‘;        arr[i][j].style.left=map_left+j*24+‘px‘;           arr[i][j].className=‘normal‘;           document.body.appendChild(arr[i][j]);    }    }}  /*  left - A:65,left:37,4:100  right - D:68,right:39,6:102  up - W:87,up:38,8:104  down - S:83,down:40,2:98  */function showSnake(){//        console.log(snake);    for(var i=0;i<snake.snake_body.length;i++){        arr[snake.snake_body[i][0]][snake.snake_body[i][1]].className ="snaker";    }}function initSnake(){        snake.dir = firstDir;        snake.snake_body =[];    for(var i=0;i<firstLen;i++){        var temp =[];        temp.push(firstRows);        temp.push(i);        snake.snake_body.push(temp);    }}//if the snake eat a food, take a new foodfunction setNewFood(){    var X,Y;    X =Math.floor(Math.random()*rows);    Y =Math.floor(Math.random()*cols);    arr[X][Y].className ="food";}//clear mapfunction clearSnake(){    for(var i=0;i<rows;i++){        for(var j=0;j<cols;j++){        if(arr[i][j].className == "snaker"){            arr[i][j].className ="normal";            }        }    }    //the second function to clear map,but have bug/*    for(var i=0;i<snake.snake_body.length;i++){        arr[snake.snake_body[i][0]][snake.snake_body[i][1]-1].className ="normal";        console.log(snake.snake_body[i][0]+"&&"+(snake.snake_body[i][1]-1));    }*/}// check snake can movefunction isCanMoveit(dir,len){    var status =true;    switch(dir){        case 39:            if(snake.snake_body[len-1][1] >= cols-1  ){            //arr[parseInt(snake.snake_body[len-1][0])+1][snake.snake_body[len-1][1]].className =="snaker"            //    console.log(snake.snake_body[len-1][0]+"&:"+len-1+","+snake.snake_body[len-1][0]);                status =false;            };break;        case 37:            if(snake.snake_body[len-1][1] <= 0 ){                status =false;            };break;        case 38:            if(snake.snake_body[len-1][0] <= 0 ){                    status =false;            };break;        case 40:            if(snake.snake_body[len-1][0] >= rows-1 ){                status=false;            };break;    }    return status;}// snake‘s body movefunction snakeBodyMove(len){        var midX,midY;        var midX2,midY2;        midX = snake.snake_body[len-1][0];        midY = snake.snake_body[len-1][1];        for(var i=parseInt(len-1);i>0;i--){        midX2 = midX;        midY2 = midY;        midX = snake.snake_body[i-1][0];        midY = snake.snake_body[i-1][1];        snake.snake_body[i-1][0] =midX2;        snake.snake_body[i-1][1] =midY2;    }}//snake eat foodfunction eatFood(x,y){    var temp=[];    temp.push(x);    temp.push(y);    arr[x][y].className = "snaker";    snake.snake_body.push(temp);    setNewFood();    len = snake.snake_body.length;    keepScore();}//check snake can eat foodfunction isEatFood(dir){ len = snake.snake_body.length;    var isFood = false;    try{     switch(dir){        case 39:            if(arr[snake.snake_body[len-1][0]][snake.snake_body[len-1][1]+1].className == "food"){                eatFood(snake.snake_body[len-1][0],snake.snake_body[len-1][1]+1);            };break;        case 37:            if(arr[snake.snake_body[len-1][0]][snake.snake_body[len-1][1]-1].className == "food"){                eatFood(snake.snake_body[len-1][0],snake.snake_body[len-1][1]-1);            };break;        case 38:            if(arr[snake.snake_body[len-1][0]-1][snake.snake_body[len-1][1]].className == "food"){                eatFood(snake.snake_body[len-1][0]-1,snake.snake_body[len-1][1]);            };break;        case 40:            if(arr[snake.snake_body[len-1][0]+1][snake.snake_body[len-1][1]].className == "food"){                eatFood(snake.snake_body[len-1][0]+1,snake.snake_body[len-1][1]);            };break;     }    }catch(e){        gameOver();    }}//keep the player‘ scorefunction keepScore(){    $("score").text = parseInt($("score").text)+100;    localStorage.snakeScore = $("score").text;    if(parseInt($("score").text) >= parseInt($("lev").text)*900){        keepLev();    }}//keep the player‘s levelfunction keepLev(){    $("lev").text = parseInt($("lev").text)+1;    localStorage.snakeLev = $("lev").text;    changeMove();}//change the snake move velocityfunction changeMove(){    if(snow){        clearInterval(snow);        }    var V = parseInt($("lev").text);    if(V<7){        snow = setInterval(moveFront,(500-V*50));    }else{        snow = setInterval(moveFront,180);    }}// snake movefunction moveFront(){     len = snake.snake_body.length;    var isCanMove;    isCanMove = isCanMoveit(snake.dir,len);    if(isCanMove){        isEatFood(snake.dir);        snakeBodyMove(len);        switch(snake.dir){            case 39:                snake.snake_body[len-1][1]++;                break;            case 37:                snake.snake_body[len-1][1]--;                break;            case 38:                snake.snake_body[len-1][0]--;                break;            case 40:                snake.snake_body[len-1][0]++;                break;        }            }    else{        gameOver();    }    clearSnake();    showSnake();}// handle the player‘s keywindow.onkeydown =function(ev){    var oEvent=ev||event;    var canUser = true;    if(oEvent.keyCode<=40 && oEvent.keyCode>=37){        switch(oEvent.keyCode){            case 37:                if(snake.dir == 39){ canUser = false;};break;            case 38:                if(snake.dir == 40){ canUser = false;};break;            case 39:                if(snake.dir == 37){ canUser = false;};break;            case 40:                if(snake.dir == 38){ canUser = false;};break;        }        if(canUser){            snake.dir = oEvent.keyCode;        }    }    if(oEvent.keyCode == 32){            if(isplay){                clearInterval(snow);                isplay = false;            }else{                changeMove();                isplay = true;            }        }}//game overfunction gameOver(){    clearInterval(snow);    if(confirm("are you continue?")){        init();    }}</script><BODY onload="init()"><div id="testttt" style="left:100px;top:20px;height:30px;width:420px;border:0px;">    <div style="width:150px;border:0px;">Lv:<a id="lev">1</a></div>    <div style="width:240px;left:150px;border:0px;">Score:<a id="score">00</a></div></div></BODY></HTML>  

 

 

 

都是上班時間做的,下班不學,沒辦法,人太懶。

漫漫長路,希望能夠走得遠一點。便在此處記錄自己的成長曆程吧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.