[HTML5 코드아트] 17줄의 코드로 구성된 스네이크 게임
꼬마뱀게임
javascrpt 유효코드 17줄
html코드 추가하면 25줄 전체적으로
Chrome 또는 Firefox 실행 방법
연결 테스트
http://lufylegend.com/html5/lufylegend/tcs.html
완료 코드는 다음과 같습니다
<!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> var ctx=document.getElementById("myCanvas").getContext("2d"),r = [{x:10,y:9},{x:10,y:8}],co=40,e=null; ctx.shadowBlur=20,ctx.shadowColor="black"; setInterval(function(){ 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.random()*24 >>>0),x:(Math.random()*24 >>>0)}; if(check(r[0],0) || r[0].x < 0 || r[0].x >= 24 || r[0].y < 0 || r[0].y >= 24)alert("game over\nYou get ["+(r.length-2)+"]"); },100); document.onkeyup = function(event){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>
몇몇 친구들이 댓글을 달고 싶어해서 간단한 댓글 설명을 추가했습니다. 아래를 참조하세요
<!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; //给蛇加上阴影效果 ctx.shadowBlur=20,ctx.shadowColor="black"; //循环,间隔为100毫秒 setInterval(function(){ //游戏是否已经结束 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.random()*24 >>>0),x:(Math.random()*24 >>>0)}; //判断游戏是否结束 if(check(r[0],0) || r[0].x < 0 || r[0].x >= 24 || r[0].y < 0 || r[0].y >= 24)alert("game over\nYou get ["+(r.length-2)+"]"); },100); //加入键盘事件,用方向键来控制蛇前进的方向 document.onkeyup = function(event){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>
몇몇 친구들이 코드를 읽기 어렵다고 해서 여기에 있습니다. 형식 조정이 있는 또 다른 코드 다음 코드는 위 코드의 각 부분의 기능에 해당하지만 작성 방법이 다릅니다
<!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> var ctx=document.getElementById("myCanvas").getContext("2d"); var r = [{x:10,y:9},{x:10,y:8}]; var co=40; var e=null; ctx.shadowBlur=20; ctx.shadowColor="black"; function onframe(){ if(check(r[0],0) || r[0].x < 0 || r[0].x >= 24 || r[0].y < 0 || r[0].y >= 24)return; if(e){ if((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()); switch(co){ case 37: r[0].x = r[1].x - 1; r[0].y = r[1].y; break; case 38: r[0].x = r[1].x; r[0].y = r[1].y - 1; break; case 39: r[0].x = r[1].x + 1; r[0].y = r[1].y; break; case 40: r[0].x = r[1].x; r[0].y = r[1].y + 1; break; } 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.random()*24 >>>0),x:(Math.random()*24 >>>0)}; } if(check(r[0],0) || r[0].x < 0 || r[0].x >= 24 || r[0].y < 0 || r[0].y >= 24){ alert("game over\nYou get ["+(r.length-2)+"]"); } } setInterval(onframe,100); document.onkeyup = function(event){ if(event.keyCode>=37 && event.keyCode<=40 && (Math.abs(event.keyCode-co) != 2)){ co = event.keyCode; } } 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>
위는 17줄의 [HTML5 코드 아트] 스네이크 게임의 내용입니다. 더 많은 관련 내용을 보시려면 PHP 중국어 웹사이트(www.php.cn)를 팔로우하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

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

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

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

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

HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.
