JavaScript でグレイウルフのポットビーティングゲームを実装

JavaScript でグレイウルフのポットビーティングゲームを実装

1. プロジェクト文書

ここに画像の説明を挿入

2. ページレイアウトにHTMLとCSSを使用する

HTML部分

<div class="コンテナ">
        <h1 class="スコア">0</h1>
        <div class="progress"></div>
        <div id="開始">
            <h2>ポットはビッグ・バッド・ウルフの手に</h2>
            <button class="start">ゲームを開始する</button></div>
        <div class="rules">ゲームルール</div>
        <div class="rule">
            <p>ゲームのルール:</p>
            <p>1. ゲーム時間: 60 秒</p>
            <p>2. ハンドスピードで競い、グレイウルフに+10ポイント勝つ</p>
            <p>3. シャオ・フイフイを倒す - 10 ポイント</p>
            <a href="#" rel="external nofollow" class="close">[閉じる]</a>
        </div>
        <div class="mask">
            <h1>ゲームオーバー</h1>
            <button class="reStart">再起動</button>
            <button class="finish">ゲームを終了する</button>
        </div>
        <div id="終了">
            <h2>ポットはビッグ・バッド・ウルフの手に</h2>
            <h3>スコア: <span class="scoreEnd"></span> </h3>
        </div>
    </div>

CSS部分

* {
    マージン: 0;
    パディング: 0;
}

。容器 {
    幅: 320ピクセル;
    高さ: 480ピクセル;
    背景: url("./images/game_bg.jpg") 繰り返しなし 0 0;
    マージン: 50px 自動;
    位置: 相対的;
}

.コンテナ>h1 {
    左マージン: 60px;
}

.コンテナ>.進行状況{
    幅: 180ピクセル;
    高さ: 16px;
    背景: url("./images/progress.png") 繰り返しなし 0 0;
    位置: 絶対;
    上: 66px;
    左: 63px;
}

.コンテナ>#start>h2 {
    上マージン: 180px;
    色: 白;
    テキスト配置: 中央;
}

.コンテナ>#start>.start {
    幅: 150ピクセル;
    行の高さ: 35px;
    テキスト配置: 中央;
    色: 白;
    背景: 線形グラデーション(#E55C3D, #C50000);
    境界線の半径: 20px;
    境界線: なし;
    フォントサイズ: 20px;
    位置: 絶対;
    上: 320px;
    左: 50%;
    左マージン: -75px;
}

.コンテナ>.ルール{
    幅: 100%;
    高さ: 20px;
    背景: #ccc;
    位置: 絶対;
    左: 0;
    下部: 0;
    テキスト配置: 中央;
}

.コンテナ>.ルール{
    幅: 100%;
    高さ: 100%;
    背景: rgba(0, 0, 0, 0.5);
    位置: 絶対;
    左: 0;
    上: 0;
    パディング上部: 100px;
    ボックスのサイズ: 境界線ボックス;
    テキスト配置: 中央;
    表示: なし;
}

.rule>p {
    行の高さ: 50px;
    色: 白;
}

.rule>a {
    色: 赤;
}

.コンテナ>.マスク{
    幅: 100%;
    高さ: 100%;
    背景: rgba(0, 0, 0, 0.5);
    位置: 絶対;
    左: 0;
    上: 0;
    パディング上部: 200px;
    ボックスのサイズ: 境界線ボックス;
    テキスト配置: 中央;
    表示: なし;
}

.mask>h1 {
    色: #ff4500;
    テキストシャドウ: 3px 3px 0 #fff;
    フォントサイズ: 40px;
}

.mask>ボタン{
    幅: 100ピクセル;
    行の高さ: 35px;
    テキスト配置: 中央;
    色: 白;
    背景: 線形グラデーション(#74ACCF, #007DDC);
    境界線の半径: 20px;
    境界線: なし;
    フォントサイズ: 20px;
    位置: 絶対;
    上: 320px;
    残り: 30%
}

.mask>.reStart {
    左マージン: -50px;
}

.mask>.finish {
    左マージン: 80px;
    フロート: 右;
}

#仕上げる {
    色: 白;
    テキスト配置: 中央;
    表示: なし;
    上マージン: 100px;
}

