diff --git a/README.md b/README.md index 92a70e3..083396e 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,54 @@ -EndlessSea -========== -游戏相关 ----------- -#### Play: https://zbww.github.io/EndlessSea +# Endless Sea -#### REPORT: https://zbww.github.io/EndlessSea/report.pdf +Endless Sea is a small browser survival game built with HTML5 canvas, jQuery, and plain JavaScript. You guide a fish through an underwater bullet-hell style field, avoid incoming hazards, and collect diamonds to trigger temporary power-ups. -#### CODE: https://github.com/zbww/EndlessSea/blob/master/js/main.js +## Play -> **游戏说明:** +- Live demo: https://zbww.github.io/EndlessSea +- Project report: https://zbww.github.io/EndlessSea/report.pdf +- Original source reference: https://github.com/zbww/EndlessSea/blob/master/js/main.js -> - 使用鼠标控制 -> - 吃**钻石**获得特殊技能 -> - 躲避**除了钻石以外**的飞行物体~ -> - 建议戴上耳机 +## How To Play -> **特色:** +- Move the mouse to steer the fish. +- Avoid every flying object except diamonds. +- Collect diamonds to gain temporary bonuses. +- Press `Space`, `Enter`, or `P` to pause and resume. +- Use headphones if you want the full audio experience. -> - 几乎所有元素都为js动态生成 -> - **全部**图形绘制由js代码完成,未使用任何外部图片 +## Power-Ups +Diamonds can trigger one of several effects: -开发人员: ----------- +- Score bonus +- Speed Down +- 1 UP +- Superfish invincibility +- Big Bomb screen clear +- Small World size reduction -周伯威 zbwwwww@gmail.com -林杨湄 linym012@163.com +## Running Locally -开发时间: ------------ +This project is static and does not require a build step. -2014年7月12日~16日 +1. Clone or download the repository. +2. Open `index.html` in a modern browser. + +If your browser blocks autoplay audio, start the game with a click so music playback can begin normally. + +## Project Notes + +- Most visible game elements are generated dynamically in JavaScript. +- All game graphics are drawn in code with canvas rather than external image assets. +- Audio files are included in the repository under `music/`. + +## Credits + +Developers: + +- Bobwei Zhou +- Yangmei Lin + +Original development period: + +- July 12, 2014 to July 16, 2014 diff --git a/index.html b/index.html index ce8bcb3..8fa031f 100644 --- a/index.html +++ b/index.html @@ -2,13 +2,12 @@ + Endless Sea + - + - diff --git a/js/main.js b/js/main.js index 970c618..70d6cc9 100644 --- a/js/main.js +++ b/js/main.js @@ -8,8 +8,9 @@ /*******************添加canvas**********************/ var width=document.documentElement.clientWidth;//屏幕宽度高度 var height=document.documentElement.clientHeight; - $('body').prepend('请换个浏览器。。'); - var cv=$('#canv')[0].getContext('2d'); + $('body').prepend('请换个浏览器。。'); + var canvasEl=$('#canv')[0]; + var cv=canvasEl.getContext('2d'); /*******************数学计算函数********************/ var cos=Math.cos, sin=Math.sin, random=Math.random, PI=Math.PI, abs=Math.abs, atan2=Math.atan2, round=Math.round, floor=Math.floor, sqrt=Math.sqrt; @@ -73,10 +74,162 @@ /*******************全局变量&常量声明***************/ var mx,my,bg,pl,plSize,cursorSize,ballSize,bigBallSize,bSize,butterflySize,starSize,d1,d2,d3,t1,t2,score,u1,u2, fps,planeShape,butterflyLine,butterflyShape,diamondShape,Star_6,balls,bigBalls,butterflys,stars,diamonds,waves,ballSpeed, - bigBallSpeed,butterflySpeed,starSpeed,waveSpeed,waveRSpeed,waveWidth,waveMaxR,waveR,ballDensity,bigBallDensity,butterflyDensity,diamondDensity,ballStyle,instructionsContent,aboutContent, - clock,died,level,judge,startBgColor=ranInt(0,359),bgColorTimer=0,life,wudi,wudiTimer,smallTimer,slowTimer,info,timer,flash,pause,pauseTimes,playNum,scoreArr; + bigBallSpeed,butterflySpeed,starSpeed,waveSpeed,waveRSpeed,waveWidth,waveMaxR,waveR,waveNum,ballDensity,bigBallDensity,butterflyDensity,starDensity,diamondDensity,ballStyle,instructionsContent,aboutContent, + clock,died,level,judge,startBgColor=ranInt(0,359),bgColorTimer=0,life,wudi,wudiTimer,smallTimer,slowTimer,info,timer,flash,pause,pauseTimes,playNum,scoreArr,gameStarted,slowFactor,smallFactor; var playNum = 0;//用户玩游戏的总次数 var scoreArr = new Array();//储存玩家得分的数组 + var STORAGE_KEYS = { + scores: 'endlessSea.scores' + }; + + function loadScores() + { + var raw = window.localStorage.getItem(STORAGE_KEYS.scores); + if (!raw) return []; + try + { + var parsed = JSON.parse(raw); + if (!Array.isArray(parsed)) return []; + return parsed.filter(function(item) { return typeof item === 'number' && !isNaN(item); }); + } + catch (err) + { + return []; + } + } + + function saveScores(scores) + { + window.localStorage.setItem(STORAGE_KEYS.scores, JSON.stringify(scores)); + } + + function recordScore(totalScore) + { + var scores = loadScores(); + scores.push(totalScore); + scores.sort(function(a, b) { return b - a; }); + saveScores(scores); + return scores; + } + + function getTopScores(limit) + { + var scores = loadScores().sort(function(a, b) { return b - a; }); + while (scores.length < limit) scores.push(0); + return scores.slice(0, limit); + } + + function renderRanking(scores) + { + var rankContent = ''; + for (var i = 0; i < scores.length; i++) + { + rankContent += '
' + (i + 1) + '. ' + scores[i] + '
'; + } + $('#right2')[0].innerHTML = rankContent; + } + + function clearLoop() + { + if (timer) + { + window.clearInterval(timer); + timer = null; + } + } + + function layoutPanels() + { + var sideWidth = max(width/2-240, 150); + var rightLeft = max(width/2+220, 20); + if ($('#startgame').length) + { + $('#startgame').css({left: width/2-200+'px', top: height/2-100+'px'}); + } + if ($('#pause').length) + { + $('#pause').css({left: width/2-200+'px', top: height/2-100+'px'}); + } + if ($('#die').length) + { + $('#die').css({left: width/2-200+'px', top: height/2-100+'px'}); + } + if ($('.title').length) + { + $('.title').css({top: height/2-200+'px', left: width/2-$('.title').width()/2+'px'}); + } + if ($('#left').length) + { + $('#left').css({left: '20px', width: sideWidth+'px', top: height/2-100+'px'}); + } + if ($('#right').length) + { + $('#right').css({left: rightLeft+'px', width: sideWidth+'px', top: height/2-100+'px'}); + } + if ($('#right2').length) + { + $('#right2').css({left: rightLeft+'px', top: height/2-100+'px'}); + if (!$('#die').length) + { + $('#right2').css({width: sideWidth+'px', 'padding-top': 0+'px'}); + } + } + } + + function resizeGame() + { + width = document.documentElement.clientWidth; + height = document.documentElement.clientHeight; + canvasEl.width = width; + canvasEl.height = height; + $('#canv').css({width: width+'px', height: height+'px'}); + mx = min(max(mx || 0, 0), width); + my = min(max(my || 0, 0), height); + if (pl) + { + pl.x = min(max(pl.x, 0), width); + pl.y = min(max(pl.y, 0), height); + } + layoutPanels(); + drawBG(); + } + + function bindOverlayHover(triggerSelector, panelSelector) + { + $(document).off('mouseenter mouseleave', triggerSelector); + $(document).on('mouseenter', triggerSelector, function() + { + $(triggerSelector).css('background','#1954c0'); + $(panelSelector).fadeIn(500); + }); + $(document).on('mouseleave', triggerSelector, function() + { + $(triggerSelector).css('background','#3369cd'); + $(panelSelector).fadeOut(300); + }); + } + + function max(a,b) + { + return a>b?a:b; + } + + function rebuildScaledShapes() + { + Star_6 = [{r:starSize,t:rad(90)},{r:starSize/2*1.5,t:rad(60)},{r:starSize,t:rad(30)},{r:starSize/2*1.5,t:rad(0)},{r:starSize,t:rad(-30)},{r:starSize/2*1.5,t:rad(-60)},{r:starSize,t:rad(-90)},{r:starSize/2*1.5,t:rad(-120)},{r:starSize,t:rad(-150)},{r:starSize/2*1.5,t:rad(-180)},{r:starSize,t:rad(-210)},{r:starSize/2*1.5,t:rad(-240)}]; + planeShape=[{r:plSize*1,t:PI+3.14},{r:plSize*0.716,t:PI+-2.98},{r:plSize*0.443,t:PI+-2.49},{r:plSize*0.443,t:PI-0.65},{r:plSize*0.716,t:PI-0.25},{r:plSize*1,t:PI+0},{r:plSize*1,t:PI+0},{r:plSize*0.716,t:PI+0.25},{r:plSize*0.443,t:PI+0.65},{r:plSize*0.443,t:PI+2.49},{r:plSize*0.716,t:PI+2.98}]; + } + + function rebuildJudge(diamondRadius) + { + judge={ + ball:cube(plSize/4+ballSize), + bigBall:cube(plSize/4+bigBallSize), + butterfly:cube(plSize/4+butterflySize), + star:cube(plSize/4+starSize), + diamond:cube(plSize/4+diamondRadius) + }; + } function prepossessing() { mx=width/7,my=height/2;//鼠标位置 @@ -93,11 +246,10 @@ u1=6,u2=80;//控制飞机运动的两个阻尼参数, u1:越大表示加速度受速度的负影响越大 u2:越大表示速度越慢 fps=60;//帧率 ballStyle='#eef'; - planeShape=[{r:plSize*1,t:PI+3.14},{r:plSize*0.716,t:PI+-2.98},{r:plSize*0.443,t:PI+-2.49},{r:plSize*0.443,t:PI-0.65},{r:plSize*0.716,t:PI-0.25},{r:plSize*1,t:PI+0},{r:plSize*1,t:PI+0},{r:plSize*0.716,t:PI+0.25},{r:plSize*0.443,t:PI+0.65},{r:plSize*0.443,t:PI+2.49},{r:plSize*0.716,t:PI+2.98}]; butterflyLine=[/*{r:2.4,t:rad(130)},{r:2.5,t:rad(140)},{r:2.5,t:rad(220)},{r:2.4,t:rad(230)},*/{r:3,t:rad(15)},{r:3,t:rad(345)}];//蝴蝶身上的线的极坐标 butterflyShape=[{r:1,t:0},{r:2.7,t:rad(35)},{r:3.5,t:rad(45)},{r:3.2,t:rad(55)},{r:2.33,t:rad(95)},{r:1,t:rad(90)},{r:2,t:rad(120)},{r:2.1,t:rad(150)},{r:1,t:rad(180)},{r:2.1,t:rad(210)},{r:2,t:rad(240)},{r:1,t:rad(270)},{r:2.33,t:rad(265)},{r:3.2,t:rad(305)},{r:3.5,t:rad(315)},{r:2.7,t:rad(325)}]; diamondShape = [{r:d1,t:PI+rad(90+t1+t2/2)},{r:d2,t:PI+rad(90+t2/2)},{r:d2,t:PI+rad(90-t2/2)},{r:d1,t:PI+rad(90-t1-t2/2)},{r:0,t:PI}]; - Star_6 = [{r:starSize,t:rad(90)},{r:starSize/2*1.5,t:rad(60)},{r:starSize,t:rad(30)},{r:starSize/2*1.5,t:rad(0)},{r:starSize,t:rad(-30)},{r:starSize/2*1.5,t:rad(-60)},{r:starSize,t:rad(-90)},{r:starSize/2*1.5,t:rad(-120)},{r:starSize,t:rad(-150)},{r:starSize/2*1.5,t:rad(-180)},{r:starSize,t:rad(-210)},{r:starSize/2*1.5,t:rad(-240)}]; + rebuildScaledShapes(); for (var i in butterflyShape) butterflyShape[i].r*=bSize; balls=[]; //以下四个存储画面中的炮弹 @@ -124,13 +276,7 @@ starDensity=8;//每8个时钟产生一个 diamondDensity=0.0012;//宝石掉落几率 - judge={ - ball:cube(plSize/4+ballSize), - bigBall:cube(plSize/4+bigBallSize), - butterfly:cube(plSize/4+butterflySize), - star:cube(plSize/4+starSize), - diamond:cube(plSize/4+20) - }; + rebuildJudge(20); clock=0; score=0; @@ -148,6 +294,9 @@ info='';//调试信息 pause=false; pauseTimes=30;//最大暂停次数 + gameStarted = false; + slowFactor = 1; + smallFactor = 1; playNum = 0;//(window.localStorage.playNum == undefined ? (window.localStorage.playNum = 0) : window.localStorage.playNum); //游戏次数 scoreArr=new Array(); } @@ -162,20 +311,7 @@ $('body').append('
'); $('body').append(''); $('body').append('
'); - $('#startgame').css('left',width/2-200+'px'); - $('#startgame').css('top',height/2-100+'px'); - $('#left').css('left','20px'); - $('#left').css('width',width/2-240+'px'); - $('#left').css('top',height/2-100+'px'); - $('#right').css('left',width/2+220+'px'); - $('#right').css('width',width/2-240+'px'); - $('#right').css('top',height/2-100+'px'); - $('#right2').css('left',width/2+220+'px'); - $('#right2').css('width',width/2-240+'px'); - $('#right2').css('top',height/2-100+'px'); - $('#right2').css('padding-top',0+'px'); - $('.title').css('top',height/2-200+'px'); - $('.title').css('left',width/2-$('.title').width()/2+'px'); + layoutPanels(); addHelpInfo(); addAboutInfo(); addRankingInfo(); @@ -612,6 +748,8 @@ /*********************设置绘图时钟周期**********************/ function clockStart(){ + clearLoop(); + gameStarted = true; timer=setInterval(function() { if (!pause) { @@ -689,9 +827,23 @@ /*********************事件监听**************************/ document.addEventListener('mousemove',function(e) { - mx=e.x; - my=e.y; + mx=e.clientX; + my=e.clientY; }); + + document.addEventListener('touchstart',function(e) + { + if (!e.touches.length) return; + mx=e.touches[0].clientX; + my=e.touches[0].clientY; + }, {passive:true}); + + document.addEventListener('touchmove',function(e) + { + if (!e.touches.length) return; + mx=e.touches[0].clientX; + my=e.touches[0].clientY; + }, {passive:true}); document.addEventListener('click',function(e) { @@ -712,28 +864,11 @@ }); document.addEventListener('keydown',startPause); + window.addEventListener('resize', resizeGame); /*********************帮助&关于信息************************/ - $('#instructions').mouseenter(function() - { - $('#instructions').css('background','#1954c0'); - $('#left').fadeIn(500); - }); - $('#instructions').mouseleave(function() - { - $('#instructions').css('background','#3369cd'); - $('#left').fadeOut(300); - }); - $('#about').mouseenter(function() - { - $('#about').css('background','#1954c0'); - $('#right').fadeIn(500); - }); - $('#about').mouseleave(function() - { - $('#about').css('background','#3369cd'); - $('#right').fadeOut(300); - }); + bindOverlayHover('#instructions', '#left'); + bindOverlayHover('#about', '#right'); function addHelpInfo() { @@ -747,39 +882,15 @@ function addRankingInfo(t) { - if(localStorage.getItem(localStorage.count)==undefined) - localStorage.setItem(localStorage.count, t);//记录本次游戏得分 - for(var i = 1; i<=localStorage.count; i++)//读取所有分数 - scoreArr[i-1] = parseInt(localStorage.getItem(i)); - var temp; - for(var i = 0; ii;j--) - { - if(scoreArr[j] > scoreArr[j-1] ) /*相邻元素进行比较,若逆序就交换*/ - { - temp =scoreArr[j]; - scoreArr[j] = scoreArr[j-1]; - scoreArr[j-1] = temp; - flag = 1; /*发生了交换,故将交换标志置为真*/ - } - } - if (flag == 0) /*本趟排序未发生交换,提前终止算法*/ - break; + scoreArr = recordScore(t); } - for(var i = 0; i<5; i++)//取前5次最高分输出 + else { - if(scoreArr[i] == undefined) - scoreArr[i] = 0; - /*var x = $('
'); - x[0].innerText =i+1+". "+scoreArr[i]; - x.appendTo('right2'); - */ + scoreArr = loadScores(); } - var rankContent = '
1. '+scoreArr[0]+'
2. '+scoreArr[1]+'
3. '+scoreArr[2]+'
4. '+scoreArr[3]+'
5. '+scoreArr[4]+'
'; - $('#right2')[0].innerHTML = rankContent; - + renderRanking(getTopScores(5)); } /*********************暂停*********************************/ @@ -802,6 +913,7 @@ $('#startgame').remove(); $('html').css({cursor:'none'}); clockStart(); + $('#music')[0].play(); $('#left').fadeOut(300); $('#right').fadeOut(300); $('.title').remove(); @@ -814,30 +926,7 @@ pauseTimes--; $('body').append('
'+_pause+'
'+_instructions+'
'+ '
ABOUT
'+_continue+'
'); - $('#pause').css('top',height/2-100+'px'); - $('#pause').css('left',width/2-200+'px'); - $('.title').css('top',height/2-200+'px'); - $('.title').css('left',width/2-$('.title').width()/2+'px'); - $('#instructions').mouseenter(function() - { - $('#instructions').css('background','#1954c0'); - $('#left').fadeIn(500); - }); - $('#instructions').mouseleave(function() - { - $('#instructions').css('background','#3369cd'); - $('#left').fadeOut(300); - }); - $('#about').mouseenter(function() - { - $('#about').css('background','#1954c0'); - $('#right').fadeIn(500); - }); - $('#about').mouseleave(function() - { - $('#about').css('background','#3369cd'); - $('#right').fadeOut(300); - }); + layoutPanels(); $('#music')[0].pause(); } @@ -888,10 +977,26 @@ function func_slow(t) { var i; - for (i in balls) balls[i].speed/=t; - for (i in bigBalls) bigBalls[i].speed/=t; - for (i in butterflys) butterflys[i].rspeed/=t; - for (i in stars) stars[i].speed/=t; + if (slowFactor !== 1) + { + for (i = 0; i < balls.length; i++) balls[i].speed *= slowFactor; + for (i = 0; i < bigBalls.length; i++) bigBalls[i].speed *= slowFactor; + for (i = 0; i < butterflys.length; i++) butterflys[i].rspeed *= slowFactor; + ballSpeed *= slowFactor; + bigBallSpeed *= slowFactor; + butterflySpeed *= slowFactor; + starSpeed *= slowFactor; + ballDensity *= slowFactor; + bigBallDensity *= slowFactor; + butterflyDensity *= slowFactor; + starDensity /= slowFactor; + waveSpeed *= slowFactor; + window.clearTimeout(slowTimer); + slowFactor = 1; + } + for (i = 0; i < balls.length; i++) balls[i].speed/=t; + for (i = 0; i < bigBalls.length; i++) bigBalls[i].speed/=t; + for (i = 0; i < butterflys.length; i++) butterflys[i].rspeed/=t; ballSpeed/=t; bigBallSpeed/=t; butterflySpeed/=t; @@ -901,17 +1006,22 @@ butterflyDensity/=t; starDensity*=t; waveSpeed/=t;//是小球的平均速度 + slowFactor = t; slowTimer=setTimeout(function() { - ballSpeed*=t; - bigBallSpeed*=t; - butterflySpeed*=t; - starSpeed*=t; - ballDensity*=t; - bigBallDensity*=t; - butterflyDensity*=t; - starDensity/=t; - waveSpeed*=t; + for (var resetBall = 0; resetBall < balls.length; resetBall++) balls[resetBall].speed *= slowFactor; + for (var resetBigBall = 0; resetBigBall < bigBalls.length; resetBigBall++) bigBalls[resetBigBall].speed *= slowFactor; + for (var resetButterfly = 0; resetButterfly < butterflys.length; resetButterfly++) butterflys[resetButterfly].rspeed *= slowFactor; + ballSpeed*=slowFactor; + bigBallSpeed*=slowFactor; + butterflySpeed*=slowFactor; + starSpeed*=slowFactor; + ballDensity*=slowFactor; + bigBallDensity*=slowFactor; + butterflyDensity*=slowFactor; + starDensity/=slowFactor; + waveSpeed*=slowFactor; + slowFactor = 1; },8000); flash=8; } @@ -943,39 +1053,42 @@ function func_small(t) { var i; - for (i in bigBalls) bigBalls[i].size/=t; + if (smallFactor !== 1) + { + for (i = 0; i < bigBalls.length; i++) bigBalls[i].size*=smallFactor; + bigBallSize*=smallFactor; + bSize*=smallFactor; + butterflySize*=smallFactor; + starSize*=smallFactor; + plSize*=smallFactor; + for (i = 0; i < butterflyShape.length; i++) butterflyShape[i].r*=smallFactor; + rebuildScaledShapes(); + rebuildJudge(20); + window.clearTimeout(smallTimer); + smallFactor = 1; + } + for (i = 0; i < bigBalls.length; i++) bigBalls[i].size/=t; bigBallSize/=t; bSize/=t; butterflySize/=t; starSize/=t; plSize/=t; - for (i in butterflyShape) butterflyShape[i].r/=t; - Star_6 = [{r:starSize,t:rad(90)},{r:starSize/2*1.5,t:rad(60)},{r:starSize,t:rad(30)},{r:starSize/2*1.5,t:rad(0)},{r:starSize,t:rad(-30)},{r:starSize/2*1.5,t:rad(-60)},{r:starSize,t:rad(-90)},{r:starSize/2*1.5,t:rad(-120)},{r:starSize,t:rad(-150)},{r:starSize/2*1.5,t:rad(-180)},{r:starSize,t:rad(-210)},{r:starSize/2*1.5,t:rad(-240)}]; - planeShape=[{r:plSize*1,t:PI+3.14},{r:plSize*0.716,t:PI+-2.98},{r:plSize*0.443,t:PI+-2.49},{r:plSize*0.443,t:PI-0.65},{r:plSize*0.716,t:PI-0.25},{r:plSize*1,t:PI+0},{r:plSize*1,t:PI+0},{r:plSize*0.716,t:PI+0.25},{r:plSize*0.443,t:PI+0.65},{r:plSize*0.443,t:PI+2.49},{r:plSize*0.716,t:PI+2.98}]; - judge={ - ball:cube(plSize/4+ballSize), - bigBall:cube(plSize/4+bigBallSize), - butterfly:cube(plSize/4+butterflySize), - star:cube(plSize/4+starSize), - diamond:cube(plSize/4+15) - }; + for (i = 0; i < butterflyShape.length; i++) butterflyShape[i].r/=t; + rebuildScaledShapes(); + rebuildJudge(15); + smallFactor = t; smallTimer=setTimeout(function() { - bigBallSize*=t; - bSize*=t; - butterflySize*=t; - starSize*=t; - plSize*=t; - for (i in butterflyShape) butterflyShape[i].r*=t; - Star_6 = [{r:starSize,t:rad(90)},{r:starSize/2*1.5,t:rad(60)},{r:starSize,t:rad(30)},{r:starSize/2*1.5,t:rad(0)},{r:starSize,t:rad(-30)},{r:starSize/2*1.5,t:rad(-60)},{r:starSize,t:rad(-90)},{r:starSize/2*1.5,t:rad(-120)},{r:starSize,t:rad(-150)},{r:starSize/2*1.5,t:rad(-180)},{r:starSize,t:rad(-210)},{r:starSize/2*1.5,t:rad(-240)}]; - planeShape=[{r:plSize*1,t:PI+3.14},{r:plSize*0.716,t:PI+-2.98},{r:plSize*0.443,t:PI+-2.49},{r:plSize*0.443,t:PI-0.65},{r:plSize*0.716,t:PI-0.25},{r:plSize*1,t:PI+0},{r:plSize*1,t:PI+0},{r:plSize*0.716,t:PI+0.25},{r:plSize*0.443,t:PI+0.65},{r:plSize*0.443,t:PI+2.49},{r:plSize*0.716,t:PI+2.98}]; - judge={ - ball:cube(plSize/4+ballSize), - bigBall:cube(plSize/4+bigBallSize), - butterfly:cube(plSize/4+butterflySize), - star:cube(plSize/4+starSize), - diamond:cube(plSize/4+15) - }; + for (var resetSize = 0; resetSize < bigBalls.length; resetSize++) bigBalls[resetSize].size*=smallFactor; + bigBallSize*=smallFactor; + bSize*=smallFactor; + butterflySize*=smallFactor; + starSize*=smallFactor; + plSize*=smallFactor; + for (var resetShape = 0; resetShape < butterflyShape.length; resetShape++) butterflyShape[resetShape].r*=smallFactor; + rebuildScaledShapes(); + rebuildJudge(15); + smallFactor = 1; },8000); flash=8; } @@ -1000,32 +1113,17 @@ { if (died) return; died=true; + clearLoop(); playNum++; - if(localStorage.count) - localStorage.count++; - else - localStorage.count = 1; $('html').css({cursor:'default'}); var t=clock+score; $('body').append('
'+_gameover+'
'+_scoreis+(t)+'0
'+ '
'+_ranking+'
'+_tryagain+'
'); - addRankingInfo(t+'0'); - $('#die').css('top',height/2-100+'px'); - $('#die').css('left',width/2-200+'px'); - $('.title').css('top',height/2-200+'px'); - $('.title').css('left',width/2-$('.title').width()/2+'px'); + addRankingInfo(t*10); + layoutPanels(); $('#right2').css('width',150+'px'); $('#right2').css('vertical-align','center'); - $('#ranking').mouseenter(function() - { - $('#ranking').css('background','#1954c0'); - $('#right2').fadeIn(500); - }); - $('#ranking').mouseleave(function() - { - $('#ranking').css('background','#3369cd'); - $('#right2').fadeOut(300); - }); + bindOverlayHover('#ranking', '#right2'); $('#diesound')[0].play(); } @@ -1039,5 +1137,6 @@ $('#music')[0].pause(); $('#music')[0].currentTime=0; $('#music')[0].play(); + clockStart(); $("#right2").fadeOut(300); }