JS ネイティブ 2048 ゲーム ソース コード共有 (インターネットの最新情報)

JS ネイティブ 2048 ゲーム ソース コード共有 (インターネットの最新情報)

最近、アルゴリズムについて学んでいて、アルゴリズムで動く小さなゲームに出会いました。そのコードは次のとおりです。

効果:

コード:

<ヘッド>
    <メタ文字セット="UTF-8">
    <meta name="viewport" content="width=360px,user-scalable=no" />
    <title>2048 ミニゲーム</title>
    <スタイル>
        本文、h1、div、表、tr、td{
            マージン: 0px;
            パディング: 0px;
        }
        体{
            背景色: rgb(0,0,0);
        }
        h1{
            マージン: 36px 自動;
            テキスト配置: 中央;
            色: rgba(255,255,255,0.7);
            font-family: "楷体";
            フォントサイズ: 48px;
            テキストシャドウ: 1px 2px 3px rgb(134,134,134);
        }
        div{
            マージン: 12px 自動;
            行の高さ: 60px;
        }
        #箱{
            上マージン: -24px;
            幅: 240ピクセル;
            高さ: 60px;
            テキスト配置: 中央;
            フォントの太さ: 太字;
            色: rgb(255,255,255);
        }
        #ボックス入力{
            境界線: 3px実線rgb(255,255,255);
            境界線の半径: 4px;
            ボックスの影: 1px 2px 3px rgb(234,234,234);
        }
        #ボックス入力:フォーカス{
            アウトラインスタイル: なし;
        }
        テーブル{
            マージン: 24px 自動;
            境界線: 3px実線rgb(255,255,255);
            境界線の半径: 6px;
        }
        #ランダム,td{
            幅: 60ピクセル;
            高さ: 60px;
            境界線: 2px実線rgb(255,255,255);
            境界線の半径: 18px;
            テキスト配置: 中央;
            フォントの太さ: 太字;
            色: rgb(255,255,255);
        }
        td:ホバー{
            カーソル: ポインタ;
        }
    </スタイル>
</head>
<本文>
    <h1>2 0 4 8</h1>
<!-- スコアと新しいゲームボタンを表示-->
<div id="ボックス">
    スコア: <span id="span">0</span>
             
    <input id="but" type="button" value="新しいゲーム" />
