ゲームの Node.JS バージョンを作成する方法

ゲームの Node.JS バージョンを作成する方法

概要

今日は、Node.JS を使用して、シンプルで面白いじゃんけんゲームを紹介します。

ビルドプロセス

  • モジュールのインポート
  • 単純なじゃんけん動作コマンド、現在のゲーム数(ベスト 3)、スコア、コンピュータのランダム動作(じゃんけん/じゃんけん/紙)を定義します。
  • 関連する行単位の読み取りストリームを定義する
  • 画面をクリア
  • 起動プロンプト情報の印刷
  • ラインイベントをリッスンし、読み取られたストリーム(ユーザー入力)に基づいて、ユーザーがゲームを終了するか、移動するかを判断します。
  • クローズ イベントをリッスンします。3 つのゲームがプレイされた場合は、最終結果を出力します。それ以外の場合は、プロセスを直接終了します。
  • ルールに従ってスコアを決定するためのscoreRuleメソッドを定義する

関連API

まずは関連する API を見てみましょう。呼び出し順に API を理解すると、全体のプロセスが明確になります。

リードライン

読み取り可能なストリームからデータを行ごとに読み取ります

基本的な使い方

  • readline.createInterface() メソッドは、新しい readline.Interface インスタンスを作成し、関連付けられた入力読み取り可能ストリームと出力書き込み可能ストリームを定義します。出力ストリームは、入力ストリームの内容を読み取り、印刷プロンプトを出力できます。
  • `process.stdin` と `process.stdout` は、プロセスの読み取り可能ストリームと書き込み可能ストリームに対応します。
  • readline.close() メソッドは、インスタンスが終了し、入力ストリームと出力ストリームの制御が放棄されたことを示すために呼び出されます。ゲームオーバー ~
  • process.exit([code]) メソッド: ノード プロセスを終了します。code のデフォルト値は 0 で、正常に終了したことを示します。読み取り可能なストリームの読み取りであれ、インスタンスの完了イベントであれ、リッスンして何かを行う必要があります。そうでなければ、何の意味があるのでしょうか?
  • 行イベントのリッスン: 入力ストリームが行末入力 (\n、\r、または \r\n) を受信するたびに、それがトリガーされます。つまり、ノード コンソールで Enter キーまたは Return キーを押すと、読み取り可能なストリームによって受信された文字列を使用して、リッスン コールバック関数が呼び出されます。

チョーク

Chalk は、ノード端末用のスタイル ライブラリで、端末出力文字列の色、太字、非表示、背景色、その他のスタイルを変更できます。

const チョーク = require('チョーク')
const logText = chalk.green(`
こんにちは、一緒にゲームをしましょう!
`)
コンソール.log(ログテキスト)

クリア

画面クリアコマンド、ノードターミナルは画面をクリアし、現在のターミナルビュー表示をクリアします

これは最も使いやすい方法です。画面をクリアする必要がある場所で clear() メソッドを実行するだけです。

定数クリア = require('クリア')
クリア()

手順に関する追加情報

