Multiplayer-TicTacToe-Spiel mit Flutter, Socket und MongoDB | Rahul Agarwal | Skillshare
Suchen

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Multiplayer-TicTacToe-Spiel mit Flutter, Socket und MongoDB

teacher avatar Rahul Agarwal, Flutter Developer & Trainer

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Einführung in den Kurs

      0:49

    • 2.

      Erstelle ein neues Projekt

      8:34

    • 3.

      Arbeite an der Hauptmenü-Benutzeroberfläche

      7:23

    • 4.

      Arbeite an der Reaktionsfähigkeit

      4:12

    • 5.

      Registrieren benannte Routen

      4:45

    • 6.

      Benutzerdefinierte wiederverwendbare Widgets

      7:18

    • 7.

      Erstelle und trete der Spiel-Benutzeroberfläche bei

      10:11

    • 8.

      Einrichten eines Knotenprojekts

      9:08

    • 9.

      Erstelle einen Express-Server

      6:54

    • 10.

      Setup MongoDB Atlas

      8:00

    • 11.

      Installiere Socket-IO-Client

      7:26

    • 12.

      Socket-Methodenklasse

      4:34

    • 13.

      Socket-Server-Verbindung

      5:10

    • 14.

      Erstellen von Raummodell

      12:50

    • 15.

      Arbeite an CreateRoom-Event

      9:02

    • 16.

      Raum-Erfolgs-Event-Listener

      7:09

    • 17.

      Raumanbieter-Kurs

      6:54

    • 18.

      Join Room Listener

      8:56

    • 19.

      Arbeite an der Erfolgsveranstaltung

      10:50

    • 20.

      Spieler-Dart-Modell-Kurs

      7:41

    • 21.

      Spielerstatus im Anbieter

      9:23

    • 22.

      Arbeite an der Wartelobe

      7:04

    • 23.

      Höre dir UpdateRoom-Event an

      6:22

    • 24.

      Arbeite an dem Scoreboard

      7:55

    • 25.

      Erstelle die Board-Benutzeroberfläche

      5:54

    • 26.

      Behalte den Überblick über die Spielwerte

      10:04

    • 27.

      Anzeigen von X und O

      9:28

    • 28.

      Spielen nach den Drehungen

      7:25

    • 29.

      Überprüfe den Gewinner des Spiels

      10:53

    • 30.

      Gewinner in DialogBox anzeigen

      7:32

    • 31.

      Wiedergabe-Funktionalität

      11:02

    • 32.

      Höre dir das Gewinner-Event an

      5:05

    • 33.

      Höre dir EndGame-Event an

      6:45

    • 34.

      Teste die vollständige Anwendung

      4:41

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

3

Teilnehmer:innen

--

Projekt

Über diesen Kurs

Wie wäre es mit etwas Lustigem und Ansprechendem in einer Welt, in der digitale Verbindungen wichtiger sind als je zuvor? Wir stellen dir vor: „Erstelle ein Multiplayer-Tic Tac Toe-Spiel mit Flutter, Socket und MongoDB.

Stell dir den Nervenkitzel vor, deine Freunde, Familie oder sogar Spieler aus der ganzen Welt zu einem Spiel Tic Tac Toe herauszufordern. In diesem Kurs lernst du, wie du das leistungsstarke Framework von Flutter, die nahtlose Echtzeit-Kommunikation von Socket io, die flexible Datenbank von MongoDB und das Provider-Statusmanagement nutzt, um ein immersives Multiplayer-Spielerlebnis zu erstellen.

Egal, ob du Anfänger oder erfahrener Entwickler bist, der deine Fähigkeiten erweitern möchte, diese Anleitung führt dich durch jede Phase des Entwicklungsprozesses. Wir beginnen mit der Konfiguration von Flutter und Node js, um sicherzustellen, dass du eine solide Grundlage hast. Dann tauchen wir ein in Socket io, um Echtzeit-Verbindungen aufzubauen und Spieldaten mühelos zu synchronisieren. Aber das ist nicht alles! Du wirst verstehen, wie du dein eigenes benutzerdefiniertes Backend erstellen kannst, was dir die volle Kontrolle und Flexibilität über die Funktionalität deines Spiels gibt. Du musst dich nicht mehr nur auf Firebase verlassen.

Nach Abschluss dieses Kurses verfügst du über alle Fähigkeiten, die du benötigst, um deine eigenen Multiplayer-Spiele mit benutzerdefinierten Backends zu entwickeln. Du bist mit der Fähigkeit ausgestattet, unvergessliche Erlebnisse zu schaffen und Menschen weltweit zu unterhalten. Also, ohne mehr Zeit zu verschwenden, lass uns gemeinsam dieses aufregende Abenteuer beginnen!

Triff deine:n Kursleiter:in

Teacher Profile Image

Rahul Agarwal

Flutter Developer & Trainer

Kursleiter:in

Hello, I'm Rahul. I am skilled in building cross platform application using Flutter. I am freelance developer as well as conduct workshops to share my knowledge with the community.

Vollständiges Profil ansehen

