第一个贪吃蛇游戏~哦也

<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="360" height="360" style="border:1px solid #d3d3d3;">Your browser does not support the HTML5 canvas tag.</canvas>
<script>                                                                                                                                                                                                                //snake数组表示蛇 ; direction表示蛇前进的方向,默认向下 ; food表示食物
var cxt=document.getElementById("myCanvas").getContext("2d");
var snake = [{x:10,y:9},{x:10,y:8}];
var direction=40;
var food=null;
cxt.shadowBlur=37;
cxt.shadowColor="black";                                                                                                                                                                                        //循环,间隔为100毫秒
function onframe(){
    if(check(snake[0],0) || snake[0].x < 0 || snake[0].x >= 36 || snake[0].y < 0 || snake[0].y >= 36)return;                                                                   
 //根据方向,重新设定蛇数组首元素的坐标,从而进行移动
 if(food){
        if((direction==40&&snake[0].x==food.x&&snake[0].y+1==food.y)
            ||(direction==38&&snake[0].x==food.x&&snake[0].y-1==food.y)
            ||(direction==37&&snake[0].x-1==food.x&&snake[0].y==food.y)
            ||(direction==39&&snake[0].x+1==food.x&&snake[0].y==food.y)){
            snake.unshift(food);
            food=null;
        }
    }
    snake.unshift(snake.pop());                                                                                                                                                                                
    switch(direction){
        case 37:
            snake[0].x = snake[1].x - 1;
            snake[0].y = snake[1].y;
            break;
        case 38:
            snake[0].x = snake[1].x;
            snake[0].y = snake[1].y - 1;
            break;
        case 39:
            snake[0].x = snake[1].x + 1;
            snake[0].y = snake[1].y;
            break;
        case 40:
            snake[0].x = snake[1].x;
            snake[0].y = snake[1].y + 1;
            break;
    }
    cxt.clearRect(0,0,360,360);                                                                                                                                                                                 //如果有食物,则绘制食物
    if(food)cxt.fillRect(food.x*10,food.y*10,10,10);                                                                                                                                                     //绘制蛇
    for(var i=0;i<snake.length;i++){
        cxt.fillRect(snake[i].x*10,snake[i].y*10,10,10);
    }                                                                                                                                                                                                                       //如果没有食物,则在随机位置上加入一粒食物
    while(food==null || check(food)){
        food={y:(Math.random()*36 >>>0),x:(Math.random()*36 >>>0)};
    }                                                                                                                                                                                                                       //判断游戏是否结束
    if(check(snake[0],0) || snake[0].x < 0 || snake[0].x >= 36 || snake[0].y < 0 || snake[0].y >= 36){
        alert("game over\nYou get ["+(snake.length-2)+"]");
    }
}
setInterval(onframe,100);                                                                                                                                                                                        //加入键盘事件,用方向键来控制蛇前进的方向
document.onkeyup = function(event){
    if(event.keyCode>=37 && event.keyCode<=40 && (Math.abs(event.keyCode-direction) != 2)){
        direction = event.keyCode;
    }
}                                                                                                                                                                                                                           //判断指定位置是否与蛇重叠 

function check(food,j){
    for(var i=0;i<snake.length;i++){
        if(j!=i && snake[i].x==food.x && snake[i].y==food.y)return true;
    }
    return false;
}
</script>
</body>
</html>

PS:

1.canvas要在JS内部来绘制图形var cxt=document.getElementById("myCanvas").getContext("2d");JavaScript 使用 id (myCanvas)来寻找 canvas 元素,然后创建 context 对象,getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

2.var snake = [{x:10,y:9},{x:10,y:8}]; 存放json格式数据的数组
JSON的语法规则:
    .数据在名称/值对中
    .数据由逗号分隔
    .花括号保存对象
    .方括号保存数组

3.shadowBlur 属性设置或返回阴影的模糊级数

4.unshift() :JS方法可向数组的开头添加一个或更多元素,并返回新的长度。unshift() 方法不创建新的创建,而是直接修改原有的数组,push() 方法,把一个或多个元素添加到数组的尾部。pop()方法,删除并返回数组的最后一个元素。

5.setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭
setInterval(code,millisec[,"lang"])
code     必需。要调用的函数或要执行的代码串。
millisec     必须。周期性执行或调用 code 之间的时间间隔,以毫秒计

 

 

 

 

 

 

转载于:https://www.cnblogs.com/rabbit-Rukia/archive/2012/12/30/2839408.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值