</div>
<!-- 乱数を表示 -->
<div id="ランダム"></div>
<!-- ゲームのメインレイアウト -->
<表の境界線="3px">
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
</テーブル>
</本文>
<script type="text/javascript">
    var span = document.getElementById("span");
    var but = document.getElementById("but");
    タグ名によって要素を取得します。
    //スコアを定義する var score = 0;
    //乱数を定義 var random = document.getElementById("random");
    var showNums = [2,4,8,16,32,64,128,256,512,1024];
    var showNum = 0;
    //背景色の配列を定義する var colors = ["rgb(255, 169, 182)","rgb(108, 251, 104)","rgb(255, 150, 46)","rgb(255, 121, 46)","rgb(255, 217, 46)",
                "rgb(46, 200, 255)","rgb(46, 113, 255)","rgb(240, 46, 255)","rgb(46, 255, 175)","rgb(153, 134, 255)"];
    // プログラムを初期化し、乱数を生成します /* 開始 */
    関数init(){
        var max = maxNum();
        var 数値 = 0;
        (var i=4;i > 0;i++){
            最大値 < Math.pow(2,i+1) の場合
                num = parseInt(Math.random()*i);
                壊す;
            }そうでなければ(最大値<2048){
                続く;
            }それ以外{
                num = parseInt(Math.random()*showNums.length);
                壊す;
            }
        }
        random.innerHTML = showNums[num];
        色(ランダム);
        showNum = showNums[数値];
    }
    初期化();
    /* 終わり */
     
    //チェス盤の最大値を取得します /* 開始 */
    関数maxNum(){
        var 最大値 = 0;
        for(var i=0;i<td.length;i++){
            if(td[i].innerHTML == ""){
                最大 = 最大;
            }それ以外{
                (parseInt(td[i].innerHTML)>最大)の場合{
                    td[i].innerHTML を解析します。
                }それ以外{
                    最大 = 最大;
                }
            }
        }
        最大値を返します。
    }
    /* 終わり */
     
    // 数字に応じて背景色を表示します /* 開始 */
    関数 color(obj){
        for(var i=0;i < colors.length;i++){
            if(obj.innerHTML == Math.pow(2,i+1)){
                obj.style = "背景色: "+colors[i]+";";
                壊す;
            }
        }
    }
    /* 終わり */
     
    //マージアルゴリズム/* 開始 */
    function offsetTop(obj,index){//マージif(index > 3){
            if(td[(index-4)].innerHTML == obj.innerHTML){
                td[(index-4)].innerHTML = "";
                td[(index-4)].style = "背景色: rgba(0, 0, 0, 0);";
                true を返します。
            }
        }
        false を返します。
    }
    function offsetBottom(obj,index){//マージif(index < 12){
            if(td[(index+4)].innerHTML == obj.innerHTML){
                td[(インデックス+4)].innerHTML = "";
                td[(index+4)].style = "背景色: rgba(0, 0, 0, 0);";
                true を返します。
            }
        }
        false を返します。
    }
    function offsetLeft(obj,index){//Merge leftif(index!=0 && index!=4 && index!=8 && index!=12){
            if(td[(index-1)].innerHTML == obj.innerHTML){
                td[(インデックス-1)].innerHTML = "";
                td[(index-1)].style = "背景色: rgba(0, 0, 0, 0);";
                    true を返します。
            }
        }
        false を返します。
    }
    function offsetRight(obj,index){//Merge rightif(index!=3 && index!=7 && index!=11 && index!=15){
            if(td[(index+1)].innerHTML == obj.innerHTML){
                td[(インデックス+1)].innerHTML = "";
                td[(index+1)].style = "背景色: rgba(0, 0, 0, 0);";
                true を返します。
            }
        }
        false を返します。
    }
    /* 終わり */
     
    //セルが結合されているかどうかを判断/* 開始 */
    関数 merge(obj,index){
        if(offsetTop(obj,index)){
            オフセットボトムの場合(obj,index)
                (オフセット左(オブジェクト、インデックス))の場合{
                    if(offsetRight(obj,index)){
                        obj.innerHTML = parseInt(obj.innerHTML)*2; // 上、下、左、右を結合します。スコア += 16;
                        マージ(obj,インデックス);
                    }それ以外{
                        obj.innerHTML = parseInt(obj.innerHTML)*2; // 上、下、左のみを結合する score += 8;
                        マージ(obj,インデックス);
                    }
                }そうでない場合、(オフセット右(obj,インデックス)){
                    obj.innerHTML = parseInt(obj.innerHTML)*2; // 上、下、右のみを結合する score += 8;
                    マージ(obj,インデックス);
                }それ以外{
                    obj.innerHTML = parseInt(obj.innerHTML)*2; // 上位スコアと下位スコアのみを結合 += 4;
                    マージ(obj,インデックス);
                }
            }それ以外の場合は(offsetLeft(obj,index)){
                if(offsetRight(obj,index)){
                    obj.innerHTML = parseInt(obj.innerHTML)*2; // 上、左、右のみを結合する score += 8;
                    マージ(obj,インデックス);
                }それ以外{
                    obj.innerHTML = parseInt(obj.innerHTML)*2; // 上と左のみを結合します。スコア += 4;
                    マージ(obj,インデックス);
                }
            }そうでない場合、(オフセット右(obj,インデックス)){
                obj.innerHTML = parseInt(obj.innerHTML)*2; // 上と右のみを結合します。スコア += 4;
                マージ(obj,インデックス);
            }それ以外{
                obj.innerHTML = parseInt(obj.innerHTML)*2; //スコア += 2 のみをマージします。
                マージ(obj,インデックス);
            }
        }それ以外の場合は(offsetBottom(obj,index)){
            (オフセット左(オブジェクト、インデックス))の場合{
                if(offsetRight(obj,index)){
                    obj.innerHTML = parseInt(obj.innerHTML)*2; // 下、左、右のみを結合します。スコア += 8;
                    マージ(obj,インデックス);
                }それ以外{
                    obj.innerHTML = parseInt(obj.innerHTML)*2; // 下と左のみを結合します。スコア += 4;
                    マージ(obj,インデックス);
                }
            }そうでない場合、(オフセット右(obj,インデックス)){
                obj.innerHTML = parseInt(obj.innerHTML)*2; // 下と右のみを結合します。スコア += 4;
                マージ(obj,インデックス);
            }それ以外{
                obj.innerHTML = parseInt(obj.innerHTML)*2; // スコア += 2 のみをマージします。
                マージ(obj,インデックス);
            }
        }それ以外の場合は(offsetLeft(obj,index)){
            if(offsetRight(obj,index)){
                obj.innerHTML = parseInt(obj.innerHTML)*2; // 左と右のみを結合する score += 4;
                マージ(obj,インデックス);
            }それ以外{
                obj.innerHTML = parseInt(obj.innerHTML)*2; // 左のみをマージします。スコア += 2;
                マージ(obj,インデックス);
            }
        }そうでない場合、(オフセット右(obj,インデックス)){
            obj.innerHTML = parseInt(obj.innerHTML)*2; // 右側のスコアのみをマージします += 2;
            マージ(obj,インデックス);
        }
    }
    /* 終わり */
     
    //主要
    /* 始める */
    関数gameOver(){
        for(var i=0;i<td.length;i++){
            if(td[i].innerHTML == ""){
                壊す;
            }
            もし(i == 15){
                alert("残念ながらゲームは終了しました...");
            }
        }
    }
    /* 終わり */
     
    //主要
    /* 始める */
    (関数(){
        for(var i=0;i<td.length;i++){
            var 選択 = td[i];
            選択してください。
            choose.onclick = 関数(){
                if(this.innerHTML == ""){
                    this.innerHTML = showNum;
                    マージ(this、this.index);
                    if(this.innerHTML >= 2048){
                        this.innerHTML = "";
                        this.style = "背景色: rgba(0, 0, 0, 0);";
                    }
                    色(これ);
                    初期化();
                }
                スコアを更新します。
                ゲームオーバー();
            }
        }
    })();
    /* 終わり */
     
    //スコアを更新 /* 開始 */
    関数 updateScore(){
        スコアが500以上の場合
            span.style = "色: rgb(255,0,0)";
        }それ以外の場合(スコア> 100){
            span.style = "色: rgb(255,0,255)";
        }それ以外の場合(スコア > 50){
            span.style = "色: rgb(255,255,0)";
        }それ以外の場合(スコア> 20){
            span.style = "色: rgb(0,0,255)";
        }それ以外の場合(スコア > 10){
            span.style = "色: rgb(0,255,0)";
        }
        span.innerHTML = スコア;
    }
    /* 終わり */
     
    //新しいゲーム/*開始*/
    しかし、onclick = 関数(){
        場所を再読み込みします。
    }
    /* 終わり */
     
