CocosCreator Huarongdaoデジタルパズルの詳しい説明

CocosCreator Huarongdaoデジタルパズルの詳しい説明

序文

華容路とは何ですか?

誰もがこのような数字パズルゲームで遊んだことがあると思います。華容路の典型的な例です。

華容道は中国古来の民間パズルゲームで、その豊富なバリエーションと飽きのこない特徴から、ルービックキューブや独立ダイヤモンドチェスとともに、海外の情報専門家から「知的ゲーム界の三大奇観」と呼ばれています。

今日は華容路について学びます。

文章

今日は主に 3*3 レイアウトを使用します。初心者が cocos クリエイターを使用して簡単なデモを作成しました。順を追って説明しましょう。

1. パネル

まず、パネルの配置をランダムに生成します

2. 華容島ソリューション

アイデア:

徹底的な方法: このゲームの遊び方は誰でも知っています。スライドする四角形をスライドし、シャッフルされた四角形を数字に従って小さいものから大きいものの順に並べてレベルをクリアします。ここで、初心者は網羅的な方法を使用して、考えられるあらゆる状況で最適な解決策を見つけます。

網羅的方法では、次のようなことがよく見られます。

  • 幅優先探索: 幅優先探索では、まず最初のステップをすべての方向で検索し、次に 2 番目のステップを各実行可能な方向で検索します。
  • 深さ優先探索: 深さ優先探索では、パスがブロックされるまで一方向への探索を継続し、その後 2 番目の方向を検討します。

ここでは幅優先探索を使用し、最適なソリューション、つまりステップ数が最も少ないソリューションを取得することだけが必要です。
具体的な操作は図に示されています。

最初の 3 つのステップを例に挙げてみましょう。

  • 最初のステップを進めるには 3 つの方法があります。
  • 2 番目のステップでは、最初のステップに基づいてブロックを再度移動する必要があり、移動するたびに可能性が広がります。
  • あらゆる可能性を保存する必要があります。
  • 次の動きは、前のステップのすべての可能性に基づいています。
  • 3 番目のステップでは、重複があることがわかるので、支出を削減し、重複するブランチをタイムリーに処理する必要があります。
  • 重複した分岐が処理されますが、分岐の数も指数関数的に増加します。例の配置を見てみましょう。ステップ数が増えると、分岐の数は図のようになります。

  • ブランチがクリアされたことを検出すると、幅検索は終了します。
  • 最後に、各ステップの移動プロセスを取得します。

理解した後、それをデモに適用して、レベルをクリアできるかどうかをテストできます。

デモの自動配置をクリックします

3. コード

//ソリューションをループする while (true) {
    ステップ: Array<any> = [];
    lastGrad: Array<any> = this.mMapData[this.mMapData.length - 1] とします。
    コンソールにログ出力します。
    //最後の勾配のすべての結果を走査し、次のステップを解きます for (let i = 0; i < lastGrad.length; i++) {
        行列を lastGrad[i]["行列"] とします。
        答えをlastGrad[i]["答え"]とします。
        結果: Array<any> = this.move(matrix, answer, steps);
        if (結果) {
            console.log("結果:", 結果);
            解決(結果);
            戻る;
        }
    }

    ステップの長さ<=0の場合{
        console.log("クエリ結果が失敗しました。");
        解決(null);
        戻る;
    }
    this.mMapData.push(ステップ);
}
プライベートmove(matrix: Array<number>, answer: Array<any>, steps: Array<any>): Array<any> {
    (i = 0 とします; i < matrix.length; i++) {
        if (matrix[i] != -1) { // 空のスペースではないので、移動可能かどうかを確認し、移動可能な結果を​​取得します // 上下左右に移動できるかどうかを確認します。
            result0: Array<any> = this.moveUp(i, matrix, answer, steps); とします。
            result1: Array<any> = this.moveDown(i, matrix, answer, steps); とします。
            result2: Array<any> = this.moveLeft(i, matrix, answer, steps); とします。
            result3: Array<any> = this.moveRight(i, matrix, answer, steps); とします。

            if (結果1) {
                結果1を返します。
            }
            if (結果2) {
                結果2を返します。
            }
            if (結果0) {
                結果0を返します。
            }
            if (結果3) {
                結果3を返します。
            }
        }
    }
    null を返します。
}
プライベートmoveRight(i: number, matrix: Array<number>, answer: Array<any>, steps: Array<any>): Array<any> {
    行番号を i % this.mLine とします。
    行番号を Math.floor(i / this.mLine) とします。
    if (line + 1 >= this.mLine) return null; //範囲外 let targetIndex: number = row * this.mLine + (line + 1);
    if ( matrix[targetIndex] != -1) return null; //移動不可 //移動 //移動 //変更用に新しい配列をコピー let newMatrix: Array<number> = JSON.parse(JSON.stringify(matrix));
    newAnswer: Array<any> = JSON.parse(JSON.stringify(answer)); を作成します。
    // ポジションを交換 let temp: number = newMatrix[i];
    新しいマトリックス[i] = 新しいマトリックス[ターゲットインデックス];
    newMatrix[ターゲットインデックス] = temp;
    newAnswer.push({ "index": i, "dic": 3 });

    (this.checkIsExist(newMatrix))の場合{
        null を返します。
    }

    (this.checkPass(newMatrix))の場合{
        新しい回答を返します。
    }
    ステップ: any = {};
    ステップ["行列"] = newMatrix;
    ステップ["回答"] = newAnswer;
    ステップをプッシュします。
}
/**
 * クリアされているか確認してください*/
