Coffeescript ist eine winzige kleine Sprache, die JavaScript kompiliert. Es gibt keine Interpretation zur Laufzeit, da Sie Coffeescript schreiben, sie in JavaScript zusammenstellen und die resultierenden JavaScript -Dateien für Ihre App verwenden. Sie können jede JavaScript -Bibliothek (z. B. jQuery) innerhalb von Coffeescript verwenden, indem Sie ihre Funktionen mit der entsprechenden CoffeeScript -Syntax verwenden. Coffeescript kann sowohl zum Schreiben von JavaScript auf dem Front-End als auch zum JavaScript auf dem Back-End verwendet werden.
Nach dem kleinen Buch über Coffeescript reduziert die Syntax von CoffeeScript die Anzahl der Zeichen, die Sie benötigen, um Ihre JS um rund 33% bis 50% zu bearbeiten. Ich werde ein einfaches Tic-Tac-Toe-Spiel präsentieren, das mit Coffeescript erstellt wurde (Sie haben dies wahrscheinlich bereits aus dem Titel erraten), das im Rohes-Coffeescript-Format 4963 Zeichen enthält, während der kompilierte Javascript-Code 7669 Zeichen enthält. Das ist eine Differenz von 2706 Zeichen oder 36%!
Weil Sie kürzere, weniger fehleranfällige Schreiben schreiben (z. B. werden Variablen automatisch gescopt, was bedeutet, dass Sie die Globale nicht versehentlich überschreiben können, indem Sie VAR weglassen), können Sie Ihre Projekte schneller beenden. Die knappe Syntax von CoffeeScript sorgt auch für lesbarerer Code und letztendlich Code, der einfacher zu pflegen ist.
In diesem Artikel werden wir ein einfaches Tic-Tac-Toe-Spiel mit Coffeescript und JQuery bauen. Wenn Sie sich vor der Untersuchung eines praktischen Falls über die Syntax nachlesen möchten, schlage ich vor, dass ich Ihre JavaScript -Entwicklung mit Coffeescript -Artikel hier bei SitePoint beschleunigen möchte. Dadurch werden auch beschrieben, wie Sie CoffeeScript über NPM (den Knotenpaketmanager) installieren.
Wie immer ist der gesamte Code aus diesem Tutorial auf GitHub verfügbar und eine Demo ist auf Codepen oder am Ende des Tutorials verfügbar.
Die häufigsten CoffeeScript -Befehle, die Sie verwenden, sind:
Coffee -c -Dateiname kompiliert die Coffeescript -Datei mit demselben Namen in eine Datei, jedoch mit einer .js -Erweiterung (Coffeescript -Dateien haben normalerweise .Coffee -Erweiterung).
Coffee -cw -Dateiname achtet nach Änderungen in einer Datei (wann immer Sie die Datei speichern) und kompilieren Sie sie.
Coffee -cw -Ordnere/ achtet nach Änderungen an allen .coffee -Dateien im Ordner und kompilieren Sie sie im selben Verzeichnis, wenn Änderungen vorliegen.
Schließlich ist es praktisch, Coffeescript aus einem Ordner mit .coffee -Dateien zu einem Ordner mit nur .js -Dateien zu kompilieren.
Kaffee -o JS / -CW / Kaffee wird nach Änderungen in allen .Coffee -Dateien im Kaffeeordner achten und die Ausgabe (JavaScript) im JS -Ordner platzieren.
Wenn Sie sich nicht in Terminals interessieren, können Sie ein Tool mit einer GUI verwenden, um Ihre Coffeescript -Dateien zu verarbeiten. Zum Beispiel können Sie Prepros einer kostenlosen unbegrenzten Testversion probieren (obwohl Sie sie kaufen müssen, wenn Sie es mögen). Das Bild unten zeigt einige der Optionen, die es bietet:
Sie können sehen, dass Prepros alle Arbeiten für Sie erledigt - es richtet Beobachter ein, damit Ihre .coffee -Dateien mit JS zusammengestellt werden. Dadurch können Sie UGLIFY JS verwenden, die Ihren Code minifizieren/komprimieren können. Er kann automatisch Variablen einteilen, und es unterstützt Eced Coffeescript. Präpros können auch für CSS -Präprozessoren wie weniger und Sass- und Vorlagenmotoren wie Jade verwendet werden.
Beginnen wir mit dem Markup:
<span><span><span><div</span> class<span>="wrapper"</span>></span> </span> <span><span><span><header</span> class<span>="text-center"</span>></span> </span> <span><span><span><h1</span>></span>Tic Tac Toe<span><span></h1</span>></span> </span> <span><span><span></header</span>></span> </span> <span><span><span><div</span> id<span>="board"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="alerts welcome"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="notifications"</span>></span><span><span></div</span>></span> </span> <span><span><span><form</span> action<span>=""</span> method<span>="POST"</span>></span> </span> ... <span><span><span></form</span>></span> </span><span><span><span></div</span>></span> </span> <span><span><span><script</span> src<span>="jquery.min.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> src<span>="logic/app.js"</span>></span><span><span></script</span>></span></span>
Die Schnittstelle des Spiels besteht aus folgenden:
In Übereinstimmung mit Best Practice werden sowohl JQuery als auch das Skript, das unsere App tickt, vor dem Schlusskörper -Tag geladen.
Verwenden von CSS können wir die neun beteiligten Quadrate in einem 3 × 3 -Gitter erscheint, indem wir jedes Quadrat schweben und jeden vierten haben.
<span><span>.square:nth-of-type(<span>3n + 1</span>)</span> { </span> <span>clear: both; </span><span>}</span>
Wir können den Quadraten auch eine andere Farbe hinzufügen, je nachdem, ob sie die Klasse X oder O haben (was mit JavaScript hinzugefügt wird).
<span><span>.square.x</span> { </span> <span>color: crimson; </span><span>} </span> <span><span>.square.o</span> { </span> <span>color: #3997ff; </span><span>}</span>
als Referenz finden Sie hier die Hauptdatei der Coffeescript.
Sie können sehen, dass unsere Tic-Tac-Toe-App mit $-> beginnt. Dies entspricht der Kurzform für die Funktion von JQuery, die Code ausführt, wenn das DOM bereit ist: $ (function () {...});.
CoffeeScript beruht nicht auf Semikolonen und Zahnspangen, sondern auf Einrückung. -> teilt Coffeescript mit, dass Sie eine Funktion definieren, damit Sie den Körper der Funktion in der nächsten Zeile starten und den Körper mit zwei Leerzeichen einbeziehen können.
Als nächstes erstellen wir ein Objekt namens TIC, das selbst ein Objekt namens Daten enthält. Sie können sehen, dass Klammern oder Kommas beim Erstellen von Objekten nicht obligatorisch sind, solange Sie die Eigenschaften richtig einlegen.
<span><span><span><div</span> class<span>="wrapper"</span>></span> </span> <span><span><span><header</span> class<span>="text-center"</span>></span> </span> <span><span><span><h1</span>></span>Tic Tac Toe<span><span></h1</span>></span> </span> <span><span><span></header</span>></span> </span> <span><span><span><div</span> id<span>="board"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="alerts welcome"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="notifications"</span>></span><span><span></div</span>></span> </span> <span><span><span><form</span> action<span>=""</span> method<span>="POST"</span>></span> </span> ... <span><span><span></form</span>></span> </span><span><span><span></div</span>></span> </span> <span><span><span><script</span> src<span>="jquery.min.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> src<span>="logic/app.js"</span>></span><span><span></script</span>></span></span>
handelt
Die X- und O -Eigenschaften sind Objekte und enthalten Daten, die sich auf die Anzahl der X oder O von den drei Achsen beziehen, die für das Spiel wichtig sind: horizontal, vertikal und diagonal. Sie werden bei jedem Schritt durch die Checkend -Methode aktualisiert, um die Verteilung von X und O auf der Tafel darzustellen. Die Checkend -Methode ruft Checkwin an, um festzustellen, ob ein Gewinner vorhanden ist.Danach haben wir eine Methode im TIC -Objekt, die alles in Betrieb genommen wird:
<span><span>.square:nth-of-type(<span>3n + 1</span>)</span> { </span> <span>clear: both; </span><span>}</span>
Indem wir den Methoden vernünftige Namen geben, haben wir eine faire Vorstellung davon, was sie tun:
<span><span>.square.x</span> { </span> <span>color: crimson; </span><span>} </span> <span><span>.square.o</span> { </span> <span>color: #3997ff; </span><span>}</span>
$ <span>-> </span> <span>Tic = </span> <span>data: </span> <span>turns: 0 </span> <span>x: {} </span> <span>o: {} </span> <span>gameOver: false</span>
<span>initialize: -> </span> @data<span>.gameOver = false </span> @<span>.setPlayerNames() </span> @<span>.retrieveStats() </span> @<span>.assignRoles() </span> @<span>.prepareBoard() </span> @<span>.updateNotifications() </span> @<span>.addListeners()</span>
Sie können Standardwerte für Parameter ähnlich wie PHP angeben:
<span><span><span><div</span> class<span>="wrapper"</span>></span> </span> <span><span><span><header</span> class<span>="text-center"</span>></span> </span> <span><span><span><h1</span>></span>Tic Tac Toe<span><span></h1</span>></span> </span> <span><span><span></header</span>></span> </span> <span><span><span><div</span> id<span>="board"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="alerts welcome"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="notifications"</span>></span><span><span></div</span>></span> </span> <span><span><span><form</span> action<span>=""</span> method<span>="POST"</span>></span> </span> ... <span><span><span></form</span>></span> </span><span><span><span></div</span>></span> </span> <span><span><span><script</span> src<span>="jquery.min.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> src<span>="logic/app.js"</span>></span><span><span></script</span>></span></span>
Wenn eine Funktion mit einem Standardparameter kompiliert wird, wird sie in:
konvertiert<span><span>.square:nth-of-type(<span>3n + 1</span>)</span> { </span> <span>clear: both; </span><span>}</span>
Wenden wir uns schließlich an die Methode addlisteners:
<span><span>.square.x</span> { </span> <span>color: crimson; </span><span>} </span> <span><span>.square.o</span> { </span> <span>color: #3997ff; </span><span>}</span>
Hier sehen wir, dass CoffeeScript zusätzliche Schlüsselwörter bietet, um Wahrheits- und Falsy -Werte wie Nein, ja, von und weiter darzustellen. Zusätzlich,! ==, ===, &&,! kann verwendet werden, wenn man nicht ist, und und nicht dementsprechend.
Sie können lesbare einzelne Bedingungen mit if ... dann ... sonst ... syntax.
Die Arbeitspferd -Methode Checkend Checks, wenn jedes Mal, wenn ein Spieler einen Sieger macht, einen Gewinner gibt. Dies geschieht, indem es über die Tafel iteriert und die Quadrate zählt, die zu X und O gehören
$ <span>-> </span> <span>Tic = </span> <span>data: </span> <span>turns: 0 </span> <span>x: {} </span> <span>o: {} </span> <span>gameOver: false</span>
<span>initialize: -> </span> @data<span>.gameOver = false </span> @<span>.setPlayerNames() </span> @<span>.retrieveStats() </span> @<span>.assignRoles() </span> @<span>.prepareBoard() </span> @<span>.updateNotifications() </span> @<span>.addListeners()</span>
festlegen
In der horizontalen Überprüfung sehen wir noch einmal, wie entscheidSo sieht Checkfield aus:
Diese Methode zeigt die Verwendung der? Schlüsselwort, das beim Einfügen neben einer Variablen in einer bedingten Kompilierung:
<span>prepareBoard: -> </span> <span>... </span> <span>$("<div>", {class: "square"}).appendTo("#board") for square in [0..8]</span>
<span>updateNotifications: -> </span> <span>$(".notifications").empty().show() </span> @<span>.addNotification "#{@data.player1} is playing #{@data.rolep1}" </span> <span>...</span>
Was die Schachfeldmethode tut, ist eine zu der entsprechenden Achse der X- oder O -Eigenschaft hinzuzufügen, abhängig vom Klassennamen des Klickens des Quadrats. Der Klassenname wird hinzugefügt, wenn ein Benutzer in der Methode addListeners auf ein leeres Board -Quadrat klickt.
Dies bringt uns zur Checkwin -Methode, mit der wir überprüfen, ob einer der Spieler das Spiel gewonnen hat:
<span>addNotification: (msg) -> </span> <span>$(".notifications").append($("<p>", text: msg));</span>
Ein Wort über den lokalen Speicher
Sie können auf verschiedene Weise auf die API zugreifen, zum Beispiel genauso wie Sie es zu den Eigenschaften eines regulären Objekts tun würden:
<span>addNotification: (msg = "I am a message") -></span>
Unsere Addtoscore -Methode verwendet diese Tatsache:
<span><span><span><div</span> class<span>="wrapper"</span>></span> </span> <span><span><span><header</span> class<span>="text-center"</span>></span> </span> <span><span><span><h1</span>></span>Tic Tac Toe<span><span></h1</span>></span> </span> <span><span><span></header</span>></span> </span> <span><span><span><div</span> id<span>="board"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="alerts welcome"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="notifications"</span>></span><span><span></div</span>></span> </span> <span><span><span><form</span> action<span>=""</span> method<span>="POST"</span>></span> </span> ... <span><span><span></form</span>></span> </span><span><span><span></div</span>></span> </span> <span><span><span><script</span> src<span>="jquery.min.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> src<span>="logic/app.js"</span>></span><span><span></script</span>></span></span>
zeigt auch, wie Sie Klammern in Coffeescript (JSON.Stringify) weglassen können, obwohl dies nur für die äußersten Funktionsaufrufe empfohlen wird.
Als nächstes haben wir ein paar Versorgungsmethoden. Wir verwenden LeereStorageVar, um den Inhalt einer bestimmten horizontalen Reihen oder Diagonale zu löschen. Dies ist notwendig, da zwei Diagonale auf der Tafel vorhanden sind und in unserer Tschackmethode dieselbe Dateneigenschaft für beide Diagonalen verwenden. Daher müssen wir die Eigenschaft löschen, bevor wir die zweite Diagonale überprüfen. Gleiches gilt für die horizontalen Reihen.
<span><span>.square:nth-of-type(<span>3n + 1</span>)</span> { </span> <span>clear: both; </span><span>}</span>
Wenn das Formular mit den Namen der Spieler zu Beginn eines Spiels eingereicht wird, können wir die Standardaktion verhindern und die Einreichung mit JavaScript verarbeiten. Wir überprüfen, ob es einen leeren Namen gibt oder ob beide Namen gleich sind, und zeigen eine freundliche Warnung an, wenn ja. Ansonsten starten wir das Spiel, indem wir Tic.initialize ().
nennen.<span><span>.square.x</span> { </span> <span>color: crimson; </span><span>} </span> <span><span>.square.o</span> { </span> <span>color: #3997ff; </span><span>}</span>
Die endgültige Zeile verwendet eine Ereignisdelegation, um ein Element mit dem Klassenspiel zu haben, das auf einen Klick antwortet. Eine Ereignisdelegation ist erforderlich, da dieses Element nur nach Abschluss eines Spiels zu einer Seite hinzugefügt wird. Es ist nicht vorhanden, wenn das DOM zum ersten Mal gerendert wird.
$ <span>-> </span> <span>Tic = </span> <span>data: </span> <span>turns: 0 </span> <span>x: {} </span> <span>o: {} </span> <span>gameOver: false</span>
Und das war's. In weniger als 150 Zeilen von Coffeescript haben wir ein Arbeitsspiel. Vergessen Sie nicht, Sie können den Code aus diesem Tutorial aus GitHub herunterladen.
Siehe den Stift Tic-Tac-Toe von sitepoint (@sinepoint) auf CodePen.
Ich hoffe, dass dieses Tutorial Ihr Wissen über Coffeescript festigte und Ihnen gezeigt hat, wie JQuery und Coffeescript zusammenarbeiten können. Es gibt viele Dinge, die Sie tun können, um das Spiel zu verbessern. Sie können beispielsweise eine Option hinzufügen, um die Platine von ihren Standard -3 × 3 -Abmessungen zu unterscheiden. Sie können eine einfache KI implementieren, damit die Spieler gegen die Maschine spielen können, oder Sie können Bomben im Spiel implementieren, z. Durch Hinzufügen eines zufälligen X oder O bei einem zufälligen Spielzug, während die Spieler um Ruhm kämpfen.
Erstellen eines Spielbretts für TIC TAC Toe in Coffeescript beinhaltet die Definition einer 3 × 3 -Matrix. Dies kann mit einem Array von Arrays erfolgen. Jedes innere Array repräsentiert eine Zeile auf dem Spielbrett, und jedes Element im inneren Array repräsentiert eine Zelle auf dem Spielbrett. Anfangs sind alle Zellen leer. Wenn ein Spieler eine Bewegung macht, wird die entsprechende Zelle in der Matrix mit der Marke des Spielers aktualisiert. Board und überprüfen, ob das Spiel gewonnen wurde. Wenn ein Spieler einen Schritt macht, müssen Sie die entsprechende Zelle im Spielbrett mit der Marke des Spielers aktualisieren. Dann müssen Sie überprüfen, ob der Spieler das Spiel gewonnen hat. Dies kann durch Überprüfen aller möglichen Gewinnkombinationen von Zellen erfolgen.
Kann ich JQuery mit Coffeescript verwenden? Sie können JQuery mit Coffeescript verwenden. CoffeeScript kompiliert in JavaScript, sodass Sie jede JavaScript -Bibliothek damit verwenden können, einschließlich JQuery. Sie können JQuery verwenden, um das DOM zu manipulieren, Ereignisse zu erstellen, Animationen und mehr zu erstellen. Verwendet, um JavaScript zu debuggen. Die meisten modernen Browser sind mit integrierten Entwickler-Tools ausgestattet, die einen JavaScript-Debugger enthalten. Sie können diesen Debugger verwenden, um Ihren Code durchzusetzen, Variablen zu inspizieren und vieles mehr. Beachten Sie, dass Sie den kompilierten JavaScript -Code, nicht den ursprünglichen Coffeescript -Code, debuggen.
Das obige ist der detaillierte Inhalt vonPraktisches Kaffeekript: Ein Tic-Tac-Toe-Spiel machen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!