この記事では、Gobangゲームを実装するためのキャンバスの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。 効果 アイデア
コード <!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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Nginx で Basic Auth ログイン認証を設定する方法
>>: LinuxにMySQLをインストールするための詳細なチュートリアル
この記事では、参考までにMySQL 5.7.16の無料インストール版のチュートリアルを紹介します。具...
ウェブページにBaiduマップを挿入するBaidu Maps を自分の Web ページに追加したい場...
目次序文以前のバージョンイテレータパターンイテレータファクトリ関数イテレータプロトコル最後に序文多く...
この記事では、例を使用して MySQL での USING と HAVING の使用方法を説明します。...
ナレッジポイントをプレビューします。アニメーションフレーム背景グラデーションvar() と calc...
1. Tomcatサービスが開いていませんブラウザのアドレスバーにlocalhost:8080と入力...
目次安定スロットリング要約する安定自動ドアは人を感知してドアを開け、5 秒間のカウントダウンを開始し...
序文日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行す...
MySQL ログイン パスワードを忘れた場合、解決方法は実はとても簡単です。MySQL メイン構成フ...
これは非常にシンプルな純粋な CSS3 の白い雲の浮遊する背景効果です。浮かぶ白い雲の特殊効果は、C...
環境の準備1. 環境構築React Native 中国語ウェブサイト2. 開発ツール フロントエンド...
MySQL-8.0.23 をダウンロードクリックしてダウンロード: mysql-8.0.23-li...
<br />コンテンツ ページの記事の場合、記事が長すぎる場合やカテゴリ (ランキング)...
目次1. querySelectorは単一の要素を照会する1. ドキュメントインスタンスの呼び出し2...
学習プロセス中にプッシュ イメージが常にタイムアウトすることがわかったため、Alibaba Clou...