プライベートcheckPass(matrix: Array<number>): boolean {
    (matrix[this.mRow * this.mLine - 1] != -1) の場合は false を返します。
    (i = 0 とします; i < this.mRow * this.mLine - 1; i++) {
        (行列[i] != i + 1)の場合{
            false を返します。
        }
    }
    コンソール.log(マトリックス)
    true を返します。
}
/**
 * 重複していないか確認する */
プライベートcheckIsExist(行列): ブール値{
    (this.mMapMatrixS[JSON.stringify(matrix)]) の場合 {
        true を返します。
    }
    this.mMapMatrixS[JSON.stringify(matrix)] = "1";
    false を返します。
}

4. 注記

デモでは 3 * 3 の配置が示されており、これはブラウザを使用して実行できますが、4 * 4 または 5 * 5 は分岐が多すぎるため実行できません。後ほど、Python スクリプトを使用して 4 * 4、5 * 5 以上の配置を実装し、最後に JSON レベルの情報をエクスポートします。

以上がCocosCreator Huarongdaoデジタルパズルの詳しい説明です。CocosCreator Huarongdaoの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • CocosCreator 入門チュートリアル: ネットワーク通信
  • Cocos2d-x 3.x 入門チュートリアル (パート 2): ノード クラス
  • Cocos2d-x 3.x 入門チュートリアル (I): 基本概念
  • Cocos2d-x 入門チュートリアル (詳細な例と説明)
  • CocosCreatorでシューティングゲームを作る詳しい解説
  • CocosCreatorでクールなレーダーチャートを描く方法
  • CocosCreator MVCアーキテクチャの詳細な説明
  • CocosCreatorメッセージ配信メカニズムの詳細な説明
  • CocosCreatorでWeChatゲームを作成する方法
  • CocosCreator システムイベントがどのように生成され、トリガーされるかについての詳細な説明
  • CocosCreatorでゲームコントローラーを使用する方法
  • CocosCreator 入門チュートリアル: TS で初めてのゲームを作る

<<:  Centos7 での Mysql5.7.19 の詳細なインストールチュートリアル

>>:  元のPATHを上書きしてコマンドが見つからないというメッセージが表示されるコマンド失敗の問題を解決する方法

推薦する

ES6 における Object.assign() の使い方の詳細な説明

目次2. 目的2.1 オブジェクトにプロパティを追加する2.3 オブジェクトの複製2.4 複数のオブ...

曇り空のアイコン効果を実現する純粋な CSS

効果効果は以下のとおりです​実装のアイデアbox-shadow プロパティを使用して、複数の灰色の円...

ウェブデザインの達人がよく使うレスポンシブフレームワークを共有する(要約)

この記事では、Web デザインの達人がよく使用するレスポンシブ フレームワーク (概要) を紹介し、...

DockerにRedisをインストールし、設定ファイルとして起動する詳細な説明

更新: 最近、サーバーがマイニング ウイルスによってハッキングされたことが判明しました。これは、おそ...

MySQL 8.0.11 MacOS 10.13 のインストールと設定方法のグラフィックチュートリアル

MacにMySQLデータベースをインストールし、環境変数を設定する手順を参考までに記録します。具体的...

CentOS6.9 での MySQL 5.7.17 のインストールと設定のチュートリアル

CentOS6.9はMysql5.7をインストールします。参考までに、詳細は次のとおりです。 1. ...

win10にUbuntu18デュアルシステムをインストールするとmmx64.efiが見つからないという問題が発生する

Ubuntu 18のインストール中に、USBディスクからUbuntuのインストールを開始すると、mm...

Angular のパフォーマンス最適化: サードパーティ コンポーネントと遅延読み込みテクノロジー

目次概要環境の準備プロジェクトのパフォーマンスに影響を与える要因遅延読み込みとは何ですか?プロジェク...

美しいHTMLコードの書き方

美しい HTML コードの外観 美しい HTML コードの書き方。外国人が書いた記事: 美しい HT...

Windows 10 での mysql5.5 データベース コマンドラインの中国語文字化け問題を解決する

システムをリセットした後、かなり前にインストールした MySQL データベースのコンソール クエリで...

ES6 の Set および WeakSet コレクションの詳細な説明

目次セットは値が重複しない特別なコレクションです。セットコレクション基本API独自の価値判断セットを...

vue backtop コンポーネントを実装するための完全なコード

効果: コード: <テンプレート> <div class="back-t...

ウェブデザインにおけるグリッドシステム

グリッドシステムの形成1692年、新しく即位したフランス国王ルイ14世は、フランスの印刷技術のレベル...

Mariadb リモート ログイン構成と問題解決

序文:インストール プロセスについては詳しく説明しません。問題に直接触れましょう。MySQL のリモ...

MySQL データベースの基礎 SQL ウィンドウ関数の例の分析チュートリアル

目次導入導入集計関数 + over()ソート関数 + over() ntile() 関数 + ove...