// 命令リストを定義します。
// プレイヤーが入力した指示が正しいかどうかを判断し、ここからコンピューターのランダム出力を取得します。const act = ['Scissors', 'Rock', 'Cloth']
// 読み取ったストリームに基づいてプレーヤーの入力情報を決定する
// 読み取りストリーム入力をリッスンする rl.on('line', function (input) {
 (入力 === '終了')の場合{
   // [quit] と入力した場合は close() メソッドを実行します rl.close()
 } そうでない場合 (act.indexOf(input) !== -1) {
   // 入力文字列が命令リスト内にある場合 // 対応するコンピュータ命令をランダムに生成します const idx = Math.floor((Math.random() * 3))
   ゲーマー = 行為[idx]
   // スコアリングルールに基づいてプレイヤーがスコアを獲得したかどうかを判定します。const curScore = scoreRule(input, gamer)
   // スコアを累計する score += curScore

   // このラウンドの情報を出力します。let win = curScore === 1 ? '今回はプレイヤーが勝ちます' : curScore === -1 ? '今回はコンピュータが勝ちます' : '同点です。偶然に違いありません'
   結果 = `
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   ラウンド ${num}:
   -------------------
   プレイヤーは${input}をプレイしました
   コンピューターが故障しました: ${gamer}
   ${勝つ}
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   `
   // ストリームに書き込んだ後、次のラウンドに進みます num++;
   console.log(結果)
   // 3ラウンドがプレイされた場合、close()メソッドを実行します。if (num > 3) {
     rl.close()
   }
 } それ以外 {
   // その他の入力は正しい入力プロンプトを出力します console.log(`
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   ゲームを続けるには、[チョキ]、[グー]、[パー]を入力してください
   ゲームを終了するには【quit】と入力してください。
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   `)
 }
})

完全なコード

// ストーン.js
定数 readline = require('readline')
定数クリア = require('クリア')
const チョーク = require('チョーク')

const act = ['はさみ', '石', '布']
数値を1とします
スコアを0にする
ゲーマー = ''
結果 = ''

定数rl = readline.createInterface({
 入力: process.stdin、
 出力: process.stdout
})

クリア()

const beginText = chalk.green(`
============================================

ゲームを始めるには、[チョキ]、[グー]、[パー]を入力してください
ゲームを終了するには【quit】と入力してください。

============================================
`)
コンソール.log(テキスト開始)

rl.on('line', 関数(入力) {
 (入力 === '終了')の場合{
   rl.close()
 } そうでない場合 (act.indexOf(input) !== -1) {
   const idx = Math.floor((Math.random() * 3))
   ゲーマー = 行為[idx]
   const curScore = scoreRule(入力、ゲーマー)
   スコア += 現在のスコア

   win = curScore === 1 ? '今回はプレイヤーが勝ちます' : curScore === -1 ? '今回はコンピュータが勝ちます' : '同点です、偶然に違いありません'
   結果 = `
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   ラウンド ${num}:
   -------------------
   プレイヤーは${input}をプレイしました
   コンピューターが故障しました: ${gamer}
   ${勝つ}
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   `
   数値++;
   console.log(結果)
   (数値>3)の場合
     rl.close()
   }
 } それ以外 {
   コンソール.log(`
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   ゲームを続けるには、[チョキ]、[グー]、[パー]を入力してください
   ゲームを終了するには【quit】と入力してください。
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   `)
 }
})

// プロセスの終了と終了をリッスンする rl.on('close', function () {
 (数値>3)の場合
   winText = score > 0 ? 「プレイヤーは最終的に勝利しました」 : score < 0 ? 「プレイヤーは結局負けました、いい加減にしてください」 : 「信じられない引き分け」
   コンソール.log(`
   ==========================
   このラウンドは終了しました。プレイヤーの合計スコアは ${score} です。
   ${winText}
   ==========================
   `)
 }
 プロセス終了(0)
})

関数スコアルール(プレイヤー、NPC) {
 // チョキ、パー // グー、チョキ // パー、グー if (player === npc) {
   0を返す
 }
 if ((プレイヤー === 'はさみ' && npc === '布')
   || (プレイヤー === '石' && NPC === 'はさみ')
   || (プレイヤー === '布' && NPC === '石')) {
   戻り値 1
 } それ以外 {
   -1を返す
 }
}

アイデアを出す

Node を学習する過程で、依存するモジュールや API がどんどん増えていきますが、これは間接的に npm ライブラリの威力を示すものでもあります。検索することで、必要な機能を見つけて使用することができます。 API の波に迷わないでください。必要なときに検索スキルを使用することを忘れないでください。

ここでの[じゃんけん]はとてもうるさい(見るのが耐えられないほど)ですが、私たちの学習プロセスはそのうるさいところから始まり、どんどん深く進んでいき、あなたの繊細な姿がきっとうるさいところの上に残されるでしょう。私について文句を言うのは大歓迎、ノードにさらに深く入り込むのは大歓迎、さあ~

以上がNode.JS版ミニゲームの書き方の詳細です。Node.JS版ミニゲームの詳細については、123WORDPRESS.COMの他の関連記事もご覧ください。

以下もご興味があるかもしれません:
  • Node.js を使用してコマンドライン ゲームを実装する方法
  • Nodejs は、複数の人が同時にオンラインでマウスを動かして小さなゲームを共有することを実現します。
  • Node.js を使用したマルチプレイヤー ゲーム サーバー エンジンの実装
  • Node.js リアルタイム マルチプレイヤー ゲーム フレームワーク
  • node.js はゲームのバックエンド開発に適していますか?
  • Nodejs でタイムドクローラーを実装する完全な例
  • NodeJSとブラウザにおけるこのキーワードの違い
  • Node.js の TCP 接続処理のコア プロセス

<<:  MySQL Installer Community 5.7.16 インストール詳細チュートリアル

>>:  DockerコンテナのIPアドレスを取得する方法の詳細な説明

推薦する

適応型ウェブページを設計および作成する方法

3G の普及により、携帯電話を使ってインターネットにアクセスする人が増えています。モバイル デバイス...

clipboard.js の使用法の概要

目次(1)はじめに: (2)クリップボードの内容をコピーする方法は次のとおりです。 (3)関数演算に...

純粋な HTML ページを送信し、パラメータを渡し、ID を確認する方法

プロジェクトにはアンケートが必要ですが、クライアントはアンケートのタイトルが純粋なHTMLタグでなけ...

HTMLからReactを実装する方法を教えます

ReactとはReact は、効率的で高速なユーザー インターフェイスを構築するためのシンプルな J...

CSS 3.0とビデオを組み合わせることでクリエイティブなオープニング効果を実現

CSS 3.0 とビデオを組み合わせて実現したクリエイティブなオープニングをご紹介します。効果は次の...

レスポンシブ Web をデザインするにはどうすればいいですか?レスポンシブウェブデザインのメリットとデメリット

最近レスポンシブ デザインについて学んでいて、これについていくつか整理してみました。写真の一部はイン...

Vueは虫眼鏡付きの検索ボックスを実装します

この記事では、Vueを使用して虫眼鏡付きの検索ボックスを実装する方法を紹介します。具体的な内容は次の...

Linuxシステムにmsfをインストールするプロセスの詳細な説明

または、インストールプロセスを自分で書き留めてください。私のサーバーシステムはAliyun Linu...

HTML テーブル マークアップ チュートリアル (41): テーブル ヘッダーの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、ヘッダーの幅と高さはコンテンツに応じて自動的に調整されます。ヘッダーの幅と高さを手動...

MySQL で削除されたレコードが有効にならない理由のトラブルシューティング

オンライン MySQL トランザクションの問題の記録先週の金曜日、大きなテーブルを削除する操作を実行...

Vite2とVue3を使用したウェブサイトの国際化を実現するプロセス全体

目次序文vue-i18nをインストールするロケールの設定getLangs.js の実装i18nインス...

K8Sの5つのコントローラーの紹介と使用

目次k8sのコントローラータイプポッドとコントローラの関係デプロイメント(ステートレスアプリケーショ...

MySQL 5.7.13 ソースコードのコンパイル、インストール、および構成方法のグラフィックチュートリアル

インストール環境: CentOS7 64ビットMINI版公式ソースコードのコンパイルおよびインストー...

Expressはログイン認証を実装

この記事では、ログイン認証を実装するためのExpressの具体的なコードを例として紹介します。具体的...

DOCTYPE宣言の機能と使い方の詳しい説明

1. ブラウザのレンダリングモードとdoctype一部の Web ページは標準に従って作成されていま...