So schreiben Sie eine Node.JS-Version eines Spiels

So schreiben Sie eine Node.JS-Version eines Spiels

Überblick

Heute werde ich Node.JS verwenden, um Ihnen ein einfaches und interessantes Schere-Stein-Papier-Spiel zu zeigen.

Build-Prozess

  • Module importieren
  • Definieren Sie einfache Befehle für das Stein-Papier-Verhalten, die aktuelle Anzahl der Spiele (Best of Three), den Punktestand und das zufällige Verhalten des Computers (Schere/Stein/Papier).
  • Definieren Sie einen zugehörigen zeilenweisen Lesestrom
  • Klarer Bildschirm
  • Drucken der Startaufforderungsinformationen
  • Hören Sie sich das Zeilenereignis an und beurteilen Sie anhand des Lesestroms (Benutzereingabe), ob der Benutzer das Spiel beenden oder einen Zug machen möchte.
  • Warten Sie auf das Close-Ereignis. Wenn 3 Spiele gespielt wurden, drucken Sie das Endergebnis aus. Andernfalls beenden Sie den Vorgang direkt.
  • Definieren Sie die Methode scoreRule, um den Score gemäß den Regeln zu bestimmen

Verwandte APIs

Schauen wir uns zunächst die relevante API an. Wir werden die API in der Reihenfolge des Aufrufs verstehen, und der gesamte Prozess wird klar sein.

Lesezeile

Daten zeilenweise aus einem lesbaren Stream lesen

Grundlegende Verwendung

  • Die Methode readline.createInterface() erstellt eine neue Instanz von readline.Interface, definiert den zugehörigen lesbaren Eingabestream und den schreibbaren Ausgabestream. Der Ausgabestream kann den Inhalt des Eingabestreams lesen und die Druckaufforderung ausgeben.
  • „process.stdin“ und „process.stdout“ entsprechen den lesbaren und beschreibbaren Streams des Prozesses.
  • Die Methode readline.close() wird aufgerufen, um anzuzeigen, dass die Instanz beendet ist und die Kontrolle über die Eingabe- und Ausgabeströme aufgegeben wird. Game Over ~
  • Methode process.exit([code]): beendet den Knotenprozess. Der Standardwert von code ist 0, was auf einen erfolgreichen Abschluss hinweist. Unabhängig davon, ob es sich um das Lesen des lesbaren Streams oder das Abschlussereignis der Instanz handelt, müssen wir zuhören und etwas tun, denn was hätte das sonst für einen Sinn?
  • Auf Zeilenereignisse warten: Immer wenn der Eingabestrom eine Zeilenende-Eingabe (\n, \r oder \r\n) empfängt, wird er ausgelöst. Das heißt, wenn wir in der Knotenkonsole die Eingabe- oder Return-Taste drücken, wird die Rückruffunktion zum Warten mit der vom lesbaren Strom empfangenen Zeichenfolge aufgerufen.

Kreide

Chalk, eine Stilbibliothek für Knotenterminals, mit der Sie die Farbe, Fettschrift, Ausblendung, Hintergrundfarbe und andere Stile der Terminalausgabezeichenfolge ändern können.

const Kreide = erforderlich('Kreide')
const logText = kreide.grün(`
Hallo, lass uns zusammen Spiele spielen!
`)
console.log(Protokolltext)

klar

Befehl „Bildschirm löschen“, Knotenterminal löscht den Bildschirm, löscht die aktuelle Terminalansichtsanzeige

Dies ist die einfachste Methode. Führen Sie einfach die Methode clear() aus, wenn Sie den Bildschirm löschen möchten.

const löschen = erforderlich('löschen')
klar()

Zusätzliche Anweisungen für Schritte