#終了 h2 {
    パディング: 25px;
}

3. JavaScriptを使用して効果を実現する

var begin = document.querySelector('#start');
var h = begin.querySelector('h2');
var start.queryselector( '。start'); .Close '); .QuerySelector('。ScoreEnd ');
    // コンソール.log(123);
    // ボタンを非表示にする Finish.style.display = 'none';
    var fadIndex = this.parentNode;
    fadIndex.style.display = 'なし';
    // プログレスバーの長さを設定します。var progressWidth = 180;
    progressHandler(進行幅);
    var タイマー;
    startAnimation(); // アニメーションが開始されます };
// ルール // console.log(rules);
ルール.onclick = 関数() {
    console.log('ゲームルールをクリックしてください');
    ルール.スタイル.表示 = 'ブロック';
};
// 閉じる close.onclick = function() {
    コンソールログ('閉じる');
    ルール.スタイル.表示 = 'なし';
};
// ゲームを再開する reStart.onclick = function() {
    スコア.innerHTML = 0;
    マスクスタイル表示 = 'なし';
    // コンソールログ(スコア.innerHTML);
    var 進行幅 = 180;
    progress.style.width = '180px';
    progressHandler(進行幅);
    アニメーションを開始します。
};
// ゲーム終了ボタンfinishBtn.onclick = function() {
        マスクスタイル表示 = 'なし';
        終了.スタイル.表示 = 'ブロック';
        scoreEnd.innerHTML += score.innerHTML;
        begin.style.display = 'ブロック';
        h.style.display = 'なし';
        progress.style.width = 180 + 'px';
    }
    //プログレスバー関数 progressHandler(index) {
    // タイマーを設定する var setProgress = setInterval(function() {
        索引 - ;
        progress.style.width = インデックス + "px";
        (インデックス<= 0)の場合{
            clearInterval(setProgress); //タイマーをクリア mask.style.display = 'block';
            stopAnimation(); //アニメーションを停止}
    }, 100);
}
//アニメーションを開始する関数 startAnimation() {
    //画像を保存するための2つの配列を定義します var imgArr = ['./images/h0.png', './images/h1.png', './images/h2.png',
        './images/h3.png'、'./images/h4.png'、'./images/h5.png'、'./images/h6.png'、
        './images/h7.png'、'./images/h8.png'、'./images/h9.png'
    ];
    var imgArr2 = ['./images/x0.png', './images/x1.png', './images/x2.png',
        './images/x3.png'、'./images/x4.png'、'./images/x5.png'、'./images/x6.png'、
        './images/x7.png'、'./images/x8.png'、'./images/x9.png'
    ];
    // すべての可能な位置を保存する配列を定義します var arrPos = [{
        左: "98px",
        上: "115px"
    }, {
        左: "17px",
        上: "160px"
    }, {
        左: "15px",
        上: "220px"
    }, {
        左: "30px",
        上: "293px"
    }, {
        左: "122px",
        上: "273px"
    }, {
        左: "207px",
        上: "295px"
    }, {
        左:「200px」、
        上: "211px"
    }, {
        左: "187px",
        上: "141px"
    }, {
        左:「100px」、
        上: "185px"
    }];
    // 画像を作成します var imgs = document.createElement('img');
    imgs.setAttribute('class', 'wolfImages');
    //画像のランダムな位置 var posIndex = Math.round(Math.random() * 8);
    //画像の表示位置を設定します。imgs.style.position = 'absolute';
    imgs.style.left = arrPos[posIndex].left;
    imgs.style.top = arrPos[posIndex].top;
    // コンソールログ(img.style.left);
    // 配列型をランダムに取得します var imgType = Math.round(Math.random()) == 0 ? imgArr : imgArr2;
    // 画像の内容を 0 番目から 5 番目までに制限するように設定します。window.index = 0;
    ウィンドウのインデックス終了 = 5;
    タイマー = setInterval(() => {
        if (インデックス > インデックス終了) {
            画像を削除します。
            タイマーの間隔をクリアします。
            アニメーションを開始します。
        }
        imgs.setAttribute('src', imgType[index]);
        インデックス++;
    }, 400);
    //画像を追加しますcontainer.appendChild(imgs);
    //スコアscoreEverySum(imgs);

}
// スコア統計関数 scoreEverySum(e) {
    e.onclick = 関数() {
        // 画像の内容を 5 番目から 9 番目までに制限するように設定します。window.index = 5;
        ウィンドウのインデックス終了 = 9;
        // 現在クリックされている画像のパスを取得します。 var src = this.getAttribute('src');
        // 画像のアドレスに基づいて判断します // クリックされた画像の種類に基づいてスコアを増減します if (src.indexOf("h") >= 0) {
            スコア.innerHTML = parseInt(スコア.innerHTML) + 10;
        } それ以外 {
            スコア.innerHTML = parseInt(スコア.innerHTML) - 10;
        }
        e.onclick = null
    }
}
//アニメーションを停止する関数 stopAnimation() {
    var img = document.querySelector('.wolfImages');
    コンソールにログ出力します。
    画像を削除します。
    タイマーの間隔をクリアします。
}

