网站首页 > 基础教程 正文
欢迎来到程序小院
贪吃蛇
玩法:
键盘方向键(← ↑ → ↓)键来控制方向,空格键暂停,每成功吃到食物,分数加1,
随着蛇身的加长,速度也会上升,当蛇头跃出边界或者撞到自身时,游戏结束
开始游戏
HTML
<div class="wrap">
<ul class="snake_wrap">
<li class="light"></li>
<li class="light"></li>
<li class="light"></li>
</ul>
<span class="food"></span>
<div class="gameData">
<div class="gameScore"><span>分数:</span>0</div>
<div class="gameTime">用时:<span class="time" id="time">00:00:00</span></div>
<div class="gameRule">
<p>
【 ↑ 】上键<br />
【←】左键<br />
【→】右键<br />
【 ↓ 】下键<br />
【 - 】空格键 暂停<br />
</p>
</div>
</div>
</div>
CSS
.snake_wrap{
width:810px;
height:600px;
position: absolute;
top:0px;
left:0px;
overflow: hidden;
z-index:999;
}
.snake_wrap li{
width:14px;
height:14px;
background:#FFC400;
float: left;
margin: 1px 0 0 1px;
position: absolute;
}
.food{
width:14px;
height:14px;
background:#f4645f;
position: absolute;
top:30px;
left:45px;
z-index:999;
}
js
$(function(){
getTime()
$(this).closest('.start').stop().hide();
mySnakeFn();
$('.game_over').on('click',function(){
$('.start').stop().show();
$(this).closest('.over').stop().hide();
$('input[name=your_name]').val('');
})
$('.clear_data').on('click',function(){
$('.ranking_list').empty();
})
})
function getTime()
{
var hour,minute,second;//时 分 秒
hour=minute=second=0;//初始化
var int;
var millisecond=0;//毫秒
int=setInterval(timer,1000)
//计时
function timer(){
second++;
if(second>=60){
second=0;
minute=minute+1;
}
if(minute>=60){
minute=0;
hour=hour+1;
}
hour_text = hour == 0 ? '00' : hour;
minute_text = minute == 0 ? '00' : minute;
second_text = second < 10 ? '0'+ second : second;
document.getElementById('time').innerText=
hour_text+':'+minute_text+':'+second_text+'';
}
}
function mySnakeFn(){
//全局变量对相
var myVar = {
//移动控制变量
del_x:-15,
del_y:0,
//初始长度
myscore:0,
//移动速度
speed:100,
//计时器
itimes:null
}
// 初始位置
;(function(){
var arr_snake = [['300px','390px'],['300px','405px'],['300px','420px']];
$('.snake_wrap').empty();
$('.snake_wrap').append('<li></li><li></li><li></li>')
$('.snake_wrap li').each(function(value){
$(this).css({'top':arr_snake[value][0],'left':arr_snake[value][1]})
})
})(jQuery);
//键盘控制--上下左右暂停
;(function(){
//暂停判定
var stop = true;
$(document).keydown(function(event) {
switch(event.keyCode){
//空格 暂停
case 32:stop ? clearInterval(myVar.itimes) : run();
stop = !stop;
break;
//左
case 37:directionKey(-15,0,true);
break;
//上
case 38:directionKey(0,-15,false);
break;
//右
case 39:directionKey(15,0,true);
break;
//下
case 40:directionKey(0,15,false);
break;
}
});
})(jQuery);
//方向判断
function directionKey(y1,y2,bour){
if(!myVar.del_x == bour){
myVar.del_x = y1;
myVar.del_y = y2;
}
}
function run(){
//计时器,每speed时刷新一次
myVar.itimes = setInterval(function(){
//获取当前食物位置
var food_top = $('.food').position().top;
var food_left = $('.food').position().left;
//设置新增蛇头坐标
var header_top = $('.snake_wrap li').eq(0).position().top + myVar.del_y;
var header_left = $('.snake_wrap li').eq(0).position().left + myVar.del_x;
//当前蛇头颜色重置
$('.snake_wrap li').eq(0).css({'background': '#7FD75A'});
//新增蛇头,并赋予样式
$('.snake_wrap').prepend('<li></li>');
$('.snake_wrap li').eq(0).css
({'left':header_left + 'px','top':header_top + 'px','background':'rgba(244,100,95,1)'})
//移除最后一节蛇尾
$('.snake_wrap li:last').remove();
//判断蛇是否吃到食物
if((header_left == (food_left - 1)) && (header_top == (food_top - 1))){
var last_top = $('.snake_wrap li:last').position().top;
var last_left = $('.snake_wrap li:last').position().left;
$('.snake_wrap li:last').css('border-radius','0');
$('.snake_wrap').append('<li></li>');
$('.snake_wrap li:last').eq(0).css({'left':last_left + 'px','top':last_top + 'px'})
$('.snake_wrap li:last').eq(0).css('border-radius','0');
//刷新食物
foodRandom();
//蛇身长度
myVar.myscore++;
scoreFn(myVar.myscore);
//每加长5,速度提升10
if(!(myVar.myscore%5) && myVar.speed > 10){
clearInterval(myVar.itimes);
myVar.speed -= 10;
run();
}
}
//边界判断
borderDetection(header_top,header_left);
//自撞判断
selfDetection(header_top,header_left);
},myVar.speed)
}
run();
//分数
function scoreFn(x){
$('.gameScore').html('<span>分数:</span>'+ x)
}
//食物
function foodRandom(){
var t = 40;
var x = 54;
var y = 0;
var repeat = false;
var top = parseInt(Math.random() * (t - y) + y);
var left = parseInt(Math.random() * (x - y) + y);
//判断食物与蛇身坐标是否重合
$('.snake_wrap li').each(function() {
if($(this).position().left == left && $(this).position().top == top){
foodRandom();
}else{
repeat = true;
}
});
//如果食物没在蛇身上,定位食物
if(repeat){
$('.food').css({'top':top*15 + 1 + 'px','left':left*15 + 1 + 'px'});
}
}
foodRandom();
// 边界判定
function borderDetection(HT,HL){
if(HT<0 || HT > 585 || HL < 0 || HL >795){
clearInterval(myVar.itimes);
gameOver();
//rankingList()
}
}
//自撞判定
function selfDetection(HT,HL){
//从第二节开始,坐标是否与蛇头重合
$('.snake_wrap li:gt(0)').each(function(index, val) {
var this_top = $(this).position().top;
var this_left = $(this).position().left;
if( HL == this_left && HT == this_top ){
clearInterval(myVar.itimes);
gameOver();
}
})
}
//游戏结束
function gameOver(){
setTimeout(() => {
hsycms.tips('tips','游戏结束,恭喜你获得'+myVar.myscore+'分',function(){
location.reload();
},3000)
}, 0);
}
}
源码
需要源码请关注添加好友哦^ ^
转载:欢迎来到本站,转载请注明文章出处https://ormcc.com/
猜你喜欢
- 2024-10-12 300 毫秒分胜负:维基百科的总阻塞时间优化之道
- 2024-10-12 文本划词标注功能代码实现 文本划词标注功能代码实现方法
- 2024-10-12 让 React 代码行数减少78%的 htmlx 有这么神?
- 2024-10-12 DOM 高级工程师不完全指南 imc高级工程师
- 2024-10-12 如何对自己尚不熟悉Angular.js的情况下对代码进行调试
- 2024-10-12 每个 Web 开发人员都应该了解的新浏览器 API
- 2024-10-12 JavaScript 中比较重要的 Apply, Call 和 Bind方法
- 2024-10-12 如何实现页面元素的拖拽——JavaScript拖拽插件SortableJS
- 2024-10-12 使用jQuery的缩略图导航库 jquery 导航
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)