古典的なスネークゲームの JavaScript 実装

古典的なスネークゲームの JavaScript 実装

この記事では、古典的なスネークゲームを実装するためのJavaScriptの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

主にシングルトン モードを使用し、すべての要素が動的に作成されます。

1. マップを作成する

var マップ;
    関数マップ(){
        this.mapp = null;
        this.makemap=関数(){
            this.mapp = document.createElement ("div");
            this.mapp.className = "mymap";
            ドキュメントの body に this.mapp という子要素を追加します。
        }
    }

2. ヘビのモデルを作成する

ヘビの最初の 3 つのセクションを格納するコレクションを作成し、コレクションをトラバースして、ヘビのサイズと色を作成し、各セクションの幅と高さを 30 ピクセルに設定し、ヘビの頭の方向を右に初期化します。

var スナック;
    関数スナック(){
        this.snackk=[["赤",3,1,null],["ピンク",2,1,null],["ピンク",1,1,null]];
        this.direct="右";
        this.makesnack=関数(){
             for(var i=0;i<this.snackk.length;i++){
                 if (this.snackk[i][3]==null){
                     this.snackk[i][3] = document.createElement("div");
                     this.snackk[i][3].className = "eatsnack";
                     this.snackk[i][3].style.backgroundColor =this.snackk[i][0];
                     Map.mapp.appendChild(this.snackk[i][3]);
                 }
                 this.snackk[i][3].style.left=this.snackk[i][1]*30+"px";
                 this.snackk[i][3].style.top=this.snackk[i][2]*30+"px";
             }
        };

3. 動的スネーク。スネークの各セクションを格納するセット スナックを後ろから前へトラバースし、各セクションの属性を後ろから前へ渡し、スネークのヘッドの移動方向を設定します。方向の変化に応じて、スネークの左余白と上余白が変化します。次に、タイマーを設定して、100 ミリ秒ごとにスネークを移動します。

this.movesnack=関数(){
            var long = this.snackk.length - 1;
            for(var i=long; i>0; i--){
                this.snackk[i][1] = this.snackk[i-1][1];
                this.snackk[i][2] = this.snackk[i-1][2];
            }
            スイッチ(this.direct){
                case "right": //右 this.snackk[0][1] +=1;
                    壊す;
                case "left": //left this.snackk[0][1] -=1;
                    壊す;
                case "down": //ダウン this.snackk[0][2] +=1;
                     壊す;
                case "up": //上 this.snackk[0][2] -=1;
                     壊す;
            } 

4. 食べ物を作る。

食べ物はマップ上にランダムに生成されます。食べ物のサイズは、ヘビの各セクションのサイズと同じです。

var グオグオ;
    関数 guozi(){
        this.guoo = null;
        これ.x;
        これ.y;
        this.makeguozi=関数(){
            this.x = Math.floor( Math.random() * 30); //0-29
            this.y=Math.floor( Math.random() * 20); //0-19
            if(this.guoo==null){
                this.guoo=document.createElement("div");
                this.guoo.className = "guozi";
                Map.mapp.appendChild(this.guoo);
            }
            this.guoo.style.left=this.x * 30+"px";
            this.guoo.style.top =this.y * 30+"px";
        }
    }

5. キーボード イベントを設定し、上、下、左、右のキーを使用してヘビの頭の方向を制御します。

document.body.onkeyup=関数(e){
           // コンソールログ(e);
            スイッチ(e.keyCode){
                ケース37: //leftif(Snack.direct!="right"){
                            Snack.direct = "左";
                        }
                    壊す;
                ケース39:// rightif(Snack.direct!="left"){
                        Snack.direct = "正しい";
                    }
                    壊す;
                ケース38: //up if(Snack.direct!="down"){
                        Snack.direct = "上";
                    }
                    壊す;
                ケース40: //Nextif(Snack.direct!="up"){
                       Snack.direct = "ダウン";
                    }
                    壊す;
                ケース87:
                    Snack.direct != "down" の場合 {
                        Snack.direct = "上";
                    }
                    壊す;
                ケース65:
                    Snack.direct != "right") の場合 {
                        Snack.direct = "左";
                    }
                    壊す;
                ケース68:
                    Snack.direct != "left") の場合 {
                        Snack.direct = "正しい";
                    }
                    壊す;
                ケース83:
                    Snack.direct != "up" の場合 {
                        Snack.direct = "ダウン";
                    }
                    壊す;
            }
        };

6. ヘビの頭と餌の位置を検出します。ヘビの頭が餌を食べると、ヘビの長さが長くなり、スナックセットに要素が追加されます。次に、餌がランダムに作成され、餌の位置が検出され、再び餌を食べます。

