ネイティブ JS オブジェクト指向タイピング ゲーム

ネイティブ JS オブジェクト指向タイピング ゲーム

この記事では、JSオブジェクト指向タイピングゲームの具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

デモの紹介

落下するボールに表示されている数字をキーボードでクリックすると、ボールは更新され、任意の位置に再び落下します。さらに、ボールが 5 個落ちるごとに、落下速度が上がり、ボールの位置とサイズが更新され、色がランダムになります。デモ ソース コードは、オブジェクト指向クラス メソッドを実装することで直接使用できます。 HTMLファイルに割り当てて開いて使用します。学校のコースデザインとして使用できます。

ソースコード

<!DOCTYPE html>
<html lang="ja">

<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
</head>
<スタイル>
    。タイトル{
        幅: 1200ピクセル;
        高さ: 80px;
        マージン:400px 自動;
        色: ダークブルー;
        テキストシャドウ: 3px 3px 3px 黒;
        フォントサイズ: 80px;
        フォントの太さ: 太字;
        テキスト配置: 中央;
        font-family: "楷体";

    }
    。名前{
        幅: 1000ピクセル;
        高さ: 40px;
        マージン:0 自動;
        色: スカイブルー;
        テキストシャドウ: 3px 3px 3px 黒;
        フォントサイズ: 40px;
        フォントの太さ: 太字;
        テキスト配置: 中央;
        font-family: "楷体";
    }
</スタイル>

<本文>
    <div style="font-size: 40px;">現在のスコア<div class="score" >0</div></div>
    <div class="title">ネイティブ js の小さなデモ: タイピング練習ゲーム</div>
    <div class="name">著者: lz</div>