// Anweisungsliste definieren,
//Bestimmen Sie, ob die vom Spieler eingegebenen Anweisungen korrekt sind und nehmen Sie hier die zufällige Ausgabe des Computers const act = ['Schere', 'Stein', 'Stoff']
//Bestimmen Sie die Spielereingabeinformationen basierend auf dem Lesestream
// Auf Lese-Stream-Eingabe warten rl.on('line', function (input) {
 wenn (Eingabe === 'beenden') {
   // Wenn Sie [quit] eingeben, führen Sie die Methode close() aus rl.close()
 } sonst wenn (act.indexOf(input) !== -1) {
   // Wenn die Eingabezeichenfolge in der Anweisungsliste enthalten ist // Erzeuge zufällig die entsprechende Computeranweisung const idx = Math.floor((Math.random() * 3))
   Spieler = Handlung[idx]
   //Bestimmen, ob der Spieler basierend auf der Wertungsregel einen Punkt erzielt hat const curScore = scoreRule(input, gamer)
   // Punkte sammeln score += curScore

   // Informationen für diese Runde drucken let win = curScore === 1 ? 'Diesmal gewinnt der Spieler' : curScore === -1 ? 'Diesmal gewinnt der Computer' : 'Es ist unentschieden, es muss ein Zufall sein'
   Ergebnis = `
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   Runde ${num}:
   ----------------------------------
   Der Spieler hat gespielt: ${input}
   Der Computer ist aus: ${gamer}
   ${win}
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   `
   // Nach dem Schreiben in den Stream mit der nächsten Runde fortfahren num++;
   console.log(Ergebnis)
   // Wenn 3 Runden gespielt wurden, führe die Methode close() aus if (num > 3) {
     rl.schließen()
   }
 } anders {
   // Andere Eingaben drucken die korrekte Eingabeaufforderung console.log(`
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   Um das Spiel fortzusetzen, geben Sie bitte ein: [Schere], [Stein], [Papier]
   Um das Spiel zu beenden, geben Sie bitte ein: 【quit】
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   `)
 }
})

Vollständiger Code

// stein.js
const readline = erforderlich('readline')
const löschen = erforderlich('löschen')
const Kreide = erforderlich('Kreide')

const act = ['Schere', 'Stein', 'Stoff']
sei num = 1
sei score = 0
lass Spieler = ''
let result = ''

const rl = readline.createInterface({
 Eingabe: process.stdin,
 Ausgabe: process.stdout
})

klar()

const beginText = kreide.grün(`
============================================

Um das Spiel zu starten, geben Sie bitte ein: [Schere], [Stein], [Papier]
Um das Spiel zu beenden, geben Sie bitte ein: 【quit】

============================================
`)
console.log(BeginnText)

rl.on('Zeile', Funktion (Eingabe) {
 wenn (Eingabe === 'beenden') {
   rl.schließen()
 } sonst wenn (act.indexOf(input) !== -1) {
   const idx = Math.floor((Math.random() * 3))
   Spieler = Handlung[idx]
   const curScore = scoreRule(Eingabe, Spieler)
   Punktzahl += aktuellerScore

   let win = curScore === 1 ? 'Diesmal gewinnt der Spieler' : curScore === -1 ? 'Diesmal gewinnt der Computer' : 'Das Ergebnis ist unentschieden, es muss ein Zufall sein'
   Ergebnis = `
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   Runde ${num}:
   ----------------------------------
   Der Spieler hat gespielt: ${input}
   Der Computer ist aus: ${gamer}
   ${win}
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   `
   Zahl++;
   console.log(Ergebnis)
   wenn (Zahl > 3) {
     rl.schließen()
   }
 } anders {
   konsole.log(`
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   Um das Spiel fortzusetzen, geben Sie bitte ein: [Schere], [Stein], [Papier]
   Um das Spiel zu beenden, geben Sie bitte ein: 【quit】
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   `)
 }
})

// Auf Schließen und Beenden des Prozesses warten rl.on('close', function () {
 wenn (Zahl > 3) {
   winText = Punktzahl > 0? „Der Spieler hat den Endsieg errungen“: Punktzahl < 0? „Der Spieler hat am Ende trotzdem verloren, komm schon“: „Ein unglaubliches Unentschieden“
   konsole.log(`
   ==========================
   Diese Runde endet, die Gesamtpunktzahl des Spielers beträgt ${score}
   ${winText}
   ==========================
   `)
 }
 Prozess.Beenden(0)
})

Funktion scoreRule(Spieler, NPC) {
 // Schere, Papier // Stein, Schere // Papier, Stein if (Spieler === npc) {
   Rückgabe 0
 }
 wenn ((Spieler === „Schere“ && NPC === „Stoff“)
   || (Spieler === „Stein“ && NPC === „Schere“)
   || (Spieler === „Stoff“ && NPC === „Stein“)) {
   Rückgabe 1
 } anders {
   Rückgabe -1
 }
}

Ideen verwerfen

Während wir Node lernen, werden wir mit immer mehr abhängigen Modulen und APIs konfrontiert, was indirekt auch die Leistungsfähigkeit der npm-Bibliothek veranschaulicht. Wir können die gewünschten Funktionen durch Suchen finden und verwenden. Wir haben Verständnis dafür, dass Sie sich in der Flut der APIs nicht verlieren dürfen. Denken Sie nur daran, die Suchfunktionen zu verwenden, wenn Sie sie brauchen.

Das [Schere, Stein, Papier] hier ist so laut (es ist fast unerträglich, es anzusehen), aber unser Lernprozess kann mit der Lautstärke beginnen und immer tiefer gehen, und Ihre zarte Figur wird sicherlich ganz oben auf der Lautstärke bleiben. Beschweren Sie sich gern über mich und gehen Sie tiefer in den Knoten, kommen Sie schon ~

Oben finden Sie Einzelheiten zum Schreiben der Node.JS-Version des Minispiels. Weitere Informationen zur Node.JS-Version des Minispiels finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So verwenden Sie Node.js zum Implementieren von Befehlszeilenspielen
  • Nodejs ermöglicht das Teilen kleiner Spiele mit mehreren Personen, die gleichzeitig online die Maus bewegen
  • Implementierung einer Multiplayer-Gameserver-Engine mit Node.js
  • Node.js-Framework für Echtzeit-Multiplayer-Spiele
  • Ist node.js für die Entwicklung von Spiele-Backends geeignet?
  • Ein vollständiges Beispiel für die Implementierung eines zeitgesteuerten Crawlers mit Nodejs
  • Unterschiede zwischen diesem Schlüsselwort in NodeJS und Browsern
  • Der Kernprozess der NodeJS-Verarbeitung einer TCP-Verbindung

<<:  Ausführliches Installationstutorial für MySQL Installer Community 5.7.16

>>:  Detaillierte Erklärung zum Abrufen der IP-Adresse eines Docker-Containers

Artikel empfehlen

Shell-Skript zur Überwachung des MySQL-Master-Slave-Status

Geben Sie ein Shell-Skript unter Linux frei, um d...

Detaillierte Erklärung des Inline-Formats von HTML-Tabellen

Inline-Format <colgroup>…</colgroup> ...

So installieren Sie mehrere mysql5.7.19 (tar.gz)-Dateien unter Linux

Informationen zur ersten Installation der MySQL-5...

Nexus verwendet Nginx-Proxy zur Unterstützung des HTTPS-Protokolls

Hintergrund Alle Unternehmenswebsites müssen das ...

Vue+Openlayer verwendet modify, um den gesamten Code des Elements zu ändern

Vue+Openlayer verwendet „modify“, um Elemente zu ...

So generieren Sie ein kostenloses Zertifikat mit OpenSSL

1: Was ist OpenSSL? Welche Funktion hat es? Was i...

Über Tomcat kombiniert mit Atomikos zur Implementierung von JTA

Vor Kurzem hat das Projekt die Umgebung gewechsel...

Detaillierte Erläuterung des MySQL MVCC-Mechanismusprinzips

Inhaltsverzeichnis Was ist MVCC Mysql-Sperre und ...

So richten Sie den Ziellink eines Tags auf ein Iframe

Code kopieren Der Code lautet wie folgt: <ifra...

Linux implementiert den Quellcode des Zahlenratespiels

Ein einfacher Linux-Ratespiel-Quellcode Spielrege...

Implementierungscode der HTML-Floating-Promptbox-Funktion

Allgemeine Formulareingabeaufforderungen belegen ...

Auswahl der MySQL-Tabellentyp-Speicher-Engine

Inhaltsverzeichnis 1. Zeigen Sie die Speicher-Eng...