if(this.snackk[0][1]==Guoguo.x && this.snackk[0][2]==Guoguo.y ){
                 this.snackk.push([
                         "ピンク"、
                         this.snackk[this.snackk.length-1][1],
                         this.snackk[this.snackk.length-1][2],
                         ヌル
                 ]);
                 グオグオ.makeguozi();
                 }

7. 蛇の体が壁を通り抜けるように設定します。蛇の頭の上、下、左、右の余白が 0 に等しい場合は、余白を最大値に変更します。

if(this.snackk[0][1]>29){
                this.snackk[0][1]=0 ; //右から壁を通り抜ける}
            if(this.snackk[0][1]<0){
                this.snackk[0][1]=29; //右から壁を通り抜ける}
            if(this.snackk[0][2]>19){
                this.snackk[0][2]=0 ; //右から壁を通り抜ける}
            if(this.snackk[0][2]<0){
                this.snackk[0][2]=19; //右から壁を通り抜ける}
            this.makesnack();
            this.stopsnack();

        };

8. ゲームが終了するように設計します。ヘビは自分の体にぶつかると死にます。ゲームが終了し、タイマーがオフになります。ヘビの頭の上端と左端がヘビの体の一部の上端と左端と等しくなると、ゲームが終了し、ゲームの終了を示すプロンプト画像がポップアップ表示されます。

this.stopsnack=関数(){
            for(var k=this.snackk.length-1;k>0;k--){
                this.snackk[0][1]==this.snackk [k][1] && this.snackk[0][2]==this.snackk [k][2]) の場合 {
                    クリア間隔(時間);
                    var gameover = document.createElement("div");
                    gameover.className = "オーバー";
                    gameover.style.display = "ブロック";
                    Map.mapp.appendChild (ゲームオーバー);
                }
            }
} 

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript の絶妙なスネーク実装プロセス
  • JSはスネークゲームを実装する
  • スネークゲームのアイデアを実現するためのJavaScript
  • JS 実用的なオブジェクト指向スネークゲームの例

<<:  Ubuntuにopencvをインストールする正しい方法の詳細な説明

>>:  UbuntuにCMakeをインストールするいくつかの方法の詳細な説明

推薦する

Vue3.0 は虫眼鏡効果のケーススタディを実装します

達成される効果は、固定ズームが 2 倍になり、マウスが左側の画像領域に入るとマスク レイヤーが表示さ...

VMware10 での CentOS 7 のインストールと設定のチュートリアル

Ubuntu が今日のデスクトップ ユーザーの間で最も人気のある Linux オペレーティング シス...

Ubuntu 20.04 では、隠し録音ノイズ低減機能が有効になります (推奨)

最近、 Ubuntu 20.04でkazamを使用して録音しているときに、問題が見つかりました。シス...

RocketMQ の Docker インストールとインストール中に発生した問題の解決策

目次rocketmqイメージを取得する名前rvを作成する単一のブローカーノードを作成するrocket...

HTML ページにミュージック ビデオを追加する例

1. ビデオタグFirefoxでは自動再生をサポートしますが、GoogleとIEではサポートしません...

CSSを使用して特別なロゴやグラフィックを実装する

1. はじめに画像は多くのスペースを占め、画像の数が増えるほど管理が難しくなるため、シンプルなラベル...

VueはEchartsを使用して3次元棒グラフを実装します

この記事では、Echartsを使用して3次元棒グラフを実装するVueの具体的なコードを参考までに共有...

VMware Workstation のインストール Linux (Ubuntu) システム

システムをコンピューターにインストールする方法がわからない場合は、Linux を学習したい場合は、仮...

Rabbitmq heartbea ハートビート検出メカニズムの原理の分析

序文RabbitMQ を使用する場合、一定期間クライアントと RabbitMQ サーバーの間でトラフ...

MySQLで日付を比較する方法の詳細な説明

データ型が datetime であるフィールド add_time を持つテーブル product が...

nginx プロキシ サーバーで双方向証明書検証を構成する方法

証明書チェーンを生成するスクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント...

Win10+Ubuntu 20.04 LTS デュアル システム インストール (UEFI + GPT) (画像とテキスト、複数の画像には注意)

Win10 のインストール (すでにインストールされている場合はスキップしてください) win10...

SQL 文で OR と AND を混在させる場合のヒント

現在、このような要件があります。ログインした人がカスタマー サービス担当者である場合、注文は「このカ...

システム CD をマウントして yum ウェアハウスを構築する VMware 15.5 バージョンのグラフィック チュートリアル

1. CentOS 7 仮想マシンを開きます。 2. 仮想マシンにログインし、リストにないユーザー名...

Nginx 仮想ホストを構成する 3 つの方法 (ポートベース) の詳細な説明

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...