</スクリプト>
</html>

JSネイティブ2048ゲームのソースコードを共有するこの記事はこれで終わりです。より関連性の高いjs 2048ゲームコンテンツについては、123WORDPRESS.COMで以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 2048 ゲームを実装するためのネイティブ js
  • 2048 ゲーム機能の AngularJS 実装 [ソース コードのダウンロード付き]
  • ネイティブ js で 2048 ミニゲームを書く
  • Javascript で書かれた 2048 ゲーム
  • Javascript で 2048 ゲームを書く
  • 2048 ゲームの JavaScript バージョン

<<:  3つの簡単な調整でMySQLを最適化する

>>:  VirtualBox で作成された Debian 仮想マシンは Windows ホストとファイルを共有します

推薦する

docker compose を使用してハーバープライベートウェアハウスをインストールする詳細なチュートリアル

概要港とは何ですか?英語の単語の意味は「港」です。 Harborはコンテナ(貨物)を保管するために使...

ReactとReduxの配列処理の説明

この記事では、reduce()、filter()、map()、every()、some()、spre...

FileZilla 425 FTP に接続できない (Alibaba クラウド サーバー) の解決策

Alibaba Cloud ServerがFTPに接続できないFileZilla 425 データ接続...

altとtitleの違いの詳しい説明

これら 2 つの属性はよく使用されますが、その違いはまとめられていません。それでは、その使い方をまと...

Dockerバッチコンテナオーケストレーションの実装

導入Dockerfile ビルドの実行は、単一のコンテナの手動操作です。マイクロサービス アーキテク...

純粋な JS を使用して vue.js で双方向バインディング機能を実装する方法

目次まず、双方向バインディングを実装するアイデアについて説明します。これらの機能を実装するための j...

Linux環境でのshadowsocks+polipoグローバルプロキシの設定

1. シャドウソックスをインストールするsudo apt-get install python-pi...

Web デザインのヒント: ページ レイアウトの簡単なルール

繰り返し: サイト全体で特定のページ デザイン スタイルを繰り返します。繰り返し要素としては、特定の...

Firefoxでリンクをクリックしたときに点線の枠線を削除する方法

今日、ブラウザの互換性の問題にいくつか遭遇しました。そのうちの 1 つは奇妙に感じました。Firef...

SELinux 入門

カーネル 2.6 の時代には、アクセス制御セキュリティ ポリシーのメカニズムを提供するために新しいセ...

Vue3.0のさまざまなリスニング方法の包括的な概要

目次リスナー1.ウォッチエフェクト2.見る1.1 聴くための最初の方法1.2 聞く2つ目の方法1.3...

Linuxにグラフィカルインターフェースをインストールする方法

1. Linuxのインストール(rootユーザー操作) 1. vncserver をインストールしま...

Linux での MySQL 5.1 および 5.7 のインストール チュートリアル

以下のコンテンツのオペレーティング システムは次のとおりです: Centos 6.7 yum で M...

WeChatアプレットコンポーネントライフサイクルの落とし穴の記録

通常、コンポーネントのライフサイクルは、ビジネス ロジックが始まる場所です。ビジネスシナリオが複雑で...

フレックスレイアウトを使用してページレイアウトを簡単に実装するためのサンプルコード

では、早速コードを見てみましょう。 1. 上部、中央、下部のレイアウト: <!DOCTYPE ...