Gobangゲームを実現するためのjsキャンバス

Gobangゲームを実現するためのjsキャンバス

この記事では、Gobangゲームを実装するためのキャンバスの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

効果

アイデア

  • canvansはチェス盤を描き、描くときに端にチェスの駒のためのスペースを残します
  • クリックイベントをリッスンし、動きを描画して辞書に記録します
  • 勝敗判定:4方向に十分な連続ピースがあるか確認

コード

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
  <メタ文字セット="UTF-8">
  <title>ym</title>
  <スタイル>
    キャンバス {
      表示: ブロック;
      マージン: 0 自動;
      境界: 0
    }

    。結果 {
      テキスト配置: 中央;
    }
    ボタン{
      表示: ブロック;
      マージン: 0 自動;
      パディング: 4px 20px;
      境界線:0;
      色: #fff;
      アウトライン: なし;
      境界線の半径: 3px;
      背景: #43a6ff
    }
    ボタン:ホバー{
      フォントの太さ: 太字;
      カーソル: ポインタ;
    }
  </スタイル>
</head>
<本文>
<キャンバスid="cv" 幅="200px" 高さ="200px"></キャンバス>
<p class="result"></p>
<button onclick="loadPanel(400, 400,30,13)">更新</button>
<スクリプト>

  パネルをロードします(400, 400,30,13);

  /**
   * 1) クリックして駒を配置し、プレイヤーを切り替えます* 2) 駒の現在の位置に基づいて、「米」の形状を使用して、5つ以上の連続した駒を形成できるかどうかを判断します* @param w チェス盤の幅* @param h チェス盤の高さ* @param cs グリッドサイズ* @param ps チェス駒の半径*/
  関数loadPanel(w, h, cs, ps) {
    i、j、k とします。
    let chks = [[1, 0], [0, 1], [1, 1], [1, -1]]; // 水平、垂直、斜め下向き、斜め上向き let successNum = 5; // 勝利基準 let resultEl = document.querySelector('.result');

    //1) チェス盤を描画します。エッジはチェスの駒の半径で分離する必要があります。 cs = cs || 16; // デフォルトのグリッドの幅と高さ ps = ps || 4; // チェスの駒の半径 h = h || w; // デフォルトでは高さは幅と同じです。 let el = document.getElementById('cv');
    el.setAttribute('幅', w + 'px');
    el.setAttribute('height', h + 'px');
    コンテキストを el.getContext("2d");
    // チェス盤の分割を計算し、切り捨てます。let splitX = ~~((w - 2 * ps) / cs), splitY = ~~((h - 2 * ps) / cs);

    // 辞書ストレージを使用してピースの位置を初期化します。これは配列よりも単純で、メモリ使用量を削減します。let Pieces = {};
    // ループ線描画 context.translate(ps, ps);
    コンテキスト.beginPath();
    コンテキスト.strokeStyle = '#000';
    //垂直線 for (i = 0; i < splitX + 1; i++) {
      コンテキストを cs * i, 0 に移動します。
      コンテキストの行をcs*i、splitY*cs*iに分割します。
      コンテキスト.stroke();
    }
    //水平線 for (j = 0; j < splitY + 1; j++) {
      コンテキストを0に移動する。
      context.lineTo(cs* を分割し、cs* j);
      コンテキスト.stroke();
    }
    コンテキスト.closePath();

    ユーザー = 0、色 = ['#000'、'#fefefe'] とします。
    el.addEventListener('click', 関数(e) {
      x = e.offsetXとします。
        y = e.offsetY、
        //移動範囲を計算する rx = ~~((x - ps) / cs) + (((x - ps) % cs <= cs / 2) ? 0 : 1),
        ry = ~~((y - ps) / cs) + (((y - ps) % cs <= cs / 2) ? 0 : 1);
      //チェスの駒を描画しますcontext.beginPath();
      context.arc(cs * rx, cs * ry, ps, 2 * Math.PI, false);
      context.fillStyle = colors[ユーザー];
      コンテキスト.strokeStyle = '#000';
      user ? user = 0 : user = 1; // プレーヤーを切り替えます context.fill();
      コンテキスト.stroke();
      コンテキスト.closePath();

      //チェスの駒の位置を記録する let piece = Pieces[rx + '-' + ry] = user;

      //M 字型の計算結果。現在のチェスの位置を使用して、特定の方向に 5 つの連続した同一のチェスの駒があるかどうかを計算します。for (j = 0; j < chks.length; j++) {
        num = 1、chk = chks[j]とします。
        (i = 1; i <= 4; i++) の場合 {
          (ピース[(rx + chk[0] * i)+ '-' + (ry + chk[1] * i)] == ピース)の場合{
            数値++
          } それ以外 {
            (i = -1; i >= -4; i--) の場合 {
              (ピース[(rx + chk[0] * i)+ '-' + (ry + chk[1] * i)] == ピース)の場合{
                数値++
              }
            }
            壊す
          }
        }
        if (num == 成功数) {
          resultEl.innerHTML = ['white', 'black'][user] + 'Fangが勝ちます';
          壊す;
        }
      }
    })
  }