</本文>
<スクリプト>
    クラス TypingGame {
        コンストラクタ() {
            this.oSpan
            this.speed = 2;
            this.timer = "";
            この.word;
            this.colors = ["red", "orange", "purple", "black", "pink", "blue", "skyblue", "yellowgreen", "brown", "tomato", "indianred", "orchid", "peru", "aqua", "slateblue", "gray", "grey", "crimson", "green"]//カラーコレクション this.createWord(this.speed);
            document.onkeydown = e => {
                var e = e || window.event;
                var キーコード = e.keyCode || e.which;
                // TypingGame.oSpan = this.$$("span");
                var キーワード = String.fromCharCode(キーコード)。
                    小文字に変換()
                if (this.word === キーワード) {
                    // 1 つ倒す - スコア // 元のスコアを取得する var score = this.$('.score', false).innerText - 0
                    // スコアを+1する
                    スコア++
                    // 1 を加えた後のスコアを div に入れます。 document.querySelector('.score').innerText = score
                    (スコア === 5)の場合{
                        this.speed += 2 // 5文字ごとに落下速度が速くなります}
                    this.oSpan.親要素の子要素を削除します(this.oSpan)
                    this.createWord(this.speed)
                }
            }


        }
        createWord(スピード) {
            let wh=this.getRandom(30,80);//ランダムサイズ this.oSpan = this.creEle('span');
            // コンソールログ(this.oSpan)
            this.setStyle(this.oSpan, {
                幅: wh+"px",
                高さ: wh+"px",
                位置: '絶対'、
                上: 0,
                左: this.getRandom(document.documentElement.clientWidth - 30) + "px",
                境界半径: "50%",
                行の高さ: '30px'、
                テキスト配置: 'center'、
                背景色: this.colors[this.getRandom(18)],
                色: "白",
                フォントの太さ: "太字",
                テキスト配置:"center",
                行の高さ:wh+"px"
            })

            document.body.appendChild(this.oSpan)
            // ランダムな文字: 97~122
            var randomNum = this.getRandom(97, 123)
            this.word = String.fromCharCode(randomNum);

            this.oSpan.innerText = this.word
            // このラベルはゆっくりと下に移動します this.elementsMove(this.speed);
        }
        要素を移動します() {
            // コンソールログ(this.oSpan)
            // タイマー clearInterval(this.timer)
            this.timer = setInterval(() => {
                // 高さを取得します var t = this.oSpan.offsetTop;
                // 高さを増やす t += this.speed;
                console.log(このスピード)
                // このタグがブラウザの下部に到達したらゲームオーバー
                t >= document.documentElement.clientHeight - 30 の場合 {
                    クリア間隔(this.timer)
                    if (confirm("ゲームオーバーです。もう一度プレイしますか?")) {
                        location.reload(); // 更新してもう一度再生します}
                }
                // 拡大後のラベルの上部を設定する
                this.oSpan.style.top = t + "px"
            }, 50)
        }
        setStyle(ele, styleObj) {
            (var attr in styleObj) {
                ele.style[属性] = styleObj[属性]
            }
        }
        $(タグ、すべて = false) {
            すべてを返しますか? document.querySelectorAll(tag) : document.querySelector(tag);
        }
        creEle(タグ) {
            document.createElement(タグ) を返します。
        }
        ランダム値を取得します(a, b = 0) {
            var max = Math.max(a, b);
            var min = Math.min(a, b)
            Math.floor(Math.random() * (max - min)) + min を返します。
        }
    }
    新しいタイピングゲーム;
</スクリプト>

</html>

デモのスクリーンショット

改善すべき点

自分で書き直したり、エラープロンプトを追加したり、高さをランダムに更新したりすることができます。速度の最適化がいくらか可能かもしれません。アニメーションを requestAnimationFrame() に変更すると、効果がよりリアルになります。

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

以下もご興味があるかもしれません:
  • JSがタイピングゲームを実現
  • タイピングゲームを実現するjs
  • シンプルなタイピングゲームを実現するJavaScript
  • タイピングアニメーションゲームを実現するネイティブjs
  • JavaScript ゲーム開発:「三国志演義 曹操伝」コンポーネント開発(第 3 回)シナリオ ダイアログでのタイプライター風テキスト出力
  • JavaScript タイピングゲームコード
  • JavaScript タイピングゲーム実装コード
  • JavaScript バルーンタイピングゲーム

<<:  MySQL テーブルの垂直分割と水平分割

>>:  CentOS 7 で Docker のポート転送をファイアウォールと互換性のあるように設定する方法

推薦する

DockerにNginxをインストールする方法

DockerにNginxをインストールするNginx は、IMAP/POP3/SMTP サービスも提...

MySQL における datetime と timestamp の違いと選択

目次1 違い1.1 スペース占有1.2 表現範囲1.3 タイムゾーン2 テスト3つの選択肢MySQL...

yum インストールエラーの問題を解決する 保護されたマルチライブラリバージョン

現在、クラウドサーバーに nginx をインストールする際、最初に zlib などの依存ライブラリを...

MYSQLの文字セット設定方法(端末の文字セット)の詳しい説明

序文ターミナルを使用してデータベースまたはテーブルを作成するたびに、文字セットが latin1 であ...

Nginxドメイン名転送の実装

Nginx の紹介Nginx (「エンジン x」) は、ロシアのプログラマー Igor Sysoev...

Windows で MySQL マスター スレーブ レプリケーションを構成する方法

MySQL マスター/スレーブ レプリケーションを使用すると、1 つのデータベース (マスター デー...

MySQL 5.7 のキーワードと予約語の詳細な説明

序文MySQL と Oracle のキーワードはまったく同じではありません。Oracle データベー...

検索ボックスと検索ボタンの境界線が重なり合わない問題を解決

今日、Baiduのページで練習していたところ、検索ボックスとボタンの余白とパディングの値が0に設定さ...

Webフロントエンド開発エンジニアが習得すべきコアスキル

Web フロントエンド開発に含まれる内容は、主に W3C 標準の構造、動作、パフォーマンスです。では...

Centos7 に DAMO データベースをインストールするチュートリアル

1. 準備Linux オペレーティング システムをインストールした後、ここで Linux 7 を選択...

React 純粋関数コンポーネント setState がページ更新を更新しない問題の解決方法

目次問題の説明:原因分析:解決:補足: Reactでは、フックが使用されている場合、useState...

CSS 評価効果の星の例

何?何のスターコートですか?さて、もっとわかりやすくするために写真を見てみましょう。 よく見ると、パ...

数百万のデータに対して MySQL クエリを最適化する 4 つの方法

目次1. 時間が経つにつれて限界が遅くなる理由2. 百万データシミュレーション1. 従業員テーブルと...

JavaScript 関数構文の説明

目次1. 通常の機能2. 矢印関数3. データパケットJSON 4. オブジェクト5. 約束6. 非...

Vue+Router+Element でシンプルなナビゲーションバーを実装する

このプロジェクトでは、Vue+Router+Element の具体的なコードを共有して、シンプルなナ...