贪吃蛇(canvas+javaScript)

贪吃蛇是一个比较老的游戏,但是很有趣。那我们要怎么去实现呢?
用h5+javaScript去实现,实现思路:
1画线条也就是画格子。
2定义蛇,然后初始化,画出一条蛇。
3随机生成食物,并画出。
4定义一个移动函数,使蛇运动起来。
5吃到食物蛇身边长。
6判断蛇是否死掉。

<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>贪吃蛇</title>
<meta name="keywords" content="贪吃蛇"/>
<style type="text/css">
*{margin:0;}
.d-canvas{
    width:450px;
    height:450px;
    background:#ffff00;
    border:10px solid #00ffff;
}
</style>
</head>
<body>
    <div class="d-canvas">
        <canvas id="can" width="450" height="450">
        </canvas>
    </div>
<script type="text/javascript">
var can = document.getElementById("can");
//创建 context 对象
var huabi = can.getContext("2d");
var snake= [];//蛇
var width=15;//宽度
var startwidth=6;//蛇开始的长度
var foodX;//食物X坐标
var foodY;//食物Y坐标
var catlog=3;//表示方向
//画格子
function drawRect(){
    for(var i=0;i<=30;i++){
        huabi.beginPath();
        huabi.moveTo(width*i,0);
        huabi.lineTo(width*i,450);
        huabi.moveTo(0,width*i);
        huabi.lineTo(450,width*i);
        huabi.closePath();
        huabi.stroke();
    }
}
//初始化蛇
function strat(){
    for(var i=0;i<startwidth;i++){
        snake[i]={x:i*width,y:0};
    }   
}
//画蛇
function newSnake(){
    huabi.fillStyle="#000";
    for(var i=0;i<startwidth;i++){
        if(i == startwidth-1)
            huabi.fillStyle="#f00";
        huabi.fillRect(snake[i].x,snake[i].y,15,15);
    }
}
//添加食物
function addFood(){
    huabi.fillStyle="#00ff33";
    foodX=Math.floor(Math.random()*30)*15;
    console.log(foodX);
    foodY=Math.floor(Math.random()*30)*15;
    console.log(foodY);
    for(var i=0;i<startwidth;i++){
        if(snake[i].x==foodX&&snake[i].y==foodY)
        addFood();
    }
    huabi.fillRect(foodX,foodY,15,15);

}
//蛇移动
function move(){
    huabi.fillStyle="#000";
    var top;
    switch(catlog){
        case 1:
            snake.push({x:snake[startwidth-1].x-15,y:snake[startwidth-1].y});
            huabi.fillRect(snake[startwidth-1].x,snake[startwidth-1].y,15,15);
            huabi.fillStyle="#f00";
            huabi.fillRect(snake[startwidth].x,snake[startwidth].y,15,15);
            isDeath();
            if(!isEat()){
            top =snake.shift();
            huabi.clearRect(top.x,top.y,15,15);
            }else{
            addFood();
            }
            break;
        case 2:
            snake.push({x:snake[startwidth-1].x,y:snake[startwidth-1].y-15});
            huabi.fillRect(snake[startwidth-1].x,snake[startwidth-1].y,15,15);
            huabi.fillStyle="#f00";
            huabi.fillRect(snake[startwidth].x,snake[startwidth].y,15,15);
            isDeath();
            if(!isEat()){
            top =snake.shift();
            huabi.clearRect(top.x,top.y,15,15);
            }else{
            addFood();
            }
            break;
        case 3:
            snake.push({x:snake[startwidth-1].x+15,y:snake[startwidth-1].y});
            huabi.fillRect(snake[startwidth-1].x,snake[startwidth-1].y,15,15);
            huabi.fillStyle="#f00";
            huabi.fillRect(snake[startwidth].x,snake[startwidth].y,15,15);
            isDeath();
            if(!isEat()){
            top =snake.shift();
            huabi.clearRect(top.x,top.y,15,15);
            }else{
            addFood();
            }
            break;
        case 4:
            snake.push({x:snake[startwidth-1].x,y:snake[startwidth-1].y+15});
            huabi.fillRect(snake[startwidth-1].x,snake[startwidth-1].y,15,15);
            huabi.fillStyle="#f00";
            huabi.fillRect(snake[startwidth].x,snake[startwidth].y,15,15);
            isDeath();
            if(!isEat()){
            top =snake.shift();
            huabi.clearRect(top.x,top.y,15,15);
            }else{
            addFood();
            }
            break;
    }
    isDeath();
    drawRect();
}
//判断蛇是否吃了食物
function isEat(){
    if(foodX==snake[startwidth-1].x&&foodY==snake[startwidth-1].y){
        startwidth++;
        return true;
    }
    return false;
}
//判断是否死了
function isDeath(){
    //一种是撞墙死,一种自己撞自己死
    if(snake[startwidth-1].x>450||snake[startwidth-1].x<0||snake[startwidth-1].y>450||snake[startwidth-1].y<0){
    alert("撞墙死了");
    window.location.reload();
    }
    for(var i=0;i<startwidth-1;i++){
        if(snake[i].x==snake[startwidth-1].x&&snake[i].y==snake[startwidth-1].y){
            alert("自已咬自己,死了");
            window.location.reload();
        }
    }   
}
//获取键盘输入值
window.onkeydown =function(e){
    switch(e.keyCode){
        case 37:catlog=1;break;//左
        case 38:catlog=2;break;//上
        case 39:catlog=3;break;//右
        case 40:catlog=4;break;//下
    }
}
//加载页面
window.onload=function(){
    strat();
    drawRect();
    newSnake();
    addFood();
    setInterval(move,500);
}
</script>
</body>
</html>

