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

推薦する

MySQL でのバイナリ型操作

この記事は主にMySQLデータベースのバイナリ型操作を紹介し、具体的な内容を通して紹介します。MyS...

コマンドを使用してMySQLデータベース(de1)を作成する方法

1. MYSQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...

Vueルータールーティングガードの詳細な説明

目次1. グローバル beforeEach 1. グローバル beforeEach 2. 実装2. ...

VueのSSRサーバーサイドレンダリング例の詳細な説明

サーバーサイドレンダリング (SSR) を使用する理由検索エンジンのクローラーが完全にレンダリングさ...

Dockerのセキュリティについて Docker-TLS暗号化通信の問題

目次1. Dockerのセキュリティ問題2. Dockerアーキテクチャの欠陥とセキュリティメカニズ...

JDBC-idea で mysql をインポートして java jar パッケージに接続する (mac)

序文1. この記事ではMySQL 8.0バージョンを使用していますバージョン5.0と比較すると、パッ...

W3C チュートリアル (11): W3C DOM アクティビティ

ドキュメント オブジェクト モデル (DOM) は、プログラムがドキュメントのコンテンツ、構造、およ...

Ubuntu 18.04 に Nvidia グラフィック カード ドライバーをインストールするチュートリアル (画像とテキスト付き)

0. 事前準備BIOS でセキュア ブートを無効にします。無効にしないと、サードパーティ ソースを...

ウェブサイトはグレー表示されています。画像を含む互換コードはすべてのブラウザをサポートしています

通常、国喪の日、大地震の日、清明節には、ウェブサイト全体を灰色にして、故人への哀悼の意を表します。そ...

jQuery で呼吸カルーセル効果を実現

この記事では、呼吸カルーセル効果を実現するためのjQueryの具体的なコードを参考までに共有します。...

nginx + php の「入力ファイルが指定されていません」の解決策

本日、ローカル開発環境で突然「入力ファイルが指定されていません」というエラーが発生してしまいました。...

CSS3 での 2D および 3D 変換の実装

CSS3 は、要素の 2D 平面変換と視覚的な 3D 空間変換を実装します。2D 変換はより頻繁に使...

「いいね!」機能では MySQL と Redis のどちらを使用すればよいでしょうか?

目次1. 初心者が陥りがちな間違い2. Iteratorのremove()メソッドを使用する3. f...

vue-cli 設定では Vuex の完全なプロセスレコードを使用します

目次序文インストールと使用方法モジュラー管理Vuex の状態永続性要約する序文Vue 開発では、ユー...

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

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