</スクリプト>
</本文>
</html>

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

以下もご興味があるかもしれません:
  • JavascriptとHTML5はキャンバスを使用してWeb Gobangゲームを構築し、アルゴリズムを実装します
  • JS キャンバスが Gobang チェス盤を描画します
  • Gobang ゲームの例を実装するためのネイティブ JS+Canvas
  • JS+canvasで実装したGobangゲーム[人間対機械版]
  • Gobangゲームを実装するためのネイティブJS+Canvas
  • Gobangゲームを実現するためのjs+ca​​nvas
  • JS+canvas Gobang人間対コンピュータバトルの実装手順の詳細説明
  • Gobangゲームを実現するJS+Canvas
  • js キャンバスを使用して Gobang ゲームを実現する
  • Gobangゲームを実装するためのJavaScript+キャンバス

<<:  Nginx で Basic Auth ログイン認証を設定する方法

>>:  LinuxにMySQLをインストールするための詳細なチュートリアル

推薦する

血の写輪眼と輪廻眼の特殊効果コードを実現するためのHTML+CSS

結果 (完全なコードは下部にあります): 実装は難しくありませんが、繰り返しコードが多くなります。実...

MySQL の union と union all の簡単な分析

データベースでは、UNION キーワードと UNION ALL キーワードの両方が 2 つの結果セッ...

Reactはダブルスライダークロススライドを実装します

この記事では、Reactでダブルスライダークロススライドを実装するための具体的なコードを参考までに共...

MySQLインデックス最適化分析に関する簡単な説明

記述した SQL クエリが遅いのはなぜですか?作成したインデックスが頻繁に失敗するのはなぜですか?こ...

Docker プライベートリポジトリの管理とローカルリポジトリ内のイメージの削除

1: Dockerプライベートウェアハウスのインストール1. イメージリポジトリからイメージをダウン...

MySQL FAQ シリーズ: ibdata1 ファイルのサイズが突然増加しないようにする方法

0. はじめにibdata1 ファイルとは何ですか? ibdata1 は、innodb システム テ...

MySQL が UNION を使用して 2 つのクエリを接続できない理由の詳細な説明

概要連合接続データセットキーワードは、2つのクエリ結果セットを1つに連結し、同一のレコードを除外する...

WindowsでMysql5.7.17のインストールと起動に失敗する問題を解決する

マシンに初めて MySQL をインストールします。オペレーティングシステムはwin7ですmysqlの...

HTML 挿入画像の例 (HTML 追加画像)

HTML に画像を挿入するには、画像を表示するための HTML タグが必要です。これは、img タ...

Windows サーバー ファイルをローカルにバックアップする方法、Windows サーバー データ バックアップ ソリューション

重要なデータはバックアップする必要があり、リアルタイムでバックアップする必要があります。そうしないと...

MySQLユーザー権限テーブルについての簡単な説明

MySQL はインストール時に自動的に mysql という名前のデータベースを作成します。mysql...

ウェブサイトをIE6、7、8、9の古いバージョンに対応させるための3つのソリューション

Microsoft は後からブラウザの研究開発に力を入れてきましたが、実際のところ、最新の IE ブ...

Docker 起動時の ES メモリ オーバーフローの解決方法

jvm.options ファイルを elasticsearch 構成に追加し、スタック サイズを変更...

Linux で実行中のすべてのプロセスを表示する方法

ps コマンドを使用できます。プロセスの PID など、現在実行中のプロセスに関する関連情報を表示で...

Linux で jar パッケージを起動してバックグラウンドで実行する方法

jar パッケージを実行する Linux コマンドは次のとおりです。方法1: java -jar s...