大概的基本实现了。
比较好看点的表格:

<fieldset>
    <legend>Personalia:</legend>
    Name: <input type="text"><br>
    Email: <input type="text"><br>
    Date of birth: <input type="text">
 </fieldset>

需要在html4到html5使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的实现步骤: 1. 创建一个画布 (canvas) 并设置其大小和样式。 ```html <canvas id="snake" width="400" height="400"></canvas> ``` 2. 在 JavaScript 中获取这个画布并创建一个绘图上下文 (context)。 ```javascript const canvas = document.getElementById('snake'); const ctx = canvas.getContext('2d'); ``` 3. 创建的初始状态,包括长度、起始位置和方向。 ```javascript let snake = [{ x: 10, y: 10 }, { x: 9, y: 10 }, { x: 8, y: 10 }]; let direction = 'right'; ``` 4. 创建食物的初始位置。 ```javascript let food = { x: Math.floor(Math.random() * 40), y: Math.floor(Math.random() * 40) }; ``` 5. 创建一个函数来绘制和食物。 ```javascript function draw() { // 绘制 snake.forEach(body => { ctx.fillRect(body.x * 10, body.y * 10, 10, 10); }) // 绘制食物 ctx.fillRect(food.x * 10, food.y * 10, 10, 10); } ``` 6. 创建一个函数来移动。 ```javascript function move() { // 创建新头部 let newHead = { x: snake[0].x, y: snake[0].y }; switch (direction) { case 'up': newHead.y--; break; case 'down': newHead.y++; break; case 'left': newHead.x--; break; case 'right': newHead.x++; break; } // 添加新头部 snake.unshift(newHead); // 判断是否吃到食物 if (snake[0].x === food.x && snake[0].y === food.y) { // 创建新食物 food = { x: Math.floor(Math.random() * 40), y: Math.floor(Math.random() * 40) }; } else { // 移除尾部 snake.pop(); } } ``` 7. 创建一个函数来更新游戏状态并重新绘制画布。 ```javascript function update() { move(); draw(); } ``` 8. 使用 setInterval 函数来不断更新游戏状态。 ```javascript setInterval(update, 100); ``` 到这里,一个简单的贪吃蛇游戏就完成了。当然,这只是一个基础的实现,你可以根据自己的需求进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值