캔버스 게임 탐욕스러운 뱀
直接上效果图:
这个贪食蛇关键地方在于数组,它的长度增加其实是数组的增长,就是数组的向前追加等操作,核心就是数组的操作。
完整代码:
<!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="240" height="240" style="border:1px solid #d3d3d3;"> Your browser does not support the HTML5 canvas tag. </canvas> <script> //r数组表示蛇 ; co表示蛇前进的方向,默认向下 ; e表示食物 var ctx = document.getElementById("myCanvas").getContext("2d"), r = [{ x: 10, y: 9 }, { x: 10, y: 8 }], co = 40, e = null; /*为了避免按键太快,使定时器没有反应过来,出现bug*/ var offOn=true; /*这是关卡的开关*/ var offOn01=true; /*关卡倒计开始值*/ var num=3; //循环,间隔为200毫秒 var timer=setInterval(doMove, 200); function doMove() { //给蛇加上阴影效果 ctx.shadowBlur = 20, ctx.shadowColor = "black"; //游戏是否已经结束 if (check(r[0], 0) || r[0].x < 0 || r[0].x >= 24 || r[0].y < 0 || r[0].y >= 24) return; //如果有食物,则根据蛇前进的方向判断是否吃到了食物,并且将蛇数组中最后一个元素换到首部 e != null && ((co == 40 && r[0].x == e.x && r[0].y + 1 == e.y) || (co == 38 && r[0].x == e.x && r[0].y - 1 == e.y) || (co == 37 && r[0].x - 1 == e.x && r[0].y == e.y) || (co == 39 && r[0].x + 1 == e.x && r[0].y == e.y)) ? (r.unshift(e), e = null, r.unshift(r.pop())) : (r.unshift(r.pop())); //根据方向,重新设定蛇数组首元素的坐标,从而进行移动 (co == 40 || co == 38) ? (r[0].x = r[1].x, r[0].y = r[1].y + (co == 40 ? 1 : -1)) : (r[0].x = r[1].x + (co == 39 ? 1 : -1), r[0].y = r[1].y); //清空屏幕 ctx.clearRect(0, 0, 240, 240); //如果有食物,则绘制食物 if (e) ctx.fillRect(e.x * 10, e.y * 10, 10, 10); //绘制蛇 for (var i = 0; i < r.length; i++) ctx.fillRect(r[i].x * 10, r[i].y * 10, 10, 10); //如果没有食物,则在随机位置上加入一粒食物 while (e == null || check(e)) e = { y: (Math.floor(Math.random() * 24)), x: (Math.floor(Math.random() * 24)) }; /*分数*/ ctx.shadowBlur=0; ctx.font="12px Arial"; ctx.fillText("分数:"+(r.length - 2),10,10); ctx.textBaseline="top"; //判断游戏是否结束 if (check(r[0], 0) || r[0].x < 0 || r[0].x >= 24 || r[0].y < 0 || r[0].y >= 24) alert("game over\n你获得:" + (r.length - 2) + "分"); /*设置一个关卡,就是分数到10分后进入下一关,只设置一个关卡*/ if((r.length-2)==10){ if(offOn01){ clearInterval(timer); offOn01=false; var timer0=setInterval(function(){ if(num<=0){ clearInterval(timer0); } ctx.clearRect(0, 0, 240, 240); ctx.font="20px Arial"; ctx.textBaseline="middle"; ctx.textAlign="center"; ctx.fillText("下一关:"+num,120,120); num=--num<0?0:num; },1000); setTimeout(function(){ timer=setInterval(doMove, 100); },4000); } } offOn=true; } //加入键盘事件,用方向键来控制蛇前进的方向 /*(Math.abs(event.keyCode - co) != 2判断不能向后走 left:37,top:38,right:39,bottom:40 反方向刚刚好是相差2 */ document.onkeydown = function(event) { if(offOn){ offOn=false; co = event.keyCode >= 37 && event.keyCode <= 40 && (Math.abs(event.keyCode - co) != 2) ? event.keyCode : co; } } //判断指定位置是否与蛇重叠 /*这是为了检测自己撞到自己或检测食物在贪食蛇里面的*/ function check(e, j) { for (var i = 0; i < r.length; i++) if (j != i && r[i].x == e.x && r[i].y == e.y) return true; return false; }</script> </body> </html>
可以直接复制上面代码看效果;
上面的核心代码:
//如果有食物,则根据蛇前进的方向判断是否吃到了食物,并且将蛇数组中最后一个元素换到首部 e != null && ((co == 40 && r[0].x == e.x && r[0].y + 1 == e.y) || (co == 38 && r[0].x == e.x && r[0].y - 1 == e.y) || (co == 37 && r[0].x - 1 == e.x && r[0].y == e.y) || (co == 39 && r[0].x + 1 == e.x && r[0].y == e.y)) ? (r.unshift(e), e = null, r.unshift(r.pop())) : (r.unshift(r.pop())); //根据方向,重新设定蛇数组首元素的坐标,从而进行移动 (co == 40 || co == 38) ? (r[0].x = r[1].x, r[0].y = r[1].y + (co == 40 ? 1 : -1)) : (r[0].x = r[1].x + (co == 39 ? 1 : -1), r[0].y = r[1].y);
这是贪食蛇的核心代码,就是数组长度添加,和数组里的值怎么改变。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사는 HTML & lt; Progress & Gt에 대해 설명합니다. 요소, 그 목적, 스타일 및 & lt; meter & gt의 차이; 요소. 주요 초점은 & lt; progress & gt; 작업 완료 및 & lt; meter & gt; Stati의 경우

이 기사는 HTML & LT; Datalist & GT에 대해 논의합니다. 자동 완성 제안을 제공하고, 사용자 경험을 향상시키고, 오류를 줄임으로써 양식을 향상시키는 요소. 문자 수 : 159

기사는 HTML5 크로스 브라우저 호환성을 보장하기위한 모범 사례에 대해 논의하고 기능 감지, 점진적 향상 및 테스트 방법에 중점을 둡니다.

이 기사는 HTML & lt; meter & gt에 대해 설명합니다. 범위 내에 스칼라 또는 분수 값을 표시하는 데 사용되는 요소 및 웹 개발의 일반적인 응용 프로그램. & lt; meter & gt; & lt; Progress & Gt; 그리고 Ex

이 기사에서는 브라우저에서 직접 사용자 입력을 검증하기 위해 필요한, Pattern, Min, Max 및 Length 한계와 같은 HTML5 양식 검증 속성을 사용하는 것에 대해 설명합니다.

이 기사는 html5 & lt; time & gt; 시맨틱 날짜/시간 표현 요소. 인간이 읽을 수있는 텍스트와 함께 기계 가독성 (ISO 8601 형식)에 대한 DateTime 속성의 중요성을 강조하여 Accessibilit를 향상시킵니다.

이 기사는 모바일 장치의 반응 형 웹 디자인에 필수적인 Viewport Meta Tag에 대해 설명합니다. 적절한 사용이 최적의 컨텐츠 스케일링 및 사용자 상호 작용을 보장하는 방법을 설명하는 반면, 오용은 설계 및 접근성 문제로 이어질 수 있습니다.

이 기사는 & lt; iframe & gt; 외부 컨텐츠를 웹 페이지, 공통 용도, 보안 위험 및 객체 태그 및 API와 같은 대안을 포함시키는 태그의 목적.
