[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>
以上は【HTML5コードアート】Snake Game withの内容です17 行のコード。その他の関連コンテンツについては、PHP 中国語 Web サイト (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
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。