Level: Intermediate

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Einführung in den Kurs: Sind Sie bereit, Ihrer Kreativität freien Lauf zu lassen und Menschen durch die Kraft der Technologie zusammenzubringen Menschen durch die Kraft der Technologie zusammenzubringen ? Suchen Sie nicht weiter Dieser umfassende Kurs bietet alles, was Sie benötigen, um ein erfahrener Flatter-Entwickler zu werden ein erfahrener Flatter-Entwickler Stellen Sie sich den Nervenkitzel vor, Ihre Freunde und Familie zu einer Partie Detecto herauszufordern Ihre Freunde und Familie zu einer Partie Detecto In diesem Kurs lernen Sie, wie Sie leistungsstarke Framework von Sake Do Ao, die nahtlose Echtzeitkommunikation von Sake Do Ao und die flexible Datenbank von Mongo Davis nutzen nahtlose Echtzeitkommunikation von Sake Do Ao und die Statusverwaltung bereitstellen können, um ein immersives, sicheres Multiplayer-Spielerlebnis zu schaffen Sie werden verstehen, wie Sie Ihr eigenes benutzerdefiniertes Backback erstellen sodass Sie die volle Kontrolle und Flexibilität über Ihre Daten haben Das bedeutet, dass Sie sich nicht mehr ständig auf Fireway verlassen müssen. Egal, ob Sie ein Anfänger oder ein erfahrener Entwickler sind , der Ihre Fähigkeiten erweitern möchte, dieser Kurs ist für Sie konzipiert ohne weitere Zeit zu verschwenden Melden Sie sich jetzt an, ohne weitere Zeit zu verschwenden, und legen wir los 2. Erstelle ein neues Projekt: Hallo. in dem wir lernen, wie man eine multipletische Techno-Anwendung mit Platter, No Js, Mongo DV und Socket D IO erstellt eine multipletische Techno-Anwendung mit Platter, No Js, Mongo DV Willkommen zum allerersten Video des Kurses, in dem wir lernen, wie man eine multipletische Techno-Anwendung mit Platter, No Js, Mongo DV und Socket D IO erstellt. Wenn es um die Entwicklung einer Rail-World-Anwendung oder irgendein seriöses Startup geht , bevorzugen große Unternehmen maßgeschneiderte Backends gegenüber Firebase, weil sie natürlich kostengünstig sind und es kein Problem Herstellerbindung gibt Ihre Fähigkeiten angeht, müssen Sie also wissen, wie Sie Ihr eigenes Backend erstellen können Sie sollten sich nicht nur auf die Feuerbasis verlassen. In diesem Kurs werden Sie natürlich am Ende alles lernen und können daher für alle großen Unternehmen oder Startups arbeiten. Also lass uns anfangen. Jetzt werden wir als Erstes ein neues Flatter-Projekt erstellen Ich gehe davon aus, dass Sie Flutter S DC bereits in Ihrem System installiert haben Flutter S DC bereits in Ihrem System installiert Gehen Sie also einfach in Ihr gewünschtes Verzeichnis. Und dann ein Terminal und schreibe den Befehl flutter, create tack Also gebe ich dem Projekt diesen Namen. Natürlich kannst du ihm alles geben, was du willst. Außerdem möchte ich Ihnen zeigen, welche Flutter-Version ich verwende, da sie offensichtlich alle paar Wochen alle paar Wochen Updates veröffentlichen Ich verwende Flutter 3.10 0.1. Stellen Sie also sicher, dass Sie dies verwenden oder wenn es in Zukunft grundlegende Änderungen gibt, müssen Sie sich daran anpassen Also, das ist das Projekt. Öffnen Sie es jetzt im VS-Code. Öffnen Sie einfach den Ordner. Buchstaben cos und tto. Das Erste, was wir tun können ist, unsere Bewerbung auf organisierte Weise zu strukturieren . Erstellen Sie also im Ordner drei neue Ordner wie Screens, Badges und Utils Ich hoffe natürlich, dass Sie alle Grundlagen der Servierplatte kennen. Ich glaube, das ist es, was Yamal tut Wozu dient die Hauptfunktion? Weil dieser Kurs nichts für Anfänger ist. Sie müssen auch ein grundlegendes Verständnis von Platter und auch haben. Sie dann innerhalb der Bildschirme einen neuen Bildschirm, Erstellen Sie dann innerhalb der Bildschirme einen neuen Bildschirm, den so genannten Hauptmenübildschirm Dies wird der Startbildschirm sein. Wenn der Benutzer unsere Anwendung öffnet, wird ihm dieser Bildschirm angezeigt. Lassen Sie uns dann hier einen Zustand erzeugen, der weniger starr ist. Und. Und nenne es Hauptmenübildschirm. Nur für den Moment, gib ihm ein Gerüst und in der Leiche, gib ihm einen Besuch und schreib Erstellen Sie im Ordner utils eine neue Datei namens Colors do Dart Diese Datei enthält normalerweise alle Farben Ihrer Anwendung Aber in unserer App werden wir nur eine Farbe haben, also importieren Sie einfach zuerst Material. Und schreiben Sie die konstante BG-Farbe als Hintergrundfarbe, entspricht der Farbe von RGB O dann 161334 und geben Sie die Opazität Das ist nur eine Farbe, sonst nichts. Sehen Sie, es ist ein schwarzer Farbton. Wenn Sie möchten, können Sie natürlich die Hintergrundfarbe eines Spiels ändern. nun in der Haupt-Do-Dirt-Datei Entfernen Sie nun in der Haupt-Do-Dirt-Datei zunächst diesen Kommentar. Es sieht nicht gut aus. Dann unter der M-App, das ist diese Homepage, alles aus der Zeile 23 bis zum Ende entfernen. Und dann hier auf der Startseite machen wir unseren Hauptmenübildschirm als Startseite, dann ändern wir diesen Titel in Tack Tack Tack Tack Tack Tack Tack Tick T bis dann das Debug-Banner ist der Fall. Das Thema sollte Theme Theta Dark Do Copywed sein. Ich werde das dunkle Thema mit diesen Eigenschaften verwenden und hier werde ich die SCA-Hintergrundfarbe als BG-Farbe hinzufügen Das heißt, ich möchte, dass die Hintergrundfarbe schwarz ist. Jetzt werde ich einen Android-Simulator verwenden und auch hier werde ich nur die App-Namen ändern. Ich denke, der App-Name ist Ditto. Es sollte kein Problem sein. Wir haben die Hauptquelle der Android-App. Ja, das Gleiche gilt, es ist in Ordnung. Also fang einfach an zu debuggen. Lassen Sie uns Ihre Anwendung ausführen. Dies ist das erste Mal, obwohl es einige Zeit dauern kann. Es hängt auch von Ihrem System ab. Die App läuft also und wir sehen, dass unser Hauptmenübildschirm da ist. Das war's also für dieses Video. Im nächsten Video werden wir am I des Hauptmenüs arbeiten . Danke. 3. Arbeite an der Hauptmenü-Benutzeroberfläche: Hi, willkommen zurück. Also was ich will, ist im Hauptmenü, es sollte zwei Knöpfe geben. Eine, um ein Spiel zu erstellen, bei dem ein Raum erstellt wird , und zweitens, um dem Spielraum beizutreten. Lassen Sie uns also eine separate Schaltfläche für den benutzerdefinierten Widget-Bereich erstellen , damit wir sie an mehreren Stellen verwenden können. einfach im Widgets-Ordner Erstellen Sie einfach im Widgets-Ordner eine neue Datei mit benutzerdefiniertem Button-Pfeil und importieren Sie Material und statusfreies Widget, machen Sie es zu einem statusfreien Widget und schreiben Sie In einer Schaltfläche benötigen wir den Text, in die Schaltfläche geschrieben werden soll, sowie die Funktion, die sie Nehmen wir diese Argumente im Konstruktor. Schreiben Sie final, das ist void cab on tap. Und der letzte String-Text. Nun, dieser ungültige Rückruf bedeutet einfach eine Funktion, aber er gibt nichts zurück denn wenn Sie hier function schreiben, dann ist es auch in Ordnung. Aber da wir wissen, dass wir nichts zurückgeben werden, verwende ich void call back. Stellen Sie jetzt hier die erforderlichen Eigenschaften ein. Das ist das auf Tap, re dieser Punkttext. Jetzt hier, Return und erhöhte Taste. In der Eigenschaft press geben wir die Funktion ONT an. Und im Kind. Wir geben Text als Texteigenschaft an und geben ihm einen gewissen Stil. Größe des Textstils bei 16. Außerdem geben wir der Schaltfläche eine Mindestgröße. zunächst Lassen Sie uns dazu zunächst die Größe der Bildschirmmedienabfrage ermitteln. Der Punkt des Kontextes entspricht der Größe wd. Damit erhalten wir die Größe des Bildschirms. Hier unter der Presse schreibe ich einfach den Stil der erhöhten Taste, ab Mindestgröße wäre die Rasterbreite die Breite und die Höhe, so dass es 50 sein wird Es wird also den kompletten Witz brauchen , den wir später ändern werden Das heißt, wir werden auch ein gewisses Maß an Reaktionsfähigkeit walten lassen. Aber das ist unser benutzerdefinierter Button. Das haben wir, alles ist in Ordnung, glaube ich. Okay. Gehen wir jetzt zu unserem Hauptmenübildschirm. Hier werden wir zwei Schaltflächen erstellen, mit denen Benutzer einen Spielraum erstellen oder einem beitreten können. Also gebe ich diesem Bildschirm zuerst oder ganz oben einen Routennamen. Das ist eine statische Zeichenfolge, der Routenname ist ein Go-Hauptmenü. Wir werden also Namensrouten verwenden. Deshalb schreibe ich die Routen hier , damit sie nicht verwirrend sind, und wir können diesen Routennamen einfach aufrufen , ohne eine Instanz zu erstellen, da es sich um eine statische Variable handelt. Jetzt hier, entferne den mittleren Git und gib eine Spalte an. Ausrichtung der Hauptachse der Spalte, Mitte der Hauptachse, dann Kinder. Als Erstes wird es eine benutzerdefinierte Schaltfläche sein, unsere eigene, die wir erstellt haben. Ein Tab wird vorerst leer sein. Wir werden später daran arbeiten, zuerst werden wir einen erstellen. Sie dann bei den Kindern Geben Sie dann bei den Kindern ein Komma ein und schreiben Sie dann große Werke Stellen Sie sicher, dass die Größe funktioniert, geben Sie eine Höhe von 20 und erstellen Sie dann erneut eine zweite benutzerdefinierte Schaltfläche Sehen Sie, so nützlich ist unsere Schaltfläche , damit wir unseren Code nicht wiederholen müssen. Und hier schreib einfach Join Room. Schauen wir uns die Benutzeroberfläche an. Wir haben die zwei Knöpfe. Geben Sie einfach etwas Polster. Wickeln Sie hier die Spalte mit einem Abstand ein und geben Sie einen Abstand von 20 Pixeln ein Sag, es sieht anständig genug aus. Das war's für dieses Video, wir sehen uns in der nächsten Sitzung. 4. Arbeite an der Reaktionsfähigkeit: Hallo, willkommen zurück. Unsere Anwendung sieht in diesem Android-Emulator gut aus. Aber was ist, wenn ich versuche, es auch in Chrome zu öffnen? Also lass es uns machen. Sie können die Anwendung auf zwei Geräten gleichzeitig ausführen . Das ist also eine gute Sache. Okay. O C. Wenn die App hier im Web- oder Desktop-Modus läuft, können wir sehen, dass die Tasten gestreckt sind und das ganze WLAN beanspruchen, und es sieht nicht gut aus. Also werden wir ein responsives Widget erstellen , das Einschränkungen hinzufügt. Lass uns daran arbeiten. Erstellen Sie innerhalb von ib einen neuen Ordner und nennen Sie ihn Onsive Und dann schreibe ich Responsive Dot Dart hinein. Importieren Sie Material und erstellen Sie einen State-GID-Namen Diese GID akzeptiert ein Kind, was ein GID-Eigenschaftsdatentyp sein wird Hier ist lediglich dieses DO-Kind erforderlich, und hier im Abschreckungszentrum im Feld Child DO-Kind erforderlich, und hier im Abschreckungszentrum im Feld . Hier ist lediglich dieses DO-Kind erforderlich, und hier im Abschreckungszentrum im Feld Child constrained. Hier können wir Einschränkungen angeben. Einschränkungen werden Cont-Box-Einschränkungen sein. Die maximale Breite würde 600 s betragen. Sie sollte nicht größer als dieser Wert sein, wenn es kleiner ist, ist es in Ordnung. Und wird es sein. Okay. Fügen Sie jetzt einfach die Spalte in den Hauptmenübildschirm ein. Diese Spalte umschließt sie einfach mit Responsive wie folgt. Im Kind fügen wir hinzu oder im Kind haben wir diese Spalte Git. Speichern wir es. Lass uns sehen , welcher gerettet wird. Ich bin mir nicht sicher. Ja, S. Also im Android-Emulator sieht es gut aus und auch im Desktop- oder Web-Modus sieht es auch Also kannst du es ändern . Das ist 600. Du kannst tun, was du willst. So fügen Sie Antworten auf sehr einfache Weise hinzu. Im nächsten Video werden wir also mehr Routen erstellen und diese Routen in unserer Hauptpunktdatei registrieren. Danke. 5. Registrieren benannte Routen: Fi. Lassen Sie uns nun Bildschirme für Create Room und Join Rope erstellen. Erstellen Sie im Ordner Screens eine neue Datei und nennen Sie sie Create Room Screen. Außerdem erstellen wir eine neue Datei, die dem Raum beitritt, Bildschirm, Punkt. Importieren Sie im Bildschirm „Raum erstellen“ einfach Material. Erstellen Sie dann einen Status „Voll“. Nennen Sie create ro screen und geben Sie vorerst einfach ein leeres Gerüst zurück, und ähnlich auch hier im Join-Screen Importieren Sie Material und erstellen Sie dann einen Status mit voller ID. Benennen Sie den Verbindungsbildschirm. Gib dann einen leeren Scaffold Gin zurück. Leeres Gerüst. Ebenso wie wir den Routennamen in den Hauptbildschirm schreiben, auf den Bildschirm Mein Veranstaltungsort, ähnlich im Erstellungsbildschirm, setzen wir die statische Zeichenfolge Schrägstrich Dies ist der Name der Route und wir gehen auch hier zum Verbindungsraum statische Routenname mit der Zeichenfolge entspricht dem Verbindungsraum, so wie Wir haben die Routen. Wir müssen sie nur noch in der Hauptdatei registrieren. Gehen Sie hier zur Haupt-DO-Datei. geht's Unten einfach nach Hause, dann gebt ihr eine Karte. Hier ist es ein Schlüsselwertpaar. Der Routenname und dann dieser Routenname zeigen auf den Bildschirm. Einfach Hauptmenübildschirm, Routenname. Es leitet den Hauptmenübildschirm weiter. Ja, es sollte ein Tempo haben. Ähnliches gilt für den Bildschirm „Raum erstellen“, der Routenname. Es ist rot, um den Raumbildschirm zu erstellen. Dann dem Raumbildschirm beitreten. Es wird wie folgt zum ständigen Bildschirm „Raum beitreten“ weitergeleitet. Und wenn wir Namensrouten verwenden, also sollten wir diese Home-Eigenschaft nicht nach der Route verwenden . Schreiben Sie einfach die erste Route und geben Sie ihr den Hauptmenübildschirm, Schreiben Sie einfach die erste Route und geben Sie ihr um die Route wie folgt auszuführen. Und dann starten Sie die Anwendung , weil wir diese Route geändert haben. Aber wenn Sie das wollen, funktioniert alles perfekt wie zuvor. Aber jetzt haben wir Namensrouten in unserer Anwendung. Danke. 6. Benutzerdefinierte wiederverwendbare Widgets: Hallo. Willkommen zurück. Ähnlich wie bei einer benutzerdefinierten Schaltfläche erstellen wir auch ein benutzerdefiniertes Widget für Text. Da wir Text mehrmals anzeigen werden. Gehen Sie also zu Widgets in Widgets und erstellen Sie eine neue Datei mit einem Punktpunkt als Textpunkt. Lassen Sie uns zuerst Material importieren und einen benutzerdefinierten Text erstellen. Hier, das wird ein Text sein. Hier werden wir Text zurückgeben. Die erste Eigenschaft wird sein , was wird die Zeichenfolge sein? Lassen Sie uns das im Konstruktor fragen oder akzeptieren. Endgültiger String-Text. Dann müssen wir sowohl die Schriftgröße als auch die Schriftgröße angeben. Und nur zu Styling-Zwecken werden wir auch Schatten geben. Liste der Schatten. Schatten. Machen Sie jetzt diese Dinge erforderlich. A sind erforderliche Eigenschaften. Ordnen Sie sie dann dem Text zu. Die erste ist die Schnur, dann gibt es etwas Styling-Textil. Die Farbe wird weiß sein. Schriftstärke wird als Schriftstärke mit Punkt fett angezeigt. F-Größe entspricht der Pon-Größe, die im Konstruktor angegeben ist, und dann wird Shadows die Eigenschaft Shadows wie folgt sein Dies ist ein benutzerdefiniertes Widget für Text. Und dann werden wir auch Textdatei wigd mehrmals verwenden Lassen Sie uns auch dafür ein benutzerdefiniertes Widget erstellen. Erstellen Sie in Perücken einfach einen neuen Stapel und nennen Sie ihn benutzerdefinierten Text, Füllung, Punkt, Punkt , Import Material, größter Wert, weniger benutzerdefinierter Text ist fehlgeschlagen Nun, das sind Textfehler. Die Eigenschaften, die wir akzeptieren werden , sind zuerst Controller und dann letzte Zeichenkettenhinweis-Text Das letzte B ist fertig. Ist schreibgeschützt, s schreibgeschützt. Dies ist eine Eigenschaft, bei der der Benutzer das Textfeld nicht bearbeiten kann. Dies wird später verwendet. Aber jetzt lassen Sie uns all diese Dinge im Controller wiedergeben. Der Text muss nur leicht zu lesen sein. Geben Sie jetzt hier eine Textfüllung zurück. Der Controller ist schreibgeschützt . Die Eigenschaft ist schreibgeschützt. Und dieser Schreibschutz ist hier nicht erforderlich, er hat den Standardwert False. Also nur ein Text res. Das macht es für andere Textfüllungen falsch. Und hier Dekoration Eingabe, Dekoration. Die Pillenfarbe sollte die Hintergrundfarbe sein. Das Feld sollte wahr sein. Hinweistext sollte Hinweistext im Konstruktor sein. Dieser. Nun, das ist in Ordnung, aber ich möchte ein paar Schatteneffekte hinzufügen. Wickeln Sie das einfach mit einem Behälter ein, dann geben Sie hier etwas Dekoration, konstante Schachteldekoration, dann geben Sie hier ein paar Schachtelschatten. Die Schattenfarbe der rechten Box blau, der Blutradius S fünf, Spreizradius S zwei. Diese Dekoration erzeugt nur einen Schatteneffekt hinter oder um das Textfeld herum. Das ist es. Das waren die beiden benutzerdefinierten Widgets, die ich schreiben wollte. Im nächsten Video werden wir an der Benutzeroberfläche arbeiten, werden wir an der Benutzeroberfläche arbeiten Spielraum zu erstellen und Spielraum beizutreten. Danke. 7. Erstelle und trete der Spiel-Benutzeroberfläche bei: Hallo, willkommen zurück. Lassen Sie uns jetzt an der Benutzeroberfläche des Bildschirms „Raum erstellen“ arbeiten. Wir werden ein Text-Widget haben, dann ein Textfeld und dann eine Schaltfläche Also lasst uns anfangen, daran zu arbeiten. Hier im Gerüst. Im Körper werde ich es von Anfang an mit der responsiven Perücke umwickeln, weil ich möchte, dass es Einschränkungen in der Breite gibt Dann mache ich eine einzelne untergeordnete Scroll-Ansicht und dann wird Tile zum Container. Innerhalb des Containers wird ein Spielraum als Kosten in sts Punkt symmetrisch horizontal S 20 angegeben, dann wird das Kind des Containers eine Spalte sein, von der Hauptachsenausrichtung ihr Hauptachsenausrichtung Punktmitte, Querachsenausrichtung, Kreuzachsenausrichtung Punktmitte geben Querachsenausrichtung, Kreuzachsenausrichtung , dann die Kinder Das erste Element in den Kindern, das ich geben werde, ist ein benutzerdefinierter Text Hier wird Text erzeugt, die Raumgröße wird 70 sein. Zeigt an, dass ich mit nur einer Schatteneigenschaft mit einem Unschärferadius von 40 als Farben das Blau aufgeführt nur einer Schatteneigenschaft mit Unschärferadius von 40 als Farben das Blau So wie das. Speichern Sie es einfach jetzt, ich möchte sagen, weil ich zu diesem Bildschirm gehen möchte. Wenn ich also zur Schaltfläche „Erstellen“ gehe, dann gehen wir hier hin. Nein. Und dann in der benutzerdefinierten Schaltfläche hier. Sagen wir Navigator, Punkt des Kontextes, drücken Sie den Namen. Ich werde einen Raumplan erstellen Wenn ich zu C gehe, habe ich den Text, der den leuchtenden Effekt hat und der sieht sehr gut Gehen Sie jetzt wieder zum Text. Entschuldigung, zum Erstellungsbildschirm. Lassen Sie uns diesen Text schreiben. Wir verlangen, dass die benutzerdefinierte Textfüllung zuerst ein bestimmtes Größenfeld angibt, Höhe entspricht der Höhe und wir benötigen auch die Größeneigenschaft. Der Name des Controllers für die Textbearbeitung oben entspricht dem Namen des Controllers für die Textbearbeitung. Dann entsorgen Sie diesen Controller, um ihn zu entsorgen. Dann habe ich im Build eine Größeneigenschaft dieser Medienabfrage ähnelt, Punkt der Kontext-Punktgröße Und dann geben Sie dieses Größenfeld als Höhe Größe Höhe multiplizieren mit 0,08 Dann möchte ich ein benutzerdefiniertes Textfeld. Der Controller wird der Name Controller sein. H im Text wird der Spielername eingegeben. Unter diesem benutzerdefinierten Text wird erneut ein Größenfeld angezeigt. Das ist ein gewisser Abstand. Acht. Diesmal wird Größe und Höhe mit 0,05 multipliziert Und unter acht geben Sie ihm eine benutzerdefinierte Schaltfläche. Tippen Sie darauf und erstellen Sie Text. Speichere es und lass uns auschecken und sehen, unser Erstellungsraum sieht anständig aus. Wir haben auch die richtigen Schatten rund um das Textfeld. ähnliche Weise Lassen Sie uns auf ähnliche Weise auch die Benutzeroberfläche für Join Room erstellen. Kopieren Sie einfach alles aus Create Room und fügen Sie es ein. Ich möchte warten. Lass uns hierher gehen. Zuallererst werde ich die Build-Methode kopieren. B sowie Textbearbeitungs-Controller. Ich werde einfach alles hier einfügen. Dann sind alle fehlenden Bibliotheken okay. Jetzt muss der Spieler im Join-Raum seinen Namen sowie die Raum-ID eingeben. Also hier werde ich den endgültigen Textbearbeitungscontroller hinzufügen, Game ID-Controller entspricht dem Textbearbeitungscontroller. Dann entsorge das auch. Dann hier wird der benutzerdefinierte Text hier der benutzerdefinierte Text für den Raum sein , dieser wird derselbe Interplayer-Name sein, aber unter diesem benutzerdefinierten Feld, gib ein Feld mit einer Größe von 20 an, mach die Kosten darunter, erstelle wieder einen benutzerdefinierten Text, weil wir zwei Texte benötigen, Controller ist Game ID-Controller Der H-Text wird die Spiel-ID sein. Dann ändere es einfach in der Schaltfläche, um Mitglied zu werden. Wenn ich jetzt zum Hauptmenübildschirm gehe und dann auf dem Bildschirm „Beitreten“ hier auf dem Bildschirm „Beitreten“ tippe , schreibe ich den Routennamen. Okay. Wenn ich zurückgehe und auf Join Screen C klicke, haben wir den Join-Raum. Es fragt nach dem Spielernamen sowie der Spiel-ID. Also ist sowohl die Benutzeroberfläche fertig. Im nächsten Video werden wir auf der No GS-Serverseite arbeiten . Danke. 8. Einrichten eines Knotenprojekts: Hallo, willkommen zurück. Jetzt ist es an der Zeit, dass wir an unserem Backend arbeiten , damit die Raumdaten in der Datenbank gespeichert werden können, denn das werden wir natürlich tun, wenn wir einen Raum erstellen, müssen wir diese Daten richtig speichern. dazu zunächst zur Gehen Sie dazu zunächst zur Zange RG und laden Sie die empfohlene Version herunter Also ich habe es bereits heruntergeladen, also werde ich dir die Website hier zeigen Klicken Sie einfach entsprechend Ihrem Betriebssystem hier und laden Sie die von No GS empfohlene Version herunter. Und NPM wird automatisch ohne GAS installiert. Sie müssen es also nicht separat installieren. Und auch nur um zu überprüfen , ob kein JS erfolgreich installiert wurde oder nicht. Einfach den Terminalknoten V. C eintippen, ich habe die Version 18.15 0.0 Also ich verwende diese Version. Also ist kein GS installiert, dann lassen Sie uns ein No-GS-Projekt erstellen. Jetzt zeige ich Ihnen einfach, dass Sie im Stammverzeichnis, also im Ti Teco-Verzeichnis, einen Ordner-Namenserver erstellen Und natürlich können Sie einen beliebigen Standort wählen, aber ich erstelle den Server nur in unserer Plattenanwendung Denken Sie daran, dieser Server befindet sich außerhalb der Bibliothek. jetzt im Terminal Ändern Sie jetzt im Terminal einfach Ihren Standort in den Ordner auf den CD-Server und initialisieren Sie NPM, indem Sie NPM it y eingeben. Dadurch wird eine Paket-JS-Datei initialisiert, das ist ein das ist Jetzt benötigen wir einen Einstiegspunkt für unseren neuen GS-Server. Genau wie in Flutter ist es die wichtigste Punktdatei also im Serverordner Erstellen Sie also im Serverordner eine neue JavaScript-Datei namens Index do GS Und auch in der Paket-JCN-Datei. Sie können sehen, dass die Haupteintragsdatei standardmäßig Index do JS ist Sie können diesen Namen auch ändern. Nehmen wir an, das ist Server-DGS, dann machen Sie diesen Dateiserver auch zu JS Aber das ist nicht wichtig. Außerdem werden alle externen Pakete , die wir installieren werden in dieser Paket-JS-Datei angezeigt. Wenn wir über Pakete sprechen, installieren wir unser erstes Paket. Ich werde das Express-Paket verwenden. Express GS ist ein Framework , das auf keinem GS-Webserver aufbaut, um seine APIs zu vereinfachen und hilfreiche neue Funktionen hinzuzufügen. Es macht es einfacher, Anwendungsfunktionen mit Middleware und Routing zu organisieren Anwendungsfunktionen mit Middleware und also im Terminal im Geben Sie also im Terminal im Serverordner NPM Mit diesem Befehl können Sie alle externen Pakete installieren und sie im Paket oder in der JCN-Datei sehen Hier sind die Express-Abhängigkeit und alle Module, die sich auf die Express-Pakete beziehen, in den Nod-Modulen geschrieben und alle Module, die sich auf die Express-Pakete beziehen, in den Nod-Modulen geschrieben Das nächste Paket, das wir installieren werden, heißt Node Moon. Wenn wir also den Node-Server jetzt starten, wir, wann immer wir Änderungen am Code vornehmen, müssen wir, wann immer wir Änderungen am Code vornehmen, den Server stoppen und immer wieder neu starten, um das Update zu sehen. Das ist keine gute Entwicklungserfahrung. Um dieses Problem zu lösen, werden wir ein Paket verwenden, das als Node Moon bekannt ist. Von Anfang an ermöglicht es die Live-Aktualisierung des Servers , also wenn wir Änderungen vornehmen, und es wird der Server selbst neu gestartet und die Änderungen werden übernommen. Schreiben Sie im Terminal einfach NPM install G node one und drücken Sie die Eingabetaste Also hier installiere ich das mit der G that is G-Syntax, sodass es in Ihrem System installiert ist, nicht nur im Projekt, und Sie müssen es nicht immer wieder installieren Drücken Sie also die Eingabetaste und ich habe es bereits global installiert, also installiere ich es nicht erneut. Nachdem wir dieses Paket hinzugefügt haben, müssen wir ein Skript in die Paket-JN-Datei in dieser Datei schreiben . Hier haben wir das Skript. Ich brauche das Testskript nicht. Ich werde ein Skript namens Start schreiben, das den Codeknotenindex S ausführt, und für Dv wird es Nd ein Index sein Wenn wir also NPM run D eingeben, wird dieser Code ausgeführt und unser Server wird mit dem Numon-Paket ausgeführt Und wenn Sie diesen Server in der C- oder Railway-App bereitstellen , die sich auf dem Live-Server befindet, wird standardmäßig diese T-Methode aufgerufen Also da wird dieses Entwicklungs-Nudmon nicht funktionieren. Das nächste Paket, das wir installieren wollen, ist Bongos Wir werden die Mongo DVs-Datenbank verwenden , um unsere N JS-Anwendung zu verbinden Zu diesem Zweck werden wir also Bongos werden wir also Bongos Es wird bei der Erstellung von Datenmodellen und deren Speicherung in der Datenbank helfen und auch CRD-Methoden bereitstellen, die sehr einfach zu verwenden sind Also einfach wieder im Terminal, Code bewerten, NPM, Mong Gos MON GOOSE installieren Also das ist auch installiert. Hier haben wir Express, hier haben wir Mongo Das letzte Paket, das jetzt installiert werden muss, ist Socket IO. Wir werden das Socket IO-Paket verwenden , um eine Echtzeitverbindung herzustellen, was einfach bedeutet, dass das Frontend weiterhin alle Änderungen in der Datenbank abhört und diese widerspiegelt, ohne die App neu zu starten Einfach ausgedrückt, du kannst dir die Socheat-IO als Streams ansehen die Socheat-IO als , wenn du aus Feuerwachen kommst. Ve. Im Terminal NPM installieren Sie Socket IO. Dies ist der NPM-Paketname des Pakets. Das ist es Wir haben die drei Pakete installiert Express Mongo und Socket Dot IO Im nächsten Video werden wir mit der Arbeit an der API beginnen und sie auch mit der Mongo-DB-Datenbank weiterentwickeln . 9. Erstelle einen Express-Server: Hallo. Jetzt müssen wir als Erstes einen Server erstellen. Dafür müssen wir unserem Projekt mitteilen , dass wir Express verwenden werden. Gehen Sie also zu Index oder JS-Datei und importieren Sie alle erforderlichen Pakete. Zuallererst werde ich Constant Express to Require schreiben. So importieren wir Pakete in Java-Skript. Dann ist so gleich, IO zu benötigen, dann HTTP al, um das HTTP-Paket zu benötigen. Dies ist standardmäßig im No JS-Projekt. Wir müssen keine weitere Abhängigkeit für HTTP hinzufügen. Dann müssen wir das Express-Paket initialisieren und fügen einfach die Cost-App hinzu, die Express entspricht und das Das ist der Punkt, an dem wir es initialisieren. Dann Server erstellen und so ich. Ich werde schreiben Server nach STP Server erstellen soll Und die Express-App weitergeben. Und dann schreibe R IO in den Socket, und wir werden den Server an diesen Socket übergeben. Wann immer Sie Socket IO verwenden, erstellen Sie auf diese Weise einen Server. Aber wenn Sie Socket That Io nicht verwenden, müssen Sie diese beiden Zeilen nicht schreiben. Direkt können wir die App machen, um zuzuhören und so. Dann ist der nächste Code, den ich will, eine Middleware. Und ich hoffe, du weißt, was Middleware ist . Es ist einfach richtig Es manipuliert und manipuliert Daten vom Client zum Server kommen Unabhängig davon, welche Daten vom Client zum Server kommen, können Sie den Mittleren Weg verwenden, um zuerst diesen Mittleren Krieg zu durchlaufen und dann unseren Server zu erreichen Also was ich will ist, dass ich App Dot benutze Express Dot JS. Was macht es? Es konvertiert alle eingehenden Daten in das Jasen-Formular Das ist also eine Pflichtfüllung. Sie können auch ein Paket namens Body Parser verwenden . Es liegt an dir Aber offensichtlich ist dieser Express-Hund ein Prozess. Als Nächstes benötigen wir einen Port , um unseren Server zu starten. Sie können hier direkt 3.000 schreiben. Wenn Sie jedoch planen, diesen Server bereitzustellen, schreiben Sie einfach process env, und wenn der Wert Null ist, verwenden Sie 3.000 Das heißt, wenn Sie diesen Server auf Hiroku oder einem anderen Live-Server bereitstellen , wird dieser Code ausgeführt, weil die No-JS-Bereitstellung so funktioniert, und in der Entwicklungsphase werden diese 3.000 bis 3.000 der Wert des Ports sein Schreiben Sie jetzt einfach Server Listen. Wir werden auf den Port hören , der diese Portvariable ist. Dann ist die nächste die IP-Adresse. Wir werden 0,0 0,0 schreiben, das sind vier Nullen Und das bedeutet, dass jeder auf die App zugreifen kann und nicht nur meine eigene IP-Adresse Und dann schreibe in der Callback-Funktion einfach das Punktprotokoll für die Konsole. Dann verwende ich Bat, das ist die Taste auf Ihrer Tastatur über dem Tab Button, den Mantel findest du hier. Wir können einfach sowohl Zeichenketten als auch Variablen verketten. Ich werde einen Pot hinzufügen, dann werde ich diese Port-Variable Und speichere es. Nein. Tut mir leid, das ist nicht Ja. Speichern Sie es. Um den Server im Terminal laufen zu lassen, löschen Sie ihn. Und jetzt hier rechts NPM, führe das Innere des Serverordners aus. Und sieh dir an, dass der Knoten Moon neu gestartet wurde und S auf P 3.000 läuft Und jetzt, nehmen wir an, wenn ich irgendwelche Änderungen vornehme und sie speichere, wird der Server automatisch neu gestartet Das ist also die Macht von Nodemon. Das war's also für dieses Video. Wir sehen uns in der nächsten Sitzung. Danke. 10. Setup MongoDB Atlas: Hallo, willkommen zurück. In diesem Video werden wir also an unserer Mongo DB-Datenbank arbeiten Zuallererst werde ich unseren Server einfach mit Control C beenden . Öffnen Sie dann Ihren Browser und gehen Sie zu Ihren Browser und gehen Sie Mo DV Slash Wir werden eine Cloud-Datenbank verwenden, die Atlas heißt Dann melden Sie sich hier einfach an oder registrieren Sie sich Ich habe bereits ein Konto und werde mich direkt anmelden, aber natürlich müssen Sie sich für ein neues Konto anmelden. Wenn Sie Wenn Sie ein neues Konto erstellen, werden Sie aufgefordert, Ihrer Organisation einen Namen zu geben und dort die Option Wong DB Atlas auszuwählen Also er, ich habe den Namen meiner Organisation als Raja G angegeben . Das ist alles. Und danach wirst du zu diesem Tag geschickt. Sie können das Video pausieren, wenn Sie möchten. nach einer Organisation hier Klicken Sie nach einer Organisation hier auf ein neues Projekt. Geben Sie dann einen Projektnamen ein. Ich nenne es Tack to und klicke auf Weiter. Dann klicken Sie einfach auf Projekt erstellen. Dann müssen wir hier eine Datenbank erstellen, auf diese Schaltfläche klicken, eine Datenbank erstellen. Dann verwende hier eine Vorlage, wähle aus. O das ist freie Null. Wählen Sie A S. Wählen Sie die Region, die U am nächsten ist. Ich werde den Clusternamen nicht ändern. Wenn Sie möchten, können Sie ihn ändern. Es liegt an dir. Ich belasse es einfach bei Cluster Null und klicke dann auf Erstellen. nach dem hier sicher, dass Sie einen neuen Benutzernamen und ein neues Passwort für Ihre Datenbank erstellen . Diese Anmeldeinformationen werden später benötigt. Also schreibe ich einfach den Benutzernamen und hier ist das Passwort eins, zwei, drei, f. Das war's. Und klicke auf Benutzer erstellen. Wählen Sie hier die lokale Umgebung. in der IP-Adresse Geben Sie in der IP-Adresse die IP-Adressen 0,0 0,0 ein, dann wieder Null, dann Null. Diese IP-Adresse bedeutet natürlich, dass jeder auf diesen Server zugreifen kann, denn wenn wir eine Anwendung erstellen, möchten wir natürlich wenn wir eine Anwendung erstellen, , dass andere Benutzer sie verwenden. Wenn wir es also nur auf meine eigene IP beschränken, kann nur ich meine Spielanwendung verwenden. Einfach anklicken, fertig stellen und schließen, dann auf klicken, zur Datenbank gehen. Sie können sehen, dass unser Cluster bereit ist. Im nächsten Schritt benötigen wir eine Verbindungszeichenfolge, um unsere App zu verbinden. Das heißt, die Brief-App mit dieser Datenbank zu verbinden. Klicken Sie einfach auf die Schaltfläche Verbinden in der Nähe des Clusters. Wählen Sie dann den Bongo VS-Code und die Verbindungszeichenfolge. Okay. Okay. Das ist es. Gehen Sie zu Ihrem VS-Code-Editor und lassen Sie uns nun eine Verbindung zwischen unserer Flutter-App und Mongo Entschuldigung, nicht die Flutter-App, ich werde sagen, die neue GS und diese Also unter diesem App-Punkt. Zuallererst müssen wir das Mongo-Paket benötigen. Mongos mögen das. Dann lassen Sie uns hier die Verbindungszeichenfolge einfügen Der Benutzername ist korrekt. Aber hier müssen wir auch das Passwort schreiben, wie hier Ra eins, zwei, drei, vier. Und ganz am Ende werde ich den Datenbanknamen entsprechend schreiben. Das heißt, der Cluster ist anders, aber innerhalb eines Clusters wird die Datenbank intakt sein. Danach schreibe einfach mongoose dot connect. Wir müssen diese Datenbank übergeben und nachdem sie verbunden ist, erhalten wir einen Anruf und hier schreiben wir einfach Mongo DB DB-Verbindung war erfolgreich und wir werden auch einen Wenn es einen Fehler gibt, werde ich den Fehler in der Konsole protokollieren Das ist es. Speichern Sie es. Wenn ich jetzt zum Terminal gehe und mit der rechten Maustaste NPM Dev starte Dann habe ich den Server laufen lassen und die Mongo Divi-Verbindung Unser NJ-Server ist also erfolgreich mit der Mongo DV-Datenbank verbunden . Danke. 11. Installiere Socket-IO-Client: Hallo. Jetzt ist es an der Zeit, dass wir an der Konfiguration von Socket IO arbeiten. Wir werden das Paket Socket IO Client in Flutter verwenden , um eine Verbindung mit Sockets auf dem Server Das wird also auf der Client-Seite funktionieren. Also hier werde ich zuerst den Server stoppen, dann das Verzeichnis in das Hauptverzeichnis ändern und Flutter Pub einen Socket-IO-Client schreiben Flutter Pub einen Socket-IO-Client Wir haben die Abhängigkeit. Wenn Sie zur Prospect Dot YML-Datei C wechseln, haben wir die Flatter-Abhängigkeit des Socket-IO-Clients Dann müssen wir auf Client-Seite an der Socket-Funktionalität arbeiten Das ist das Flatter-Projekt, gehe zum Ordner, erstelle einen neuen Ordner namens resources Und erstellen Sie darin einen Punktpunkt für den Datei-Socket-Client. Importieren Sie zunächst den Paket-Socket-Client, und wir werden ihn als IO importieren. Dann werden wir eine Klasse erstellen, die eine Instanz des Socket-IO-Clients zurückgibt. Es wird Singleton sein. Es wird also nur eine Instanz erstellt. Hier Klasse Socket-Client. Dann der IO-Socket-Datentyp und der Name Socket, dann die ästhetische Variable, was die Socket-Client-Instanz ist, und das ist privat Das ist privat, Sie werden verstehen, dann machen Sie den Konstruktor mit dieser internen Komponente als privat konstruiert . Jetzt initialisieren Sie hier einfach den Socket, welcher Socket IO IO Wir müssen die IP-Adresse des Servers übergeben. Jetzt können Sie hier nicht einfach den lokalen Host 3.000 schreiben. Denn wann immer wir einen Emulator oder Ihr echtes Gerät verwenden , kennt es dieses System nicht Das ist das MACOS. Sie müssen also die IP-Adresse Ihres Systems angeben. Also in Windows war es wohl IP-Konfiguration oder so ähnlich. Sie können es einfach selbst suchen. Gehen Sie in macOS einfach zu den Systemeinstellungen, dann zu Netzwerk, sorry, Netzwerk-WLAN, dann, mit welchem WLAN Sie verbunden sind, klicken Sie einfach auf Netzwerkeinstellungen. Und hier bekommst du deine IP-Adresse, kopiere sie einfach und füge die IP-Adresse ein. Schreiben Sie am Ende 3.000 ss. Das ist der Hafen. also später Wenn Sie also später Ihren Server bereitstellen möchten, müssen Sie den Serverlink in dieser IO hinzufügen. Und wir müssen diesem IO-Client einige Dinge geben. Einfach genau hier. Transport als Trap wie Socket in einem Array und dieser Socket. Vergewissern Sie sich, dass die Schreibweise stimmt. Und das werden Transporte sein. Und dann wird Auto Connect falsch sein. Und dann einfach die richtige Buchse. Das ist nicht Null und verbinde den Socket. Erstellen Sie dann eine Getter-Instanz , die einen Getter für diese Instanzvariable erstellt , sodass immer dann, wenn jemand versucht , eine Instanz dieses Socket-Clients zu erstellen, er immer diese eine bestimmte Instanz erhält Einfach Socket Get Instance Wenn die Instanz Null ist, dann schreibe Socket Internal, initialisiere sie und kehre dann zur Instanz zurück Ich weiß also, dass dieser Code etwas knifflig sein kann. Bevor Sie weitermachen, können Sie, wenn Sie möchten, nach Möglichkeiten suchen, wie Sie eine einzelne Stadt in Flatter erstellen alles verstehen Mit dieser Art der Google-Suche werden Sie innerhalb von fünf bis zehn Minuten Aber verstehen Sie einfach , dass dieser Code einfach eine Instanz erstellt und sie zurückgibt, wenn Sie danach gefragt werden, und nur eine Instanz gesendet wird. Das war's für dieses Video. Im nächsten Video werden wir daran arbeiten, Methoden für die Sockets zu erstellen. Danke. 12. Socket-Methodenklasse: Hallo, willkommen zurück. Jetzt haben wir das Socket- oder Client-Paket. Außerdem benötigen wir Funktionen, um mit dem Socket zu interagieren. Lassen Sie uns dafür eine separate Klasse für alle Methoden erstellen , die sich auf der Client-Seite auf Socket beziehen . hier im Ressourcenordner eine Datei, Erstellen Sie hier im Ressourcenordner eine Datei, die Socket-Methoden tun. Zunächst müssen wir importieren. Wir müssen den Socket-Client importieren. Das ist die eine Woche, die gerade im letzten Video erstellt wurde. Und dann schreibe Klassen-Socket-Methoden. Erstellen Sie dann eine Instanz des Socket-Clients. Der Socket-Client entspricht der Socket-Client-Instanz. Siehst du, wir initialisieren nicht so und so. Wir rufen einfach den Instance-Getter auf. Das ist eine private Variable. Schreiben wir den Socket , der vom Socket-IO-Client kommt. Und ich werde nur in dieser Datei einen Getter für den Socket-Client erstellen nur in dieser Datei einen Getter für den Socket-Client Socket-Client. Und das sollte ein Instanz-Socket wie dieser sein. So gelangen Sie in die Instanz des Socket-Clients. Dann erstellen wir unsere erste Methode zum Speichern neuer Raumdaten. D Erstelle den Raum Ting, wir werden nach dem Spielernamen fragen. Wenn der Spielername dann nicht leer ist , Sie einfach ein Ereignis , damit der Server es sich anhören kann. Ich schreibe einen zweiten Client, der einen Namen ausgibt , der Eventname wird erstellt oder dann übergeben wir den Datenspielernamen als Spielernamenvariable. Aber so arbeiten wir mit Sockets. Wann immer Sie möchten, dass ein Server eine Aktion ausführt, gebe ich ein Ereignis aus und übergebe Daten. Dann werden diese Daten an den Server übergeben, und dann kann der Server diese Daten verwenden und in der Datenbank speichern . In den meisten kommenden Videos werden wir also nur daran arbeiten, werden wir also nur daran arbeiten zuerst entweder vom Server oder vom Client aus zu senden. diesem Fall senden wir ein Ereignis vom Client aus, und der Server hört es sich an. Und wenn wir ein Ereignis vom Server ausgeben, hört der Client es sich an. Das wird die ganze Logik hinter diesem Takto sein. Sie müssen sich mit diesen Terminologien vertraut machen. Das ist es. Das war ein sehr kurzes Video. Im nächsten Video werden wir auch auf der Serverseite am Socket IO arbeiten . Danke. 13. Socket-Server-Verbindung: Hallo. Jetzt müssen wir auch den Node-Server konfigurieren, um diese Socket-Verbindung herzustellen und Ereignisse abzuhören. Gehen Sie also zur Indexpunkt-JS-Datei im Serverordner. Hier. Wir haben die Ovariable, das ist eine Buchse Schreiben Sie einfach io dot auf die Verbindung. Das heißt, wenn die Verbindung erfolgreich ist, holen wir uns einen Socket und schreiben dann als erstes den Konsolen-Dot-Log-Socket, der schreiben dann als erstes den Konsolen-Dot-Log-Socket verbunden ist. Und dann, wie ich in der Socket-Methode des Clients gesagt habe, geben wir diesen Create Room aus. Also hören wir uns das Ereignis an und wir könnten es einfach machen, aber socket on create room, das ist der Name des Ereignisses. Wenn das ausgegeben wird, erhalten wir hier die Daten, also den Spielernamen , da ich diesen Spielernamenschlüssel gesendet habe. Ich destrukturiere es hier so und schreibe einfach den Spielername für das Konsolenprotokoll Also nur zu Testzwecken machen wir es. Gehen Sie hier auch zum Bildschirm „ Raum erstellen“. Lassen Sie uns die Socket-Methode binden, um einen Raum zu erstellen. Erstellen Sie ganz oben eine Instanz von Socket-Methoden. Socket-Methoden. Socket-Methoden stehen für Socket-Methoden wie diese. Dann schreibe in den benutzerdefinierten Button von Create Room hier einfach die Socket-Methoden create und der Spielername lautet Roller. Das ist es. Das war das Einzige, was wir tun mussten. und führen Sie dort NPM aus, Gehen Sie nun zunächst im Terminal zum Serverordner um unseren Node-Server zu starten Außerdem müssen Sie Ihre Anwendung auf Ihrem Gerät ausführen Ihre Anwendung auf Ihrem Gerät , damit Sie die Verbindung zwischen dem Frontend und dem Backend überprüfen können Verbindung zwischen dem Frontend und dem Backend Es lässt es hier eine Verbindung herstellen. Also werde ich einfach nach Schema schreiben und nicht mit Alpha beginnen. Was? Okay. Ich erinnere mich. Du musst HTTP hinzufügen. Hier im Socket-Client müssen Sie HTTP hinzufügen, müssen Sie HTTP hinzufügen da es sich offensichtlich um eine Serververbindung handelt. So schreiben wir google.com einfach so. Klicken Sie einfach erneut auf D. Okay. Wenn ich jetzt auf Create through, S klicke, ist der Socket Connected da. Und wenn ich als Spielernamen schreibe und auf Erstellen klicke. Sehen Sie, dass diese Daten erfolgreich an den Server gesendet wurden, und wir können sie im Terminal sehen , so wie wir es gemacht haben, Consol Dot Log Das heißt, wir haben erfolgreich eine Socket-Verbindung zwischen dem Frontend und dem Backend hergestellt zwischen dem Frontend und dem Backend Das war's also dafür. In den kommenden Videos werden wir anhand der Modellierung Raumdaten und Schemata und viele andere Dinge erstellen Raumdaten und Schemata . 14. Erstellen von Raummodell: I. Also unsere Steckdose funktioniert. Und als Nächstes müssen wir, wann immer wir einen Raum erstellen, die Daten in Mongo DV speichern Wir werden die Daten in einer Sammlung mit dem Namen „Räume“ speichern. Um also Daten für die Sammlung von Räumen zu modellieren, erstellen Sie einen neuen Ordner auf dem Server, der sich hier befindet, erstellen Sie einen neuen Ordner namens Models. Und erstellen Sie darin eine Datei Room Dot JS. Wir werden Mongoose für die Datenmodellierung verwenden. An oberster Stelle benötigen wir also Mongoose, dann müssen wir ein Schema für das Raummodell erstellen Schema bedeutet, welche Pillen da sein werden und welche Datentypen oder Eigenschaften Schreiben Sie also ein Raumschema. Das ist ein Variablenname, dann ein neues Mongo-Punktschema wie dieses Darin befand sich ein Javascript-Objekt. Und jetzt geben wir uns die Fehler, die ein Raum haben wird. Zuallererst wird ein Zimmer belegt sein. Belegungsart wird nummeriert, in diesem Feld kann nur eine Zahl gespeichert werden und die Standardbelegung ist zwei, da nur zwei Spieler in einem Raum spielen dürfen. Das ist ein Unentschieden, das Spiel erlaubt nur zwei Spieler. Diese Belegung bedeutet also , wie viele Spieler in einem Spielzimmer sein können. Okay. Dann haben wir Max. Runden. Auch hier gilt: Typ ist Zahl, Typ ist Zahl, und die Standardeinstellung ist Drei. So lange wird das Spiel laufen , danach erreichen wir die Top Acht. Denken Sie also daran, nehmen wir an, wir spielen eine Partie Ditto Die erste Runde gewinne ich, dann kriege ich einen Punkt Dann wieder, wenn ich erneut mit demselben Spieler auf Spielen klicke . Auch in der nächsten Runde erhalte ich zwei Punkte, wenn ich gewinne. In einfachen Worten, wer auf der Strecke drei Punkte bekommt, wird es die letzte Runde sein Es wird also Best of Three sein. Das ist es. Kein Best of Three. Du musst drei Punkte bekommen. Eine Runde dann. aktuellen Runde müssen wir natürlich wissen, müssen wir natürlich wissen welche Runde die Benutzer spielen, was erforderlich ist über die Typnummer, die voreingestellt ist. In dieser Runde sind wir jetzt im Spiel. Dann als Nächstes. Als Nächstes werden wir auch Spielerinformationen haben. Offensichtlich, wer sind die beiden Spieler, die pingen? Es wird ein Array sein. Und jetzt Mmm. Wir müssen Spielerdaten als ausgefülltes Innenraummodell speichern Spielerdaten als ausgefülltes Innenraummodell Entweder können Sie hier direkt Spielereigenschaften im Raumschema definieren . Ich nehme an, Spieler, dann wird es eine Liste sein. Und dann wird es wieder ein Spielername wie dieser, dieser, dieser sein. Entweder du kannst das Schema hier erstellen, aber ich bevorzuge einen saubereren Ansatz , bei dem eine separate Datei für den Spieler erstellt wird. Denken Sie daran, dass dies kein Modell sein wird, sondern nur ein Schema. Im Player des Modells. Andererseits benötigen die Mongos ve Oh, tut mir leid Es sollte nicht Punkt Punkt sein. Es ist also eine Angewohnheit von mir als Plotentwickler. Mos. Dann lass uns die Spieler ähnlich wie Mos haben und da drin brauche ich zuallererst den Spielernamen. Es wird vom Typ string und trim auf true gesetzt, das ist kein zusätzliches Leerzeichen in den Buchstaben. Angenommen, er kann nicht Leerzeichen und Leerzeichen schreiben. Es wird auf nur ah gekürzt. Dann die Socket-ID des Spielers, das heißt, er wird offensichtlich eine Verbindung zum Socket herstellen, sodass wir seine Socket-ID abrufen können Klingeln, das war's, dann Punkte. In jeder Runde erhält er also einen Punkt mehr Die Standardeinstellung ist Null. Geben Sie dann p ein. Das ist etwas anderes. Das ist ein Symbol, du kannst sagen, ein Symbol, entweder X oder so. Also werden wir das hier speichern, damit es einfacher Überblick darüber zu behalten, wer der Gewinner ist und alles andere. Geben Sie Zeichenfolge ein. Exportieren Sie jetzt einfach dieses Spielerschema und exportieren Sie es, damit wir es in die Raumdatei importieren können . Der Raum ist da. Diese Spieler werden eine Reihe von Spielerschemas enthalten, und wir wissen, dass es 22 Spieler geben wird. Als Nächstes müssen wir überprüfen, ob ein Raum miteinander verbunden werden kann oder nicht, was einfach bedeutet, dass nach zwei Spielern gespielt wird was einfach bedeutet, dass nach zwei Es wird falsch sein. Also werden wir schreiben, dass wir uns so anschließen. Der Typ ist Boolean und die Standardeinstellung ist true. Das heißt, ganz am Anfang können die Leute diesem Spielraum beitreten Und wenn es zwei Personen gibt, ist es offensichtlich, dass die erste Person diesen Raum erstellt, und wenn die zweite Person beitritt, dann ist das falsch. Und wir müssen überprüfen, welcher Spieler an der Reihe ist, und das wird sich mit jeder Runde ändern. Also dreh dich einfach um und wir werden das Spielerschema hier sehen. Und wer auch immer Platz schafft , der Spielerindex wird Null oder Eins sein. Das hilft bei der Nachverfolgung von Zügen. Diese letzte Eigenschaft, dieser Turn-Index, erfüllt diese Aufgabe. Im Moment sind Sie vielleicht etwas verwirrend, aber am Ende werden Sie verstehen, dass dies die Verwendung dieses Feldes ist und jedes Feld seinen Nutzen haben wird. Jetzt haben wir das Schema hier. Vor dem Export müssen wir das Schema in ein Modell konvertieren. Schreiben Sie einfach, dass das Kosten-Ru-Modell dem Mongos-DO-Modell entspricht dem Mongos-DO-Modell Ich werde es R nennen und das Schema wird so sein und es einfach exportieren Das ist es. Das ist unser Zimmermodell. Ich hoffe ihr habt also alles verstanden, was jedes Feld macht, Belegung, Mx umgibt. Zumindest sollten Sie jetzt wissen, wofür dieses Feld verwendet wird . Also das ist es. Für dieses Video. Wir sehen uns im nächsten Video. Wir werden an Ereignissen arbeiten, bei denen Ereignisse an Sockets gesendet werden. Danke. 15. Arbeite an CreateRoom-Event: Hallo. Also haben wir das Raummodell fertig. Lassen Sie uns daran arbeiten, was passiert, wenn das Ereignis „Raum erstellen“ ausgelöst wird. Ich hoffe, Sie erinnern sich an die Socket-Ereignisse, wenn der Benutzer auf Create room klickt, dann wird dieses Ereignis vom Client ausgegeben und zum Server weitergeleitet Jetzt müssen wir also serverseitig arbeiten , um uns dieses Ereignis anzuhören Gehen Sie also einfach hier zum Indexieren des JS. Und wir werden es nicht protokollieren. Zuallererst müssen wir diese Funktion zu einem Syncins machen Da Datenbankfunktionen aufgerufen werden, packen Sie alles in einen Catch-Block C-Log-Fehler. Jetzt im Tri-Blog. Lass uns daran arbeiten. Das ist unser Zuhörer. Zunächst erstellen wir ein Raumobjekt. Erstellen Sie hier ein Raumobjekt. Wir haben das Modell, also schreiben Sie einfach dass R dem neuen Raumobjekt entspricht. Dann erstellen wir pro Schema ein, dieser Spieler entspricht. Wir wissen, welche Füllungen erforderlich sind Socket-ID ist die Socket-ID. Wir werden die Socket-ID aus dieser Variablen abrufen. Socket diese ID. Dann wird der Name der Spielername sein. Es kommt hier vom Client selbst, dann vom Spielertyp. Wird x sein. Da dies der Spieler ist, der das erstellt, erhält er das Symbol x. Dann fügen wir Eigenschaften hinzu, das sind Werte im Raumobjekt . Jetzt haben wir im Raumobjekt einfach ein Spielerfeld, das eine Liste ist. Deshalb werden wir den pH-Wert der Spieler und diesen Spielerwert aufschreiben . Das liegt daran, dass, wenn du hier nach Rom gehst, eine Liste mit Spielerschemas akzeptiert wird. Wir müssen dieses Schema erstellen und es hierher schicken. Okay. Dann ist als Nächstes Raum N entspricht dem dran. N entspricht dem Zug des Spielers , der den Raum erstellt. Und das ist einfach ph. Da es ein Array ist. Deshalb verwenden wir Push und nicht das Gleichheitszeichen. Speichern Sie dann Rom Theta in Mongo d V mit diesem Befehl. Es ist eine sehr einfache Variable, die einem Speichern entspricht . Das ist es. Oh, dann müssen wir die Raum-ID speichern, die nach dem Speichern zurückgegeben wird, das ist einfach der Speicher-ID-Wert. Und diese Unterstrich-ID wird immer von Mongo DB erstellt oder zurückgegeben , wenn ein neues Dokument erstellt wird Diese Unterstrich-ID ist standardmäßig Nach dem Speichern. Also hier ist einfach die Konstante Rom ID gleich R Punkt und die Punkte-ID Punkt zwei Zeichenfolge Jetzt, nachdem es einfach Socket geschrieben hat, die ID dieses Raums hinzugefügt, was bedeutet, dass dieser Socket zuhört Aktiviert, wenn nur derjenige Ereignisse in diesem Raum ausgibt, die ID Da es also offensichtlich sein wird , können viele Spieler gleichzeitig spielen Ich möchte also nicht annehmen, dass , wenn ein Spieler darauf tritt, der andere Spieler, der nicht einmal in dem Raum spielt , das Event bekommt. Deshalb müssen wir das sicherstellen. Und jetzt werde ich endlich IO verwenden, um die ID zu ROM-IDs zu verwenden , die ausgeben. Jetzt werde ich ein Ereignis vom Server ausgeben. Rom wurde erfolgreich erstellt und ich werde die Raum-ID senden. Entschuldigung, Raumdaten, die sich bereits im JavaScript-Objektformular befinden, da ich weiß, dass Daten von Bongo dV im Javascript-Objektformular enthalten Das ist das JS-Format. Und hier teilen wir dem Kunden mit, dass der Raum erstellt wurde und Io Daten an alle in diesem Raum sendet, während Socket Daten an Sie sendet. Ich meine also, nehmen wir an, es war überall Socket Dot Join, und wenn ich Socket Dot M schreibe, bekommt nur die Person , die diese Anfrage sendet, das Ereignis. Aber nehmen wir an, in der Raum-ID gibt es drei Spieler. Von hier aus erhalten alle drei Spieler dieses Event, sodass wir die Änderungen auf allen Bildschirmen vornehmen können. Denken Sie daran, wenn ich Socket Dot M verwende, dann erhält nur die Person, die das sendet , also nehmen wir an, wer diesen Raum erstellt, das Update. Das war ein Unterschied. Und so hören wir uns Ereignisse an und auf ähnliche Weise geben wir Ereignisse zu. Und im nächsten Video werden wir uns dieses Erfolgsereignis vom Kunden anhören dieses Erfolgsereignis , der die flachere Seite hat. 16. Raum-Erfolgs-Event-Listener: Hallo. Nachdem wir erfolgreich einen Raum erstellt haben, werden wir den Spieler zum Spielbildschirm weiterleiten. Gehen Sie also zum Lippenordner auf dem Bildschirm und erstellen Sie einen neuen Punkt auf dem Bildschirmspielbildschirm. Hier einfach Material importieren und dann ein vollständiges Grid anzeigen. Bildschirm. Ich werde den Namen der Route hier haben. Die Zeichenfolge Route-Name entspricht Slash-Spiel Dann gib ihm einfach ein Gerüst und gib ein Gerüst zur Körpermitte zurück Das Kind gibt ihm einen Text auf dem Spielbildschirm. Das ist vorerst nur vorübergehend. Spielbildschirm. Speichern Sie es und registrieren Sie diese Spielroute in der Hauptpunktdatei. Geben Sie hier einfach unter dem Bildschirm „ Spielraum beitreten “ den Namen der Route und der Benutzer wird zum Spielbildschirm weitergeleitet Als Nächstes hören wir einfach auf dem Server zu, um das Raumereignis zu erstellen Ähnlich müssen wir auf der Flatter-Seite zuhören, um ein Erfolgsereignis für den Raum zu erstellen Lassen Sie uns hier unter dem Listener create void create success eine neue Funktion innerhalb der Socket-Methoden void create erstellen Und wir werden den Benutzer nach dem Glockenkontext fragen dem Glockenkontext , damit wir einen Navigator verwenden können Jetzt schreiben wir mit dem Socket-Client einfach auf den Eventnamen is create room success. Und wir werden die Raumdaten so abrufen , wie wir sie uns auf der Serverseite merken. Drucken Sie dann einfach die Raumdaten aus und verwenden Sie nicht die Kontexte, sondern den Namen der Route auf dem Spielbildschirm. Dies ist ein Listener für den Erfolg beim Erstellen des Raums, wodurch der Benutzer zum Spielbildschirm weitergeleitet wird Offensichtlich müssen wir diesen Listener ausführen. Gehen Sie hier im In-Zustand zum Erstellen des Raumbildschirms. Im Init-Zustand rufen wir Socket-Methoden auf, die einen Raum-Listener erstellen, und übergeben den Kontext Das ist es. Wann immer es dieses Socket-Ereignis kontinuierlich ausführt oder abhört und wann immer es ausgelöst wird , werden wir es tun. Lass es uns testen Wenn ich hierher gehe, klicke ich auf Raum erstellen. Ich gebe Rah den Namen des Zimmers. Jetzt lösche ich einfach das Terminal und klicke auf Erstellen. L Mal sehen, was passiert. Okay, Rom ist nicht definiert. Wir haben einen Fehler im Server. Okay. Bei der Erstellung dieses o habe ich vergessen, F für „ habe ich vergessen, F für „ erforderlich“ und dann für „Modelle“ zu wählen und Speicherplatz wie diesen zu benötigen. erforderlich dann für „Modelle“ zu wählen und Speicherplatz wie diesen zu benötigen. Lass es uns speichern. Es ist auch die App. Sagen wir, was passiert. Funktioniert es oder noch einmal, ich hole mir etwas T. Wir wurden zum Spielbildschirm navigiert, und im Terminal kannst du alle Daten sehen Das sind Belegungsspieler, maximale Anzahl an Runden, welche Spieler die Sache mit den Bällen drehen Und wir haben auch diesen unterstrichenen ID-Wert. Das bedeutet, dass unser Create Room-Event funktioniert und wir jetzt einen neuen Raum in unserer Mongo DV-Datenbank erstellen können einen neuen Raum in unserer Mongo DV-Datenbank Sie können also sagen, dass es ein Erfolg für uns ist, weil es uns zumindest die Grundlage gibt, und jetzt können wir an der Anwendung weiter daran arbeiten Danke. 17. Raumanbieter-Kurs: Hi, willkommen zurück. Jetzt ist es an der Zeit dass wir auch das State Management installieren und uns darauf konzentrieren. Wir werden also das Provider-Paket in Flutter verwenden , um den Status in unserer Anwendung zu verwalten , anstatt Daten über Konstruktoren zu übergeben Dafür können Sie also ein P-Terminal in den Routenprojekten Ich werde es einfach toppen oder du kannst ich einfach den Anbieter hier angeben. Der Anbieter sollte zuerst kommen und dann installieren. Entweder können Sie Flutter Pub als Anbieter in Ihrem Terminal verwenden , oder ich kopiere das einfach und gehe zur Pubs-Dot-Yaml-Datei und füge es hier wie folgt in die Abhängigkeiten H, lassen Sie mich auch nebenbei sprechen. Da es sich um ein neues Paket handelt, werde ich die Flatter-Anwendung beenden und erneut ausführen Geh, um erneut zu beginnen. Auch im Terminal werde ich in den Serverordner wechseln und PM das Okay ausführen das . Wir werden die Raumdaten im Provider speichern , damit sie in der Anwendung einfach abgerufen werden können. Erstellen Sie im Ordner einen neuen Ordner mit dem Namen providers und schreiben Sie darin room eta provider do. Lassen Sie uns Material importieren und wir werden die Klasse Rota Provider Extends Change Notifier Provider schreiben Klasse Rota Provider Extends Change Notifier Provider Ich hoffe, Sie kennen dieses Konzept. Und tut mir leid, das sollte ein Change Notifier sein. Ja. Und das kommt aus der Materialbibliothek. Zuallererst die ersten Daten, die wir haben werden, sind dynamische Raumdaten. Wir wissen, dass Daten im JCN-Format vom Server kommen JCN-Format vom Server Dann ist das eine Clave-Variable , mach einen Getter dafür, string dynamic get Zimmerdaten wie diese. Und natürlich benötigen wir eine Setter-Funktion, oder sagen wir, eine Aktualisierungsfunktion , um die Raumdaten zu aktualisieren Wir erhalten dynamische MAP-Zeichenkettendaten dynamische , Raumdaten sind aktive Daten und benachrichtigen alle Zuhörer Ich sage noch einmal, dass ich hoffe, dass Sie das Konzept der Provider-Statusverwaltung kennen und wissen, wie wir Änderungen vornehmen und alle Zuhörer benachrichtigen Als Nächstes müssen wir uns registrieren , um sie innerhalb der Mined Dart-Datei bereitzustellen Wickeln Sie das Material hier mit einem starren Etikett und es wird der Provider geändert Und im Inneren gibt es uns Kreativität im Kontext. Und hier müssen wir den Anbieter angeben , der Raumdatenanbieter ist. Und in den meisten Fällen werden Sie mehrere Anbieter verwenden. In unserer Anwendung wird es jedoch nur einen Anbieter geben. Deshalb verwende ich hier direkt den Change Notifier Provider. Lassen Sie abschließend nach, wenn der Raum erfolgreich erstellt wurde und der Client das Erfolgsereignis „Raum erstellen“ abhört Führen Sie dann den Raum Raumdaten zu aktualisieren, um Daten im Anbieter zu speichern Gehen Sie also zu den Socket-Methoden. Sie den Raum hier erfolgreich erstellen möchten, schreiben Sie einfach den Punkt des Kontextes für den Anbieter. Wir haben hier den Kontext und den Anbieter, den wir abhören wollen Zimmerdatenanbieter und stellen sicher, dass ich nicht möchte, dass die Änderungen abgehört werden. Rufen Sie dann einfach Update Room Data und wir senden die Raumdaten, die vom Server kommen. Das ist es also. Das war's für dieses Video. Im nächsten Video werden wir auch an der Funktionalität des Zusammenfügens von Räumen arbeiten . Danke. 18. Join Room Listener: Hallo. Lassen Sie uns nun eine Funktion innerhalb von Socket-Methoden erstellen, mit der wir ein Ereignis vom Client an den Server ausgeben , wenn der Spieler versucht, einem Raum beizutreten. Also hier unten der Erfolgs-Listener zum Erstellen eines Raums. Ich nichtige Join Room. Zeichenfolge, Ebenenname, Zeichenfolge, Raum-ID. Dies sind die beiden Details. Offensichtlich erwähnen wir das auf dem Join Room-Bildschirm. Ich werde einfach überprüfen, ob ihr Name nicht leer ist und ob die Raum-ID nicht leer ist. S ist nicht leer. Dann werden wir ein Ereignis über den Socket ausgeben. Das ist Join Room, und wir werden die Daten weitergeben. Spielt den Namen ab. Spielname und Raum-ID RooD, etwa so Hier geben wir also A-Daten aus, wenn der Spieler versucht, dem Raum beizutreten, aber wir müssen uns dieses Ereignis natürlich auf unserem Node-Server anhören dieses Ereignis natürlich auf unserem Node-Server Gehen Sie jetzt zum Indexieren der JS-Datei. Okay, hier unten dieser Raum-Listener erstellen. Wir werden am Socket arbeiten , wenn der Eventname Join Rom lautet Es wird eine Singfunktion haben und wir werden das Theta-Flugzeug und die Raum-ID bekommen Wir machen das jetzt, versuchen Catch Block erneut, versuchen Catch Cleg. Dann werde ich hören, dass dieser Code sehr einfach ist Dieser Check I Rom ID ist eine gültige Mungo-ID oder nicht Dies ist der Ablehnungsscheck. Du kannst es einfach kopieren und einfügen, einfach ID Match schreiben ID Match dann hineinschreiben Ich werde so schreiben müssen. Dann 0-9 A F A F 24$ Denken Sie daran, diesen Code können Sie hinzufügen, wenn Sie möchten , Sie können ihn auch entfernen Überprüfe also nur, ob es sich um eine gültige Mongoose-ID handelt. Es ist also ein Sockenfehler aufgetreten. Bitte geben Sie ein gültiges Zimmer ein und kehren Sie von hier aus zurück. Und wir müssen überprüfen, müssen sicherstellen, dass es nicht passt. Es ist Ausruf Und wenn es okay ist, schreiben wir, dass R einem Modell entspricht, das anhand der ID gefunden Das ist Mos Anfrage. Wir werden das Dokument anhand seiner ID finden. Dann prüfen wir, ob es sich bei der Immobilie um eine gemeinsame Immobilie handelt. Das heißt, die Person kann ihr beitreten. Und wenn nicht, sonst schreibe ich wieder Socket Occain, und hier werde ich bestehen. Das Spiel ist im Gange. Versuche es in einem anderen Raum. Das heißt, zwei Spieler spielen bereits in diesem Raum, du kannst ihm nicht beitreten. Wenn ein Beitritt möglich ist, zunächst erneut ein Spielerschema, erstelle ich zunächst erneut ein Spielerschema, einen Laynamen , also eine ID, also eine ID Geben Sie dann ein. Diesmal wird es so sein. Dann schreibe ich Socket Join This Socket und Join mit derselben Raum-ID. Dann schiebe ich den Spieler aus dem Spielerraum dieses Raumobjekt, das sind diese neuen Datenspielerdaten in dieses Raumobjekt, das sind diese neuen Datenspielerdaten. Dann ändere ich den Punkt im Raum, der gleich False ist, und ich werde diese Änderungen speichern. Wenn ein Raumpunkt so gespeichert wird, werden diese Änderungen in der Datenbank gespeichert. Und schließlich werde ich an den gesamten Raum senden, dass ich die Raum-ID geöffnet habe , dem Raum beitreten war erfolgreich, und ich werde diese Raumdaten an die Platter-Anwendung senden an die Platter-Anwendung Das war der Zuhörer, der am Raum-Event teilnahm. Zuerst geht es zum Mongo und holt sich den Raum, dann erstellt es einen neuen Spieler und fügt diesen in das Raumdatenmodell ein, wir haben die Spieleranordnung und pushen diesen Spieler erneut Das heißt, wir haben jetzt zwei Spieler in diesem Array. Dann ändere ich die Eigenschaft auf false, dann speichere ich sie erneut, und dann werde ich diese neuesten Daten über dieses Socket-Event an das Frontend senden. Im nächsten Video werden wir uns dieses Erfolgsereignis „Join Room“ anhören . Danke. 19. Arbeite an der Erfolgsveranstaltung: Nachdem Spieler im letzten Code erfolgreich einem Raum beigetreten sind, haben wir die Meldung „Event Join Room Success“ gemeldet. Lassen Sie uns nun also auch dafür und auch für dieses Ereignis, bei dem ein Fehler aufgetreten ist, einen Listener erstellen und auch für dieses Ereignis, bei dem ein Fehler aufgetreten ist Gehe zu den Socket-Methoden der Dart-Datei. Und hier unter diesem Gemeinschaftsraum. Breiter Verbindungsraum, erfolgreicher Zuhörer. Kontext der Rechnung. Wir werden nach dem Rechnungskontext fragen und dann einfach schreiben, damit Kunde dem Raum beitreten kann. Wir werden die Zimmerdaten bekommen. Und diese Raumdaten werden wir im Anbieter aktualisieren. Anbieter des Kontextes. Zimmerdatenanbieter, hören Sie auf False und schreiben Sie die Zimmerdaten aktualisieren, und wir schicken Ihnen den Raum. Danach schreiben wir einfach Navigator do Navigator of Context, den Push-Namen, und wir schicken diesen Benutzer ebenfalls auf den Spielbildschirm. Das ist die Person , die versucht, sich dem anzuschließen. Seitdem hoffe ich, dass wir die Verwendung dieses Anbieters verstanden haben. Wir haben diese Daten bei diesem Anbieter, und dann können wir diese Daten auf dem Spielbildschirm verwenden. Ähnlich verhält es sich im Folgenden mit diesem verbundenen Raum-Listener-Kontext-Client großer Fehler aufgetreten ist Raum-Listener-Kontext-Client , dass kein Fehler Wir erhalten die Daten, die in diesem Fall im Zeichenkettenformat vorliegen Und wir werden einfach einen Snackbar-Nachrichtendienst mit Kontext zeigen, der die Snackbar und dann die Snag-Bar Es wird Text sein, der die Daten enthält. Das ist es. Wir haben die beiden Zuhörer. Fügen Sie nun diese Zuhörer auf dem Bildschirm des gemeinsamen Raums hinzu. Erzeugt einen angeborenen Zustand und schreibt den Socket. Hier habe ich nicht die Socket-Methoden, also gehe einfach zu create und kopiere die Socket-Methoden Die Join-Room-Socket-Methoden Join Room Success Listener und ähnlich die Socket-Methoden ers occurred listener auch nur zu Testzwecken Lassen Sie uns auch nur zu Testzwecken die Raumdaten auf dem Spielbildschirm anzeigen Gehe hier zum Spielbildschirm. In diesem Artikel werde ich Provider of Context schreiben. Es wird ein Anbieter von Raumdaten sein. Hören Sie sich die zwei Saiten der Raumdaten an. Ich gebe nur die kompletten Raumdaten dem Bildschirm aus , damit wir sie sehen können Als Erstes müssen wir ein Ich nenne es A erstellen und hier sehen, dass jeder Join gleich true ist , dann Spielername und nur eine Spielerinformation ist da Wenn ich es versuche, glaube ich nicht, dass ich es von hier kopieren kann, ich muss zuletzt zur MongoDB gehen Ich muss die Raum-ID kopieren. Lassen Sie uns zunächst anmelden. Wenn ich auf Sammlungen durchsuchen klicke, dann auf Räume. Und das, mal sehen, ich schätze, das hier. Ich werde den Ausweis kopieren. Und wenn ich die App erneut starte und versuche, ihr beizutreten. Das ist zuallererst. Ich kann es nicht einfügen, M. Lass es uns machen 647a3 362d eb09 cf3e ob6e und 362d eb09 cf3e ob6e und schreiben auf Join klicken. Mal sehen, ich hoffe, es kann ein Fehler Ich bin mir nicht sicher, warum das nicht funktioniert, aber sagen wir, wenn ich zum Raum beitreten gehe, dann glaube ich, hier auftreten. Ich bin mir nicht sicher, warum das nicht funktioniert, aber sagen wir, wenn ich zum Raum beitreten gehe, dann glaube ich, hier im Tab passiert nichts. Sie müssen diese Funktion für den verbundenen Raum in der Methode „ Raum verbinden“ aufrufen . Der Name des Plans wird der Name des Controllers sein. Es wird ein schwuler MD-Text sein. David, es gibt also auch einen Rechtschreibfehler. Was du dir wünschst. Was ist der Fehler hier? Okay. Ich glaube nicht, dass dieser Fehler vorliegt. Wenn dieser Code nicht funktioniert, werde ich ihn im nächsten Video entfernen. Ich glaube, ich muss den Code noch einmal überprüfen. Ich danke dir. 20. Spieler-Dart-Modell-Kurs: Hallo. Im letzten Video hatten wir ein paar Probleme. Ich habe diese Dinge gelöst. Also für den Android-Emulator habe ich ihn einfach gelöscht und einen neuen Emulator mit der neuesten Version erstellt, also Pixel , Excel und was auch immer, er hat das Problem mit dem Kopieren und Einfügen gelöst Und in unserer Indexpunkt-JS-Datei gab es hier einen Tippfehler Das sollte Rom Punkt E sein. Das Gelenk ist gleich falsch. Vorher war es minus. Es war also nur ein Bug oder entspricht einem Tippfehler. Außerdem habe ich diese Zeile hinzugefügt, die besagt, dass ein Fehler ausgegeben wird, wenn der Raum gleich Null ist In ID wurde kein Spielzimmer gefunden. Angenommen, der Benutzer hat eine gültige Bongo-ID eingegeben, aber der Raum ist nicht verfügbar Nehmen wir an, er hat versehentlich das letzte Wort entfernt oder den letzten Buchstaben angenommen, dann gibt es in diesem Fall kein solches Dokument in der Datenbank Also überprüfen wir das auch. Also versuchen wir es noch einmal. Ich werde auf Create Room klicken. Dann wurde ein Raum erstellt. Ich werde zur Datenbank gehen. Ich aktualisiere. Und sagen wir, jeder Join ist gleich zwei, und in der Spielerliste ist nur ein Spieler da. Ich kopiere die ID und versuche dann, demselben Raum beizutreten. Treten Sie bei und nehmen Sie dann einen anderen Namen an. Und jetzt habe ich das in der Zwischenablage und wenn ich auf Beitreten klicke S. Ich bin dem Raum erfolgreich beigetreten, und wenn ich die Seite aktualisiere, dann können Sie sehen, dass e join falsch ist, und in den Playern haben wir zwei Spieler und beide haben ihre Socket-IDs und alles Das bedeutet, dass der Beitritt zu einem Raum auch einwandfrei funktioniert. Lassen Sie uns nun an einer Modellklasse arbeiten. Beim Raumanbieter ist das diese Datei. Wir haben nur das Eigentum an Raumdaten. Wir werden aber auch Spielerdaten als Eigentum in dieser Anbieterklasse hinzufügen Spielerdaten als Eigentum in dieser Anbieterklasse , da wir den Namen der Spieler und ihre Punkte auf dem Spielbildschirm anzeigen werden . Anstatt also von dieser Raumeigenschaft aus auf Spielerdaten zuzugreifen , werden wir eine neue Spielereigenschaft erstellen, damit es für uns bequemer ist. Und zuallererst werde ich eine Modellklasse erstellen , die die Modellklasse für die Spielerdaten ist . also im Lip-Ordner Erstellen Sie also im Lip-Ordner einen neuen Ordner Models und darin Play Dot Dot. Schreiben wir den Spieler, dann den endgültigen Namen des Spielers und eine Eigenschaft. Und das sind genau die gleichen Namen, die serverseitig im PLA JS-Modell geschrieben sind. Und Socken-ID. Letzte doppelte Punkte letzter Saitenspieltyp Dann erstellen wir eine konstruierte Umbenennung. Benötige diese Scheiß-ID. Punkte. Erfordert diesen Spielertyp. Dann lassen Sie uns auch Methoden für die Serialisierung erstellen. Das ist die Konvertierung von einer Map zu diesem Objekt sowie von diesem Objekt zur Map Zuallererst werde ich die Funktion „Map String Dynamic to Map“ erstellen . Es wird eine Karte zurückgeben. Dann haben wir den Namen des Spiels. Ich spiele deinen Namen. Dann Socket I Socket ID. Zeigt auf den Typ Clear Type. Und dann, wenn die Werksfunktion auf der Karte angezeigt wird. Ich akzeptiere eine Karte. Diese Karte wird von Mongo DV kommen. Dann verlass dich darauf, leg dich hier ein. Wird einfach dieses Kopieren und Einfügen zugeordnet und dann weist die Socket-ID darauf hin Auch hier heißt es, dass diese Schlüssel mit der Index-JS-Datei identisch sein werden der Index-JS-Datei Ich suche nur nach der Null, um sicherzugehen, dass es kein Problem gibt. Okay. Also das ist es. Das war's für dieses Video. S in der nächsten Sitzung. 21. Spielerstatus im Anbieter: Hallo. Fügen wir nun diese Player-Eigenschaft hinzu, oder Sie können in unserer Anbieterklasse den Status Status angeben , der Raumdatenanbieter ist. Hier unter diesen Raumdaten, rechter Spieler, Ebene eins, zwei, Modell. Und hier lasse ich erstmal einfach alles leer stehen. D leer 0,0 oder du kannst sagen, ich kenne die Spieler, eins wird X sein. Und ähnlich schreiben Sie für den zweiten Spieler Cla zwei, und hier ist das Symbol Null, dann erstellen Sie eine Getter-Methode, damit Cla Eins gleich P eins ist Spieler 22, Spieler zwei. Sollte zwei spielen. Dann erstellen wir auf ähnliche Weise eine Funktion zum Aktualisieren von Spieler eins und Spieler zwei, zunächst einmal Daten. Wir werden Daten auf der Karte erhalten. In Kartenform, Zeichenfolge dynamischer Spieler, Daten. Das werden wir vom Server bekommen. Spiel eins, Physisch zwei spielen Map und Spieler eins so. Und dann wurde auf ähnliche Weise Spieler zwei erstellt. Es wird genauso sein wie oben beschrieben. Die Zeichenfolge ist dynamisch. Daten von Spieler zwei. Spieler zwei entspricht der Spielkarte. Player to Data, und stellen Sie sicher, dass Sie Notify Listeners schreiben, damit das Frontend aktualisiert wird. Okay. Gehen Sie jetzt zu Index to JS File und geben Sie hier Spielerdaten vom Server aus. Hier einfach unter diesem Raum ein Erfolg. Ich werde IO zwei Raum-ID-Punkte schreiben zwei Raum-ID-Punkte Spieler zu aktualisieren. Und ich werde Punktspieler schicken. Das sind die Daten. Und jetzt senden wir ein Ereignis vom Server aus. Natürlich müssen wir es dem Kunden anhören. Gehen Sie hier ganz unten zu den Socket-Methoden pro Zustands-Listener Ich werde nach dem Kontext der Rechnung fragen. Dann ist der Socket-Client nicht aktiviert aktualisiert die Spielerdaten. Und ich möchte auch sagen, denken Sie daran, dass es sich bei den Spielerdaten um eine Reihe von Spielerkarten handelt. Es ist also ein Array. Also, um die Daten pro eins zu bekommen, musst du natürlich zum Index Null gehen und für Spieler zwei zum Index eins. Anbieter des Kontextes Anbieter von Raumdaten. Das Update von Spieler eins, p Spielerdaten am Index Null. Und stellen Sie sicher, dass Sie auf Stürze hören. Und genauso aktualisierst du die Daten von Spieler zwei, und hier wird der Index eins sein. Ich hoffe, du hast das verstanden und das wird nur aktualisiert, wenn jemand den Raum betritt. Denn wenn man einen Raum erstellt , ist einer der Werte natürlich Null, aber wenn die Person beitritt, dann sind beide, also die Spielerdaten, da. Ba wird bei der Erstellung dieses Werts gleich Null sein. Das ist bei dem einen Index. Lassen Sie uns abschließend diese Funktionalität testen. Zunächst müssen wir diesem Update den Listener zum Löschen des Zustands im Startstatus des Join-Room-Bildschirms zuweisen Listener zum Löschen des Zustands im Startstatus des Join-Room-Bildschirms Also hier werde ich Socket-Methoden und so viele Bindungsfehler schreiben und so viele Bindungsfehler Das Update ist so klar. Und dann werde ich auf dem Spielbildschirm die Namen zu Testzwecken anzeigen. Also hier, ein Zentrum. Ich werde Spalte, Hauptachsenausrichtung, Hauptachsenausrichtung, Mittelpunkt der Hauptachse, Kinder schreiben Hauptachsenausrichtung, Hauptachsenausrichtung . Dann Text im Text, er wird für den Kontext sorgen. Anbieter von Raumdaten als Dateien, Punkt Spieler eins, Spielername. Und ähnlich wie unten schreibe ich Spieler zwei pro Namen. Lassen Sie uns das einfach entfernen, damit ich entfernen weiß, welches ich kopieren soll. Dann erstelle ich. Offensichtlich wird im Moment nichts da sein. Aber wenn ich diese ID kopiere. Ich kopiere diese ID und versuche, dem Raum beizutreten. Und hier gebe ich zuerst die ID ein und schreibe J und trete ein, dann sehe ich. Sowohl der Spielername als auch der Name des Spielers können im Spielzimmer angezeigt werden. Das bedeutet, dass diese Funktionalität auch einwandfrei funktioniert. Im nächsten Video werden wir auf dem Bildschirm der Wartelobby arbeiten. Das heißt, wenn jemand ein Spielzimmer erstellt, sollte er einen Bildschirm sehen darauf wartet , dass eine andere Person diesem Raum beitritt. Dann wird ihnen nur das Spielzimmer oder der Spielbildschirm angezeigt. Danke. 22. Arbeite an der Wartelobe: Hallo. Wenn der erste Spieler einen Raum erstellt, wollen wir, dass er warten muss , bis der andere Spieler ihm beitritt. Lassen Sie uns dafür einen neuen Bildschirm erstellen. Ich werde nicht Bildschirm sagen. Es wird irgendwie wackelig sein. Also im Widgets-Ordner, rechts wartender Lobby-Punkt Und hier zuallererst p-Material. Und sorgen Sie für einen stimmungsvollen Besuch. Ich warte in der Lobby. Da dies kein Bildschirm ist, müssen wir den Routennamen nicht schreiben. Warte. Hier brauchen wir eine Spalte aber wir benötigen auch einen Controller , weil wir bei diesem Besuch die Raum-ID anzeigen werden Controller für Textbearbeitung Rom-ID-Controller. In diesem Zustand schreiben Sie einfach, dass die Raum-ID dem Textbearbeitungs-Controller entspricht, und der Textwert wird vom Anbieter des Kontext-Raum-Datenanbieters stammen . Hören Sie auf False und schreiben Sie dann die Raumdaten, und wir wollen die ID. Das ist die Unterstrich-ID. Denken Sie daran, diese Unterstrich-ID. Und es sind Kartendaten. Deshalb schreiben wir den Schlüssel hier. Und entsorgen Sie auch diesen Raum-ID-Controller, den Sie entsorgen. Jetzt geben wir im Hauptteil einfach eine kreisförmige Fortschrittsanzeige mit einem Text aus, geben wir im Hauptteil einfach eine kreisförmige Fortschrittsanzeige mit einem der besagt, dass wir warten sollen, bis andere Person beitritt. Außerdem wird die Raum-ID angezeigt, die er mit seinem Freund teilen kann In der Haupt-***-Ausrichtung, die Mitte in der kreisförmigen Fortschrittsanzeige der Kinder, geben Sie ihr die Farbe Weiß. Geben Sie den Abstand, die Größe des Felds, die Höhe und den Text an, der darauf wartet dass ein anderer Spieler beitritt. Dann wieder C, geben Sie einen Abstand von 20 ein. Schließlich haben wir diesen benutzerdefinierten Text als Controller für die Raum-ID. H-Text wird leer sein. Aber hier gilt das nur für Lesezugriff , weil ich nicht möchte, dass der Benutzer die Raum-ID bearbeitet und diese Spalte auch mit einem Innenabstand umschließt und ihr die gesamte Größe von Das ist der Code. Lass uns nun diese Lobby testen, gehe zum Spielbildschirm Und hier. Lassen Sie uns oben einen Raumanbieter erstellen. Was ich möchte, ist, dass ich ihn kopiere und Zimmerdatenanbieter den Raumdaten entspricht , sodass wir diesen Anbieter verwenden können, wo immer wir wollen. Im Körper, auf einem Gerüst. Ich werde diesen Dummy-Code entfernen und überprüfen, ob die Raumdaten die Punkt-Rom-Daten zusammengefügt haben Stimmt. Das heißt, es ist immer noch niemand beigetreten. Also werde ich die Wartelobby zeigen. Sonst zeige ich Constant Center Child Game Starts. Vorerst werde ich nur Spielstarts schreiben. Später werden wir auch am Spielbrett arbeiten. Jetzt werde ich auch einen Chrome öffnen , damit ich leichter mit zwei Geräten testen kann. Ich werde einen Raum erstellen. Ich werde es kopieren und dann in den Join-Raum. Ich werde diesmal der N sein. Fragen Sie nach dem Raum und klicken Sie auf. Und hier seht ihr den Skin der wartenden Lobby. Es sieht also sehr gut aus. Wenn ich auf Beitreten klicke, startet das Spiel. Der zweite Spieler wird zum Spielstart geschickt, aber offensichtlich hat der erste Spieler das Update nicht erhalten. Also im nächsten Video werden wir auch an dieser Sache arbeiten. Danke. 23. Höre dir UpdateRoom-Event an: Hallo. Wie ihr gesehen habt, des ersten Spielers nicht aktualisiert, wenn wir versuchen, dem Raum beizutreten ersten Spielers nicht aktualisiert, wenn wir versuchen, dem wird die Wartelobby des ersten Spielers nicht aktualisiert, wenn wir versuchen, dem Raum beizutreten, da wir beitreten“ nur auf dem Bildschirm „Raum beitreten“ hören Ereignis „ Raum erfolgreich beitreten“ nur auf dem Bildschirm „Raum beitreten“ hören, nicht auf dem Bildschirm „Raum erstellen“. Außerdem können wir nicht den gleichen Listener für „Raum beitreten“ verwenden , da er vom Spielbildschirm aus navigiert, welchem Spieler man sich bereits befindet. Um es zu lösen Wir müssen ein weiteres Ereignis vom Server ausgeben, zum Index gehen und JS ausführen, und hier werde ich IO Punkt zwei Raum-ID ausgeben, ausgeben und ich werde Ro aktualisieren und ich werde die komplette Rolle senden. Und wir müssen uns das auch anhören , also gehen wir zu Socket-Methoden. Und jetzt denke ich, dass du dich mit diesem Ding wohl fühlst, weil wir überall aussenden und zuhören. Das ist es. Lass uns ID Update Room Listener schreiben. Dann setzt Bill einen solchen Client in Kontexten , auch wenn er eingeschaltet ist. Wir bekommen die Daten hier Und dann rufe ich wieder diesen Anbieter an und schreibe die aktualisierten Zimmerdaten Wir aktualisieren den Raum. Hören Sie sich das zum Schluss sowie auf dem Spielbildschirm an. Gehe zum Spielbildschirm. Hier im Staat. Wir schreiben. Zuallererst benötigen wir die Socket-Final-Socket-Methoden. Kate methodisch zu solchen Methoden. Und dann aktualisieren solche Methoden den Raum-Listener. Zuallererst dieser und dann der Player-State-Listener aktualisieren Diese beiden Zuhörer wollen wir. Spielerstatus, da die Punkte aktualisiert werden. Und dieser Raum-Zuhörer, denn wenn die ersten Spieler den Raum betreten, sollte das Spiel natürlich aktualisiert werden Also lass es uns testen. Ich werde auch zu Chrome gehen. Mama hat angefangen. Offensichtlich wird es einen Fehler zeigen. Ich muss wieder auf die Startseite gehen. Okay. Wenn ich jetzt auf dieses Mal klicke, schreibe ich den Namen Bill. Kopiere es Join is to und schreibe hier. Jeff. Dann schauen wir mal , ob ich auf Beitreten klicke. Dann wird dieses Spiel gestartet. Aber das dauert einige Zeit. Mal sehen, ob ein Fehler vorliegt. Es könnte einige Zeit dauern. Geben Sie an, was mit der Pflanze passiert ist an Ich schicke das Okay. Ich weiß nicht warum. Im nächsten Video werden wir sehen, was hier das Problem ist. Danke. 24. Arbeite an dem Scoreboard: Hallo, willkommen zurück. Im letzten Video hatten wir einen Fehler : Immer wenn Spieler eins einen Raum erstellt und eine Raum-ID an Spieler zwei sendet und Spieler, der ihm beitritt, erhält Spieler eins das Update nicht und er wird nicht zum Startbildschirm des Spiels weitergeleitet. Er wartet immer noch auf dem Lobbybildschirm. Also die Probleme in meinem Code waren: Zuallererst dem Spielbildschirm diesen falschen Code entfernen, musst du auf dem Spielbildschirm diesen falschen Code entfernen, weil ich natürlich möchte, dass dieser Spielbildschirm die Anbieteränderungen abhört. Das heißt, immer wenn wir die Zuhörer benachrichtigen, sollte dieser Bildschirm neu erstellt werden Und die zweite Änderung auf der Serverseite, das ist der Indexpunkt S. Ich habe einen Fehler auf dem Bildschirm „Raum erstellen Hier in der Zeile 32 ist die Konstante Raum-ID gleich dem Raum-ID-Punkt. Zeichenfolge. Hier sollten es auch Klammern sein. Aus diesem Grund war die Raum-ID nicht korrekt und die Steckdosen wurden nicht mit dieser Raum-ID verknüpft. Lassen Sie uns also den Server starten. S Server und PM Run D. Lass es uns ausprobieren. Wenn ich auf Create klicke, dann geht eine Kopie zum Join-Bildschirm. Ich schreibe und füge ein und klicke auf Beitreten. Siehst du. Jetzt haben beide Bildschirme das Update und beide werden an diesen gesendet. Das heißt, der Lobbyraum wurde entfernt. Lassen Sie uns von nun an an der Anzeigetafel I im Spielbildschirm ganz oben arbeiten . Wir werden die Anzeigetafel anzeigen, die den Spielernamen und die Punkte enthält Lassen Sie uns dafür eine neue Datei in Widgit erstellen. Hier und rechts Punktpunkt auf der Anzeigetafel. Fangen wir mit dem Binden von Material an, dann sage ich, dass es weniger steif ist Ich werde an Bord sein. Dann will ich zuallererst den Root-Provider Ein Aspekt des Kontextes. Und es sollte ein Anbieter von Raumdaten sein. Dann geben wir ein Zeilenraster zurück dann die Ausrichtung der Hauptachse Dann werde ich wieder eine Kolumne haben. Hauptachsenausrichtung, Hauptachsenausrichtung, Mitte C Dann möchte ich zwei Textfelder zusammen haben. Das sind der Name und die Punkte. Deshalb habe ich nacheinander die Spalte verwendet. Sie werden den Zimmeranbieter verstehen. Der Spieler eins, der Spielername Stil C Textil. Die lustige Größe wird 20 sein. Die Schriftstärke wird als Schriftstärke mit Punkt fett angegeben. Und ähnlich wie bei Billow acht, es wird Spieler eins sein, Punkte, die beiden in den zwei Saiten Und die Schriftgröße wird 20 sein, aber sie wird nicht fett sein Und auch für diese Spalte, wickle diese Spalte mit einer Polsterperücke ein und gib ihr 30. Erstellen Sie dann innerhalb dieser Zeile eine weitere Spalte für die Daten der beiden Spieler Kopieren Sie hier einfach diese Polsterung hinter sich unterhalb der Polsterung Hier wird es der Name des Spielers sein, und es wird Spieler zwei in zwei Reihen sein Speichern wir es und zeigen wir schließlich die Anzeigetafel auf dem Spielbildschirm Hier werde ich das Gerüst unter dem Gerüst entfernen Ich möchte das mittlere Widget entfernen und werde einen sicheren Bereich schreiben Dann wird das Kind zur Spalte. Start der Ausrichtung der M-Achse. Kinder und das erste Widget, das ich will, ist die Anzeigetafel. Das ist es. Speichern Sie es. Gehen wir zu einem Bildschirm und sehen wir nach. Es sieht sehr gut aus. Ich hoffe, Sie haben verstanden , dass dies eine Zeile war, und innerhalb der Zeile haben wir zwei Spalten. Und in dieser Spalte haben wir zwei Texte. Das ist. Deshalb war es eine Reihe und sie sind innerhalb von zwei Spalten. Unsere Anzeigetafel funktioniert also auch. Im nächsten Video werden wir anfangen, an der dicken Tacto-Tafel zu arbeiten , damit die Spieler miteinander spielen können. 25. Erstelle die Board-Benutzeroberfläche: Hallo, willkommen zurück. Auf dem Spielbildschirm unter der Anzeigetafel zeigen wir das T-dicke Tactoboard Lassen Sie uns also zuerst an der Benutzeroberfläche arbeiten eine neue Datei im Widgets-Ordner erstellen Und schreibe den Namen T T two bod. Okay. Material importieren. Stat full gia bod Dann werden wir hier das Board mit einem Grid-View-Builder erstellen da es viel einfacher sein wird, Boxen mit diesem Rigid zu erstellen Lass es uns machen. Generator für Grid-Ansichten. Zuallererst wird die Anzahl der Artikel neun betragen. Da es sich um ein Drei-Mal-Drei-Brett handelt. Das heißt drei auf der horizontalen Seite und drei auf der vertikalen Seite. Dann wird der Vertreter der Entgeltgruppe zu den Kosten des Graduiertendelegierten mit einem festen Kreuz, da Zählung und Kreuz existieren, also drei sein sollten Es sollte drei Elemente geben. Querachse bedeutet. Auf der vertikalen Seite. Und der Rechnungskontext, und wir bekommen den Index. Dann gib einen Container zurück. Jetzt, jetzt wird der Container eine Kiste sein. Das heißt, es wird Grenzen von allen Seiten haben. Und darin werden wir entweder den Spielwert X oder O anzeigen. Lassen Sie uns also ein paar Dekoboxen mit einem Dekoband versehen. Umrandung alle Farbfarben weiß 24. Und im Inneren des Kindes werden wir das Kind in den Mittelpunkt stellen. Dann schreiben Sie Perücke jetzt einfach fest und geben Sie den Wert X D style Textilfarbe, Farben, Punkt Weiß, Schriftstärke, Punkt, Fett Geben Sie dann die Schriftgröße 100 ein. Und ich werde nur für das Styling etwas Schatten spenden. Shadow Bl Radius für Farbfarben punktblau. Okay. Und da wir den Grid View Builder verwenden, um Fehler bei der Rendergröße zu vermeiden, die Grid-Ansicht mit einem Einschränkungsfeld umschließen. Beschränktes Feld und Beschränkungsfeld beschränken Für die Höhe geben wir nun an, dass die endgültige Größe der Größe des Medienabfragemediums des Kontextes entspricht Medienabfragemediums des , und die maximale Größe entspricht der Größe in Höhe, die der Höhe multipliziert mit 0,7 entspricht Und der Höchstwert wird 500 sein. Das sind die Max-Wit-Werte. Rufen Sie dieses Brett abschließend auf dem Spielbildschirm unter der Anzeigetafel Wir lesen einfach das konstante Häkchen zum Brett und speichern es ab. Gehen wir jetzt zum Spielbildschirm und sehen nach. Es sieht anständig aus. Offensichtlich habe ich den Chrome-Browser des Browsers nicht aktualisiert Chrome-Browser des Browsers Aber wie Sie sehen können, sieht es jetzt zumindest wie das Spiel aus. Im nächsten Video werden wir daran arbeiten, X O bedingt anzuzeigen . 26. Behalte den Überblick über die Spielwerte: Hallo. Jetzt müssen wir daran arbeiten X und Werte in Echtzeit anzuzeigen. Wenn wir also auf ein bestimmtes Grid klicken, oder Sie können Container sagen, gibt der Grid View Builder einen Index darüber, auf welchen Container geklickt wurde Und dann werden wir diesen Index an den Server senden. Das heißt, nehmen wir an, das ist Null, Eins, Zwei, Drei, so. Wir werden das an den Server senden und der Server sendet es und aktualisiert es an alle Clients in diesem Raum. In der Socket-Methode erstellen wir eine neue Funktion, die immer dann ausgeführt wird, wenn der Spieler seinen Zug im Spiel macht , und ein Ereignis vom Client an den Notizserver ausgibt. Lassen Sie uns ein breites Tabulatorraster erstellen. Wir werden die Zeichenfolge Raum-ID in den Index aufnehmen, und das wird etwas anderes sein, nämlich eine Liste von Zeichenketten-Anzeigeelementen. Hier behalten die Anzeigeelemente also den Überblick über alle neun Rasterwerte. Das ist ungefähr so. Nehmen wir z an, dann ist etwas so leer für alle neun Punkte. Das macht es uns natürlich einfacher, den Rasterwert auf allen Bildschirmen zu aktualisieren oder zu aktualisieren. Jetzt werde ich zunächst überprüfen, ob Anzeigeelemente in diesem Index leer sind. Das ist kein Wert da, dann werde ich ein Ereignis namens Tap ausgeben. Mit dem Wertindexindex und der Rom-ID, der Rom-ID. Offensichtlich sollte es ein Punkt sein. Sagen wir einfach, wir werden ein Ereignis von der Anwendung an den Server senden. Um nun den Überblick über Elemente oder Noten zu behalten, benötigen wir neue Eigenschaften und Methoden innerhalb unseres Anbieters. Gehen Sie zum Raumdatenanbieter und lassen Sie uns hier zunächst eine Liste mit Zeichenketten schreiben. Elemente anzeigen. Und hier geben Sie neunmal eine leere Zeichenfolge ein. Also ist es eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun. Okay, außerdem benötigen wir eine Ganzzahl für gefüllte Felder. Warum diese Felder gefüllt sind , weil wir die Länge der Anzeigeelemente nicht variabel verwenden können . Da es mit einer leeren Zeichenfolge gefüllt ist . Das bedeutet, dass die Länge neun sein wird. Standardmäßig. Wir werden also anhand des Status blasser Kästchen verfolgen wie viele Noten es gibt anhand des Status blasser Kästchen Das ist das Konzept. Lassen Sie uns jetzt Getter erstellen. Es ist eine Liste von Sorten. Das sind Spielelemente. Und es sollte besser sein. Und auch für die Feldboxen. Jetzt haben wir den Staat. Lassen Sie uns Funktionen zum Einfügen oder Aktualisieren von Werten erstellen. Breite Aktualisierungsanzeigeelemente. Ich indiziere die Wahl der Zeichenfolge. Das ist x z. Ich schreibe Anzeigeelemente an die Position Index 02 und stelle sicher, dass es x oder ist. Dann mache ich Boxen plus gleich eins und informiere alle Zuhörer, es zu aktualisieren Und darunter erstelle ich eine weitere Funktion, bei der die Boxen auf Null gesetzt Es ist also sehr klar, dass das Spiel einfach neu gestartet wird. Das ist nach dem Ende der Runde. Wir können wieder spielen. L das. Lassen Sie uns nun die Grid-Container tabellarisch machen und dann die Tab-Grid-Funktion binden Hier haben wir die Tab-Grid-Funktion. Gehe zum Tie Board. Im Item Builder, der sich hier befindet , wickeln Sie diesen Behälter mit einem Gestendetektor ein und schon können Sie ihn auf den Wasserhahn legen. Beim Wasserhahn. Zuallererst benötigen wir jetzt die variable Socket-Methodeninstanz der Socket-Methode. Socket-Methoden. Suchen Sie dann unter dieser Größe nach dem Zimmeranbieter. Warum der von Kontexten. ROM-Datenanbieter. Führen Sie dann in den On-Tab-Socket-Methoden die Tab-Grade-Methode aus. Index wird Index sein. Raum-ID handelt es sich um den Raumdatenanbieter, Rom-Daten und die interne Unterstrich-ID Anzeigeelemente werden wieder angezeigt. Der Raum hat die Anzeigeelemente bereitgestellt Das ist es also. Das war's für dieses Video. Im nächsten Video werden wir daran arbeiten, Ereignisse auf dem Notizserver abzuhören . Danke. 27. Anzeigen von X und O: Hallo. Willkommen zurück. Stellen Sie jetzt sicher, dass Sie sich das Tap-Event vom Client anhören. Das ist hier. Wir senden dieses Tap-Event aus, richtig? Wir müssen es uns also auf dem Server anhören. Gehen Sie hier zum Index der JS-Datei unter dem Join-Raum. Sie werden Socket auf Tap schreiben. Dann werden wir eine asynchrone Funktion haben. Und wir werden den Wertindex und eine Raum-ID bekommen. Machen wir das, versuchen wir zu fangen. Log A. Darin nochmal, Creo. Ich mache einen guten Ausweis. Raum-ID, dann lass die Wahl, wer dran ist und Spielertyp. Das bedeutet entweder x oder. So bekommen wir das Symbol. Jetzt schreibe ich, ob der Turn-Index 20 ist. Das bedeutet, dass Spieler eins mit der Tabulatortaste angezeigt wurde. Wir werden den Zug einfach auf Spieler zwei umstellen , denn da Spieler eins bereits die Tabulatortaste für Spieler eins hat, ist der Zug-Index im Raum gleich eins Wenn Spieler zwei getippt hat, machen wir das Gegenteil Das heißt, ändere den Zug-Wert auf Null und den Zug-Index auf Null Ich hoffe, du hast die Logik verstanden. Wenn der Spieler ein Tag hat, dann speichere die Rolle. Und jetzt senden wir ein Ereignis an die Raum-ID , die t hat, und wir werden den Wert und diese drei Dinge senden den Wert . Wir werden es an den Kunden senden. Auch hier überprüfe ich nur Raum sic auf diese Wahl, entweder x. Wenn ich einen Tab cla, dann ändere den Clear, dann speichere und gebe dann zu Jetzt müssen wir eine Methode schreiben, um dieses Tab-Ereignis abzuhören Gehe zu den Socket-Methoden. Und hier Wide Tab Listener. Bill Cont kontaktiert den Scit-Client. Gehen Sie auf Registerkarte, wir erhalten diese Daten dann vom Anbieter Was werden wir tun? Wir werden die Anzeigeelemente aktualisieren. Anbieter von Raumdaten, der die Anzeigeelemente aktualisiert. Wir erhalten den Index Theta sowie diese Auswahl. Das ist das Symbol oder der Wert, den du sagen kannst. Dann lieferten die Zimmerdaten die aktualisierten Raumdaten, und wir senden auch den kompletten Raum. Dies ist die Tab-Listener-Funktion. Binden Sie nun diese Tab-Listener-Funktion in den systemeigenen Zustand des Detecto-Boards hier in die Socket-Methoden im Status ein, den Socket-Methoden im Status ein, Und hier, entferne das kodierte Fett und schreibe es in der Anzeigeelemente Beim Textil werde ich hier die Farbe entsprechend dem Wert ändern , der hier steht, ich werde schreiben. Room hat der Anbieter die Anzeigeelemente indexiert, falls dies der Fall ist. O. Dann gib die Farben blau an. Tut mir leid. Ja, wenn ja, kannst du rot färben. Farbe. Das kann konstant sein. Okay. Speichern Sie es, speichern Sie alles. Öffnen wir es, öffnen wir die Krähe. Ich werde das Rom auch ausruhen lassen. Mal sehen, ob es funktioniert oder nicht Ich werde einen neuen Raum einrichten. Nehmen wir an, Jeff hat Bill Paste, Join reingeschrieben. Wenn ich jetzt hier klicke, ist S, X da. Wenn ich hier klicke, ist der Wert Oh da. X ist da. Der Wert O ist da. Es funktioniert zumindest in Echtzeit. Jetzt können wir unsere Fortschritte sehen und es ist ziemlich gut. Im nächsten Video werden wir mehr an den Funktionen des Boards arbeiten . Danke. 28. Spielen nach den Drehungen: Hallo. Unser Echtzeitspiel funktioniert, aber wir können das gesamte Spiel nur von einem Gerät aus spielen. Aber offensichtlich ist es ein rundenbasiertes Spiel. Ein Spieler sollte nicht in der Lage sein, zweimal auf das Spiel zu tippen und darauf zu warten, dass er an der Reihe ist. Um das zu lösen, werden wir das Absorb-Pointer-Widget verwenden. Wickeln Sie den Grid View Builder, der sich hier im T Teco-Board Wickeln Sie diesen Grid View Builder mit einem Absorb-Zeiger ein. Es ist ein Gen, das verhindert, dass sein Kind angeklickt gescrollt wird oder wie es reagiert Es ist also sehr einfach. Das ist dieser absorbierende Wert. Wenn es wahr ist, können Sie nicht klicken. Und angenommen, es ist falsch, dann können Sie klicken. Hier wird die Logik also Raumdatenanbieter sein, die Raumdaten. Dreh die Steckdose. Vergleichen wir die Socket-Socket-ID, nicht der Socket-Client-ID der Socket-Methoden entspricht. Wenn sie also nicht gleich ist, dann ist das einfach wahr, wenn die Turn-Socket-ID und die Socket-ID identisch sind. Dann sollte es falsch sein. Das heißt absorbierend sollte falsch sein , damit er darauf klicken kann. Das heißt einfach, wenn es wahr ist, dann kann es nicht klicken. Wenn falsch, dann ist es anklickbar. Das ist die Logik Du musst es entsprechend machen. Das ist es. Außerdem ist es besser. Ich werde hier einen Namen schreiben. Es ist ein zufälliger Name Copyright Join on Join. Er wird nicht zuerst an der Reihe sein. S X ist da. Wenn ich nochmal versuche hier zu klicken, dann passiert nichts. Aber wenn ich hier klicke, dann sehe ich, dass O da ist. Wenn ich erneut versuche, hier zu klicken, dann passiert nichts, aber wenn ich hier klicke , dann ist X da. Das heißt, wir können rundenweise spielen. Aber plötzlich tauchen die Werte X und X auf, was nicht sehr attraktiv aussieht. Lassen Sie uns also eine grundlegende Animation geben. Holen Sie Ihren Code-Editor heraus und Sie auf Teco Board Ja. Umhüllen Sie das Textraster mit einer animierten Größendauer gebündelte Dauer gibt Millisekunden, Millisekunden Das ist nur ein Verblassungseffekt, kann man sagen. V-Grundeffekt. Aber offensichtlich haben wir den Wert geändert, haben wir den Wert geändert bevor wir ihn getestet haben. Lassen Sie uns auch die Kurven anzeigen. Das ist, welcher Spieler an der Reihe ist, um Verwechslungen zu vermeiden. Auf dem Tito-Brett, auf dem Spielbildschirm im Spielbildschirm unter dem Ticat-Brett Einfach Raumdatenanbieter, die Raumdaten dann den Layer-Namen Ich muss das nur schreiben . Das ist es. Lassen Sie uns nun die komplette Spielfunktionalität testen. Wenn ich einen Namen erstelle dann beitrete . Das ist falsch. Hier Name Mark Ich schließe mich Rahter an. Schau, ob ich hier klicke, dann ist es Mark Stern Dann nochmal, Raster. Außerdem hier eine sehr einfache Fade-In-Animation. Und wenn Sie möchten, können Sie auch beliebige Animationen oder Effekte hinzufügen. Unser Hauptaugenmerk liegt auf der Funktionalität. Also jetzt funktioniert alles bis hier einwandfrei. In der nächsten Sitzung werden wir an der Funktionalität arbeiten, um den Gewinner der Runde zu ermitteln, denn wenn wir auch dieses Spiel beenden, dann wird natürlich wenn wir auch dieses Spiel beenden, auch nichts passieren. Wir sehen uns also im nächsten Video. Danke. 29. Überprüfe den Gewinner des Spiels: H i. Als Nächstes müssen wir den Gewinner der Runde im Spiel überprüfen , sodass die Spieler entweder erneut spielen oder das Spiel beenden können, unabhängig davon, ob es ein Unentschieden oder ein Sieg ist . Und da sich diese Funktionalität auf das Spiel bezieht und nicht auf Sockets, erstellen wir eine neue Datei innerhalb von Resources. Interne Ressourcen erzeugen eine Datei, Spielmethoden funktionieren nicht. Außerdem wird die Logik, das Spiel zu gewinnen , ziemlich lang sein, da wir alle drei aufeinanderfolgenden Noten mit demselben Wert überprüfen müssen alle drei aufeinanderfolgenden Noten mit demselben Wert überprüfen , entweder in vertikaler, horizontaler oder diagonaler Richtung. Sagen wir Klassenmethoden für Schwule. In dieser Klasse wird es nur einen einzigen funktionellen Gewinner geben. Wir werden nach dem Klingelkontext mit dem Anbieter fragen mit dem Anbieter einige Dialogfelder und den Socket anzeigen. Socket-Client. Denken Sie daran, dass dieser Socket vom Socket-IO-Client kommt, nur der Eingang vom Dart. Erstellen Sie schneller einen Raumdatenanbieter. Das wird falsch sein. Zimmerdaten pro ide. Und auch der Saitengewinner, der hier ist, hier haben wir entweder X oder, welcher mit dem Symbol Eins. Und später, mit diesem Symbol, können wir die Benutzerdetails abrufen. Lassen Sie uns nun überprüfen, ob es drei aufeinanderfolgende Raster mit demselben Wert Horizontal überprüft Seine. Ich hoffe, Sie haben es horizontal verstanden. Ich nehme an, als ob es sich um eine Zimmerpuppe handelt. Horizontal bedeutet hier also Null, Eins, Zwei, so Dies sind die drei horizontalen Richtungen. Lassen Sie uns nun an der Logik arbeiten. Wir werden alles mit der IL-Erklärung machen. I: Der ROM-Datenprovider zeigt Elemente bei Null an, entspricht dem Rom-Datenprovider, Anzeige von Elementen an einer Position und dem Rom-Datenprovider. Die Anzeigeelemente bei Null entsprechen dem Raumdatenanbieter, die Anzeigeelemente an der At-Position. Zweitens, bis hierher, ich hoffe, Sie haben verstanden , dass diese Null gleich eins ist und auch Null gleich zwei ist. Das bedeutet, dass eins natürlich auch gleich zwei ist. Aber wir müssen sicherstellen, dass der Rom-Datenprovider, bei dem die Anzeigeelemente auf Null stehen, nicht gleich einer leeren Zeichenfolge ist. Da muss ein gewisser Wert drin sein. In diesem Fall entspricht der Gewinner dem Raumdatenanbieter, dem Anzeigeelement bei Null , also x oder y, x oder Null, was auch immer es ist. Lassen Sie uns es in ähnlicher Weise hinter sich lassen. Und jetzt werden wir prüfen, ob das Element bei drei gleich dem Element bei vier ist und das Element bei drei auch gleich dem Element bei fünf ist, und schließlich das Element bei drei, nicht gleich der T-Zeichenfolge. Der Gewinner ist also gleich dem. Das ist die zweite Linie in horizontaler Richtung. Kopieren Sie es auf ähnliche Weise und fügen Sie es ein. Jetzt ist die letzte Zeile sechs gleich 76 ist gleich acht und sechs ist nicht gleich t, also Display Eleate ist sechs, also ist Display Eleate sechs, so wie hier Das war der horizontale Wert. In ähnlicher Weise werde ich alles kopieren, all diese Dinge. Staat bezahlen. Jetzt werde ich nach den drei aufeinanderfolgenden Rastern suchen den drei aufeinanderfolgenden Rastern die denselben Wert in vertikaler Richtung Hier wird es so sein, dass die Anzeigeelemente bei Null dem Anzeigeelement entsprechen Null, eins, zwei, drei. Es wird drei sein, und wieder ist Null gleich 60 ist nicht gleich 20 t. Dann mach Null daraus, der Gewinner. Dann mache ich eins eins ist null, eins, zwei, 34. Eins ist gleich vier, dann ist eins gleich sieben. Eins ist ungleich leer und der Gewinner zeigt eins an. Denken Sie daran, dass dies horizontal ist und wir drei horizontale Linien haben. Schließlich ist zwei gleich 52 ist gleich acht, dann sind die zwei gleich. Und betone es nicht. Sie erhalten den Quellcode, sodass Sie zumindest überprüfen können ob Ihr Code fehlerhaft ist. Kopieren Sie nun endlich alles, fügen Sie es erneut ein, und das gilt für die drei aufeinanderfolgenden Raster demselben Wert diagonal Ich werde hier einfach diagonal schreiben. Und ich hoffe, du kennst die Diagonale, die das ist. Zuerst horizontal, dann vertikal und schließlich diagonal Und da kann die Diagonale so und so sein. Ja. Ja, Null ist gleich 40, ist gleich acht. Das ist in Ordnung. Dann ist die nächste Zahl zwei gleich Null, zwei, 34. Zwei ist gleich sechs, dann sollte es 22 sein. Jetzt brauchen wir diesen nicht. Jetzt will nur ich meinen Zustand hier haben. Das ist SAF. Das Punktfeld des Raumdatenanbieters ist gleich neun. Das heißt, wir prüfen alle Gewinnmöglichkeiten, und dann werden wir es für unentschieden erklären. Gewinner ist gleich leer. Offensichtlich ist das Feld leer und wir werden das Wählfeld mit der Aufschrift Unentschieden anzeigen lassen. Wir werden im nächsten Video an diesem Dialogfeld arbeiten, aber ich hoffe, Sie haben diese Logik verstanden Ich weiß, dass es ziemlich groß ist, aber es ist trotzdem sehr einfach Es sind nur die FL-Aussagen, sonst nichts. Also rette dich in der nächsten Sitzung. Danke. 30. Gewinner in DialogBox anzeigen: Hallo. Lassen Sie uns nun an einem Dialogfeld arbeiten, damit wir es unabhängig vom Ergebnis in der Dialogbox anzeigen können. Erstellen Sie im Ordner Utils eine neue Datei Utils dot dot. Ich werde die Dialogfeld-Funktion hier trennen. Es wird kein Kurs sein. Es wird direkt eine Funktion sein. So weit zum Spieldialog. Kontextskizze, Text aus der Zeichenkette werden direkt in den Dialog geschrieben. Jetzt ist der Kontext da. Dann ist eine weitere Eigenschaft, die ich hinzufügen möchte, barrier dismissable to false Dann im Builder, Kontext und ich kehre zurück und melde Der Titel enthält den Text mit dem Titel mit dem Textwert. Und wir werden Aktionen haben, die Aktionen. Lass uns die Textschaltfläche haben. Lassen Sie es vorerst einfach leer und es wird wieder im Kontext abgespielt. So wie das. Gehe zur Datei mit den Spielmethoden. Hier, hier, zeigen Sie eine Spieldialogbox, eine Spieldialogbox für das Unentschieden. Okay. Und jetzt, was wenn das Spiel nicht unentschieden ist und jemand gewinnt? unten in die CheckWinner-Funktion die Logik, Schreiben Sie unten in die CheckWinner-Funktion die Logik, um zu überprüfen, ob der Gewinner gewonnen hat, dass diese Variable nicht leer ist. Lassen Sie uns hier schreiben, ob Winner nicht gleich leer ist. Und dann werden wir prüfen, ob der Anbieter Zimmer hat, Spielertyp Spieler mit einem Punkt der Gewinner ist. Mit dem Symbol können wir nun wissen, welcher der Gewinner ist. Wir werden auch das S haben. Aber lasst uns arbeiten. Wenn Spieler eins gewinnt, wird das Spieldialogfeld angezeigt. Text ist Raum, der Anbieter für den Spielernamen, der Dis-Spieler eins, Spielername, eins für die Runde. Und wir werden ein Ereignis ausstrahlen. Natürlich müssen wir es auch dem Server sagen. Socket-Client, der den Gewinner der Veranstaltung ausgibt, wird ein Gewinner sein, und die Daten werden als Gewinner-Socket-ID gespeichert. Der Spieler des Roma-Anbieters hat eine Socket-ID und auch die Raum-ID. Wir müssen diese beiden Dinge schicken. Zimmervermittler, Rota ID. Okay. Und was ist, wenn Spieler zwei gewinnt, dann alles kopieren. Vergangenheit. Hier wird es der Name von Spieler zwei sein. Gewinner und hier wird es zu zweit gespielt. Andere Dinge werden gleich bleiben. Das ist die Logik. Wenn jemand gewinnt, dann zeigen wir zuerst eine Wählbox an und senden sogar en an den Notizserver. Führen Sie nun die Checkwinner-Funktion im Tab-Listener Gehen Sie zu den Socket-Methoden, damit wir nach jedem Zug nach dem Gewinner oder der Ziehung suchen Hier. Scheck für den Gewinner ausstellen. Schreiben Sie schwule Methoden und überprüfen Sie den Gewinner. Wir schicken den Socket-Client. Okay. Ich hoffe, du hast es verstanden, denn bei jedem Tippen wird dies aufgerufen und wir werden überprüfen, ob das Spiel vorbei ist oder nicht. Lass es uns jetzt testen. Viele Dinge sind es. Nehmen wir an, alles ist in Ordnung, oder? Toll, fertig Jo, wenn ich das hier mache. Lass uns versuchen, es zu gewinnen. Ich werde versuchen, den X-Wert zu gewinnen. Und siehe, Rahul hat die Runde gewonnen. Das heißt also, dass unsere Spiellogik funktioniert. Und ich denke, es gibt ein Problem mit dem Wert. Ich werde es überprüfen. Ich werde das Ding im nächsten Video überprüfen, was hier passiert ist, okay? Ich danke dir. 31. Wiedergabe-Funktionalität: Hallo. Im letzten Video habe ich einen Fehler in der Anwendung gefunden. Lassen Sie uns Ihnen zunächst den Fehler zeigen. Wenn ich eine neue Rolle erstelle. Rahul, erstelle es, kopiere es. Ass und schreibe den zweiten Cla und mach mit. Dann nehmen wir an, in Rahuls Begriff drehe X und wenn ich zweimal darauf klicke, wird es Null Siehe hier, wenn ich hier klicke, ist es X. Wenn ich den Wert lösche, C. Das war also irgendein Problem, wenn ich mehrmals klicke Der Benutzer kann also zweimal tippen und die Symbole oder Werte sind falsch platziert Dafür habe ich also viele Änderungen vorgenommen oder auch keine kleinen Änderungen Gehen Sie zunächst zur Room-Datenanbieterklasse und fügen Sie hier in Zeile 14 einen neuen Status hinzu, der den Wert absorbiert, und lassen Sie ihn auf „Wahr“ stehen. Und ich hoffe, Sie erinnern sich an den absorbierten Zeiger. Das heißt, wenn es wahr ist, können Sie nicht darauf tippen. Wenn es falsch ist, können Sie es aufnehmen. Standardmäßig mache ich es wahr und erstelle dann eine Getter-Funktion dafür S Erstellen Sie danach eine Aktualisierungsfunktion. Das ist absorbierend und bedeutet, dass ich, nachdem der Benutzer darauf getippt hat, seinen Wert direkt auf true ändere , sodass er nicht zweimal tippen kann Und wenn der Client die Funktion „ Raumdaten aktualisieren“ erhält, das heißt, wenn Sie zur Client-Methode wechseln, ist Se update room listener“ da, der die Funktion „ Raumdaten aktualisieren“ aufruft Nach jeder Runde wird der Raum aktualisiert. Und auch am Anfang wird der Raum aktualisiert. Dann betritt der zweite Benutzer den Raum. Hier werden wir den Absorptionswert ändern. Das heißt, wer auch immer es dreht , der Absorptionswert dieser Person wird falsch sein. Und standardmäßig wird es wahr sein. Denken Sie also daran, diese Zeile in dieser Zeile zu ändern. Dann das und das. Außerdem bekommst du den Code, damit du ihn verstehst, aber ich habe auch den neuen Code-Kommentar erwähnt. Danach glaube ich nicht. Hier habe ich keine Änderungen an der Socket-Methode vorgenommen. Nein. Geh direkt zum Tacto Bode und hier Kommentieren Sie den vorherigen Code, der absorbiert, und die Schreibabsorption entspricht dem Punktabsorptionswert der Raumdaten Das ist standardmäßig so, es wird wahr sein. Und auch wenn der Benutzer darauf tippt, werden wir es zuerst überprüfen. Wenn es wahr ist Das heißt, er sollte die Funktion nicht ausführen dürfen , dann werde ich sie nur von hier aus zurückgeben. Sie wird nicht ausgeführt. Und wenn der Benutzer darauf tippt, dann direkt, setze ich update the absorption auf true, sodass er nicht zweimal klicken kann Und danach wird die Socket-Methode aufgerufen. Das ist es. Das waren die Änderungen. Ich habe einfach die Art und Weise geändert wie der absorbierende Wert funktioniert. Das ist es. Lass es uns jetzt ausprobieren. Wenn ich jetzt einen Raum erstelle, ein schlecht eingefügtes Bild und wenn ich jetzt hier klicke, sehe ich, ich habe einen Doppelklick, aber es gibt kein Problem Jetzt hier, Null ist da, O ist da. Wenn ich hier auch mehrmals klicke, dann passiert auch nichts, weil das Absorbieren erst dann erfolgt, wenn der Benutzer darauf klickt. Und hier, hier ist es. Das heißt also, dass der Fehler jetzt behoben ist. Das war ein sehr kritischer Fehler. Offensichtlich würde das Spiel mit diesem Bug keinen Sinn ergeben. Aber da wir Programmierer sind, können wir Fehler finden und lösen Die einzige nächste Änderung, die Sie vornehmen müssen ist , zu den Spielmethoden zu wechseln, und zwar hier in der Zeile 74. Achten Sie darauf, dass Sie, wenn Sie überprüfen , ob die ausgefüllten Felder gleich neun sind, Sie addieren und der Gewinner gleich leer ist. Denn früher gab es einen anderen Bug, bei dem es nur seine Form gab, nehmen wir an, so und so. Okay, ich wandere herum, aber die Sache war, wenn nur noch ein Feld übrig war und der Gewinner gewinnt, dann wurde auch Unentschieden angezeigt, weil im Code, versuche einfach, diese Logik zu verstehen Das heißt, der Gewinner gewinnt vermutlich diagonal. Aber alle Boxen waren zu neun gefüllt. Deshalb hat er den Gewinner wieder auf Leere und Zeige Reihe geändert . Aber hier überprüfen wir, ob der Gewinner gleich leer ist. Dann auf der Dialogbox von Draw. Andernfalls ändern Sie den Gewinnerwert nicht. Stellen Sie also sicher, dass Sie dies ebenfalls aktualisieren. Also das ist es. Das war alles Geld, das wir reparieren mussten. Lassen Sie uns nun daran arbeiten, was passiert, wenn wir auf die Schaltfläche „Erneut abspielen“ klicken. Das heißt, lassen Sie uns eine Funktion erstellen, die ein neues Spiel neu startet. Wenn wir erneut auf das Spiel klicken. Gehen Sie hier zur Datei mit den Spielmethoden. Danach checken Sie den Gewinner. Nach diesem Checkwinner erstellen Sie ein neues Loch-Clayboard dann den Anbieter dann entfernen wir alle Werte aus den Anzeigeelementen. Write n ist gleich Null, I kleiner als Raumdatenanbieter, do display elements len I p simp room data update display elements Der Index wird sein, und die Auswahlmöglichkeiten werden gesetzt. Und dann einfach aufrufen, den Füllfeld-Spannungswert auf Null setzen, so wie hier, und dann dieses klare Wort in der UTs-Funktion zuweisen. Gehe hier zur TS-Funktion. Schreiben Sie also die Wortkontexte der K-Methoden Gator Pop Das ist richtig. Und hier mache ich mit. Und wenn ich es gewinne und erneut auf Spielen klicke, sieh mal. Auch hier können wir Vicki Sterns so spielen. Die Play Again-Funktionalität funktioniert also einwandfrei. Im nächsten Video werden wir daran arbeiten, uns den Event-Server des Gewinners anzuhören . Danke. 32. Höre dir das Gewinner-Event an: I. In der Funktion „Gewinner prüfen senden wir ein Ereignis namens Winner aus. Wie Sie sehen können, müssen wir uns jetzt dieses Socket-Ereignis auf dem Server anhören. Gehe zum Indexieren der JS-Datei. Hier. Lassen Sie uns einen neuen Socket-Listener auf Winner A Sync erstellen einen neuen Socket-Listener auf Winner A Sync Wir erhalten die Winner-Socket-ID. Raum-ID. Versuchen wir es mit Fangen. Es wird einfach Konsole E sein. Lassen Sie uns nun die Wurzel Raum-ID. Idee für ein Zimmer. Dann schauen wir mal, wer gewonnen hat, das heißt, die Spieler finden. Wir müssen was herausfinden. Zwei. Die Punkt-Socket-ID des Spielers sollte der Socket-ID des Gewinners entsprechen. Schnapp dir den Spieler. Erhöhen Sie den Punkt. Die Punktpunkte p sind gleich Eins. R ist gleich zwei S. Wenn das Spiel nun die Anzahl der Runden erreicht , die gespielt werden können, werden wir die Punkte direkt überprüfen, d. h. Spielerpunkte, die höher sind als die Anzahl der Runden. Schreiben Sie einfach IO, zwei Raum-IDs beenden Sie das Spiel mit den Spielerdaten. Das ist richtig. Ich habe auch festgestellt, dass das einfach die Punkteerhöhung erhöht. Das ist es. Das ist der Listener im Socket, und wir werden ihn einfach noch einmal überprüfen Das finden die Spieler. Es wird nur der Wert im Player zurückgegeben. Dann warten die Startpunkte der Spieler. Ich hoffe, ihr habt verstanden, dass ich die Punkte mit dem Maxon vergleiche, da es Null, Eins, Zwei sein wird, so werden nur drei Runden da sein Das ist es. Das war's für den Gewinner-Zuhörer. Im nächsten Video werden wir uns die Ereignisse zur Punkterhöhung am Ende des Spiels im Client anhören Punkterhöhung am Ende des Spiels . Danke. 33. Höre dir EndGame-Event an: Hi, willkommen zurück. Unsere Bewerbung steht also kurz vor dem Abschluss. Hören wir uns das Ereignis zur Erhöhung der Punktezahl auf der flacheren Seite an Gehen Sie hier zu den Socket-Methoden dieser Datei. Und hier. Lassen Sie uns einen Listener mit Funktion D Point Increase schreiben einen Listener mit Funktion D Point Increase Nun, kontaktiert den Sock-Client mit Punkterhöhung Dann erhalten wir die Spielerdaten wenn Sie den Raumanbieter anrufen Nein, richtig. Wenn die Play-Data-Socket-ID den Raumdaten entspricht, tun Sie dies mit der ID. Erhöhe den Spieler um einen Punkt. Also werde ich nur den Anbieter pro Person und Spieler rotieren. Es ist ganz einfach. Ich biete Raumdaten an, um Spieler zwei mit Spielerdaten zu aktualisieren. Also ich bin einfach, wir haben bereits den Erhöhungspunkt in der Spielerdatenvariablen. Also werde ich einfach die beiden Spielerdaten damit aktualisieren. Nehmen wir an, wir ändern das und benachrichtigen die Zuhörer, sodass auch die Bildschirme aktualisiert werden So wie das. Und hören wir uns auch das Endspiel-Event an. Hier unten, rechts im Spiel, Bell Count-Client Count-Client auf Endspiel-Re-Daten. Einfach dort, wo ich das Spieldialogfeld zeige. Der Text wird auf der Datenebene abgelegt und das Spiel benannt. Und danach kannst du einfach durch den Pop-Tail navigieren. Und ich entferne alle Bildschirme. Das ist, lass es uns testen. Mal sehen, was passiert , ob es funktioniert oder nicht. Okay. S Rahul hat die Runde gewonnen Ich glaube schon, wir haben vergessen, die Zuhörer an den Spielbildschirm zu binden Das ist das Problem. Gehe zum Spielbildschirm. Im Init-Zustand. Und was ist auch Was ist das für ein Fehler? Oh, ich habe auch diesen Tippfehler gemacht. Es sollte IO sein. Das war auch da. Gehe zum Spielbildschirm. Und hier binde es, das sind Socket-Methoden, Point Increase Listener und Socket-Methode und n Game Es sollte Endgame-Listener sein. Es sieht gut genug aus. Okay. Das ist es. Wie Sie sehen können, ist unser Projekt abgeschlossen. Im nächsten Video werde ich einfach die komplette Anwendung testen. Danke. 34. Teste die vollständige Anwendung: Hallo, willkommen zum letzten Video unseres Kurses. Hier werden wir die vollständige Funktionsweise der Anwendung testen . Also lass uns einen Raum erstellen. Lassen Sie uns das erstellen, kopieren wir es. Hier drüber hinweg. Schließ dich dem Raum an. Lass es uns jetzt versuchen. Lass es uns versuchen. Wenn ich erneut auf Play klicke. Dann funktioniert der Punkt nicht. Mal sehen, was passiert ist. Ich gehe zum Index, zur Jas-Datei. Und wenn ich es auch hier aktualisiere. Der Punkt ist im Server gestiegen. Also hier bis hier funktioniert es gut. Es war ein Fehler. Ich kann sehen, dass ich viel mit go mache und ob ich zu Spielmethoden oder Socket-Methoden gehe und hier erhöhe. Okay. Das war ein Bug, den ich behoben habe. Jetzt, wenn ich wieder einen Join erstelle einen Join und sehe. Level kriegt den Punkt. Und wenn ich dafür sorge, dass das Gebet siegt, dann versteht sie es. Und wenn Lah wieder gewinnt, dann hat er gewonnen. Er gewinnt das Spiel und wir zeigen es direkt. Ich weiß, dass es keine sehr gute Erfahrung ist. Also Dialer-Box. Also hier kannst du einfach die Logik schreiben , wenn du willst. Es liegt an dir. Das ist okay. Nach dem Klicken auf die Schaltfläche sollte er wieder zum Hauptbildschirm wechseln. Auch hier sollte sich ein neues Spiel öffnen, was auch immer du willst. Aber wie Sie sehen können, hat die App perfekt funktioniert. Alle Fehler wurden behoben. Das war's also für dieses Video, oder du kannst sagen, für diesen Kurs. Ich hoffe, Sie haben viel Spaß gehabt und viel gelernt. Schauen Sie sich auch meine anderen Kurse an. Empfehlen Sie mir einige Themen auch zu welchen Konzepten ich Videos machen sollte. Das ist es. Danke. Hab einen schönen Tag und übe weiter.