4. レンダリング

スタート画面

ここに画像の説明を挿入

終了インターフェース

ここに画像の説明を挿入

これで、JavaScript でポットビーティング グレイ ウルフ ゲームを実装する記事は終了です。より関連性の高い js ポットビーティング グレイ ウルフ コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ブロック崩しゲームを実装するための JavaScript (完全なソースコード付き)
  • 航空機戦争ゲームを実現するためのjs
  • ジャンプゲームを実現するためのjs
  • フリップカードゲームを実現するjs
  • スネークゲームを実現する js (壁を追加)
  • スネークゲームを実装するためのJavaScript

<<:  MySQLのストレージエンジンの詳細な説明

>>:  Nginx サーバーで URL リンクを設定する方法

推薦する

Nginx を使用してポート転送 TCP プロキシを実装する例

目次需要背景Nginx を使用する理由は何ですか? Nginx によるポート転送依存関係をインストー...

異なるドメイン名への PC または携帯電話のアクセスを区別するように Nginx を構成する方法

新しい公式サイトはオンラインですが、携帯電話で新しい公式サイトにアクセスすると、エクスペリエンスが非...

CentOS8 - bash: 文字化けとその解決方法

この状況は通常、中国語言語パックがインストールされていないか、デフォルトの言語設定に問題があるために...

Nginx ロードバランシングとは何か、そしてそれをどのように設定するか

負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現...

Vue カプセル化 TabBar コンポーネントの完全なステップ記録

目次実装のアイデア:ステップ 1: TabBar と TabBarItem のコンポーネント カプセ...

Vue ログインページでクッキーを使用してパスワードを 7 日間記憶する方法

問題の説明プロジェクトのログインページでは、7日間パスワードを記憶する必要がある機能があります。この...

HTML ウェブページの段落レイアウトと改行

Web ページの外観はレイアウトに大きく左右されます。ページ内に長い段落のテキストがある場合、通常は...

CSS のフィルター属性とバックドロップフィルターの適用と違いの詳細な説明

フィルターとバックドロップフィルターにはいくつかの違いがあります。フィルターは現在の要素だけでなく、...

入力タグの名前と値の違い

type はブラウザでの入力と出力に使用されるコントロールです (たとえば、type="t...

Nginx アクセス ログとエラー ログ パラメータの説明

例: nginx ログには、アクセス ログとエラー ログの 2 つの主な種類があります。アクセス ロ...

マークアップ言語 - タイトル

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

MySQL はエンタープライズレベルのログ管理、バックアップ、リカバリの実践的なチュートリアルを実装します

背景事業が発展するにつれ、会社の事業内容や規模は拡大し続け、ウェブサイトには大量のユーザー情報やデー...

HTML と CSS の命名規則の概要

CSS命名規則 ヘッダー: ヘッダーコンテンツ: コンテンツ/含むフッターナビゲーション: navサ...

ストリーマーボタンの効果を実現するCSS3アニメーション

CSS3 を学習する過程で、CSS3 属性を使用すると多くのクールな効果を簡単に実現できることが分か...

フロントエンドフレームワーク Vue における親子コンポーネントデータの双方向バインディングの実装

目次1. 親コンポーネントと子コンポーネント間の一方向の値転送1. 親から子への値の受け渡し2. 子...