ネイティブ 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 のポート転送をファイアウォールと互換性のあるように設定する方法

推薦する

Linux の Docker コンテナで bash を終了する 2 つの方法

bash を終了する場合は、次の 2 つのオプションがあります。最初のもの: Ctrl + d を押...

Vue が Web オンラインチャット機能を実現

この記事では、Webオンラインチャットを実装するためのVueの具体的なコードを参考までに紹介します。...

IE6 で PNG-24 形式の画像を正常に表示させる 2 つの方法

方法1: </html>の後に次のコードを追加してください。コードをコピーコードは次のと...

ReactでのDOM操作の実装

目次前の単語使用シナリオ参照HTML要素クラスコンポーネント機能コンポーネント[DOMノードを親コン...

CSS 標準: vertical-align プロパティ

<br />原文: http://www.mikkolee.com/13私は最近、ver...

XML構文の詳細な説明

1. 文書化ルール1. 大文字と小文字が区別されます。 2. 属性値は引用符(一重引用符または二重引...

Vue.js $refs 使用例の説明

プロパティやイベントがあるにもかかわらず、JavaScript で子コンポーネントに直接アクセスする...

ES6 配列のコピーおよびフィルメソッド copyWithin() および fill() の具体的な使用法

目次バッチコピー copyWithin()配列を埋めるメソッド fill()指数の計算方法については...

Linuxで$を#に変更する方法

このシステムでは、# 記号は root ユーザーを表し、$ 記号は通常のユーザーを表します。では、ど...

トップ 10 Js 画像処理ライブラリ

目次導入1. 異食症2. レナ3. コンプレッサー4. ファブリック5. ぼかす6. 画像を結合する...

ジョセフリング問題を解決する 3 つの JavaScript メソッド

目次概要問題の説明循環リンクリスト順序付き配列数学的再帰要約する概要ジョセフ・リング問題は、ジョセフ...

mysql5.7.17 zip の解凍とインストールの詳細な手順

1. ダウンロードアドレスhttps://dev.mysql.com/downloads/mysql...

HTMLを使用してシンプルなメールテンプレートを作成する

今日は、「ローテク」の問題について書きたいと思います。ちなみに、私は JavaScript Week...

レイアウトサイズを変更するために左右にドラッグする純粋なCSS

ブラウザの非overflow:auto要素resize伸縮機能を利用して、JavaScript を使...

LinuxシステムでFuserコマンドを使用する方法

Fuser コマンドとは何ですか? fuser コマンドは、特定のファイル、ディレクトリ、またはソケ...