jquery实现贪吃蛇功能

页面部分

<body>
<canvas id="c1" width="300" height="300" style="background:#9FC"></canvas>
</body>

jquery部分


function Block(ctx){

this.x=0;//x坐标
this.y=0;//y坐标
this.ctx=ctx;//画布
this.draw=function(){
//绘图方法
ctx.fillRect(this.x*20,this.y*20,20,20);
}
}
$(function(){
$(document).keydown(function(e){
switch(e.keyCode){
case 37:
if(vx!=1) {vx=-1;vy=0;}
break;
case 38:
if(vy!=1) {vy=-1;vx=0;}
break;
case 39:
if(vx!=-1) {vx=1;vy=0;}
break;
case 40:
if(vy!=-1) {vy=1;vx=0;}
break;
}
})

var canvas=document.getElementById("c1");
ctx=canvas.getContext("2d");
var b1=new Block(ctx);
var b2=new Block(ctx);
var b3=new Block(ctx);
var vx=1;//水平速度
var vy=0;//竖直速度
var arr=[];
var food=new Block(ctx);//食物
arr.push(b1);
arr.push(b2);
arr.push(b3);
var move=function(){
ctx.clearRect(0,0,300,300);//画布清空
//控制除第一块以外的其他快,每一块等于前一块位置
for(var i=arr.length-1;i>0;i--){
arr[i].x=arr[i-1].x;
arr[i].y=arr[i-1].y;
}
//控制第一块
b1.x+=vx;
b1.y+=vy;

//检测食物
if(b1.x==food.x && b1.y==food.y){

randomFood();
var b=new Block(ctx);
b.x=-1;
b.y=-1;
arr.push(b);
}
//撞墙
if(b1.x<=-1||b1.y<=-1||b1.x>=15||b1.y>=15){
clearInterval(timer);
alert("撞墙了Game Over")
return;
}
//撞到自己
for(var i=1;i<arr.length;i++){

if(arr[i].x==b1.x && arr[i].y==b1.y){
clearInterval(timer);
alert("撞到自己了 Game Over")
return;
}
}
//循环绘图
for(var i=0;i<arr.length;i++){
arr[i].draw();
}
food.draw();
}

var randomFood=function(){
food.x=parseInt(Math.random()*15);
food.y=parseInt(Math.random()*15);
}
var timer=setInterval(move,200);//定时器控制移动
})

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于贪吃蛇是一个比较复杂的游戏,需要涉及到许多细节的处理,因此写贪吃蛇需要一定的前端开发经验。下面是一个简单的贪吃蛇示例,使用jQuery实现: HTML代码: ```html <!DOCTYPE html> <html> <head> <title>贪吃蛇</title> <meta charset="utf-8"> <style> #game { width: 500px; height: 500px; border: 1px solid #000; position: relative; } .snake { width: 20px; height: 20px; background-color: green; position: absolute; } .food { width: 20px; height: 20px; background-color: red; position: absolute; } </style> </head> <body> <div id="game"></div> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="snake.js"></script> </body> </html> ``` JavaScript代码: ```javascript $(function() { // 创建游戏区域 var $game = $('#game'); var gameWidth = $game.width(); var gameHeight = $game.height(); // 创建蛇 var snake = [ {x: 3, y: 1}, {x: 2, y: 1}, {x: 1, y: 1} ]; // 创建食物 var food; // 初始化游戏 function init() { // 清空游戏区域 $game.empty(); // 创建蛇 $.each(snake, function(index, value) { var $snake = $('<div>').addClass('snake').css({ left: value.x * 20 + 'px', top: value.y * 20 + 'px' }); $game.append($snake); }); // 创建食物 createFood(); } // 创建食物 function createFood() { var x = Math.floor(Math.random() * (gameWidth / 20)); var y = Math.floor(Math.random() * (gameHeight / 20)); food = {x: x, y: y}; var $food = $('<div>').addClass('food').css({ left: x * 20 + 'px', top: y * 20 + 'px' }); $game.append($food); } // 移动蛇 function move() { var head = snake[0]; var tail = snake.pop(); var newHead; switch(direction) { case 'up': newHead = {x: head.x, y: head.y - 1}; break; case 'down': newHead = {x: head.x, y: head.y + 1}; break; case 'left': newHead = {x: head.x - 1, y: head.y}; break; case 'right': newHead = {x: head.x + 1, y: head.y}; break; } // 判断是否撞墙 if(newHead.x < 0 || newHead.x >= gameWidth / 20 || newHead.y < 0 || newHead.y >= gameHeight / 20) { clearInterval(timer); alert('游戏结束!'); return; } // 判断是否吃到食物 if(newHead.x == food.x && newHead.y == food.y) { snake.unshift(tail); createFood(); } // 判断是否撞到自己 for(var i = 1; i < snake.length; i++) { if(newHead.x == snake[i].x && newHead.y == snake[i].y) { clearInterval(timer); alert('游戏结束!'); return; } } // 添加新头 snake.unshift(newHead); // 更新蛇的位置 $.each(snake, function(index, value) { $('.snake').eq(index).css({ left: value.x * 20 + 'px', top: value.y * 20 + 'px' }); }); } // 监听键盘事件 var direction = 'right'; $(document).on('keydown', function(e) { switch(e.keyCode) { case 37: if(direction != 'right') { direction = 'left'; } break; case 38: if(direction != 'down') { direction = 'up'; } break; case 39: if(direction != 'left') { direction = 'right'; } break; case 40: if(direction != 'up') { direction = 'down'; } break; } }); // 开始游戏 init(); var timer = setInterval(move, 200); }); ``` 以上代码仅供参考,如果需要实现更完整、更复杂的贪吃蛇游戏,还需要根据实际需求进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值