コード例 #1
0
        /// <summary>
        /// Deze method start de online multiplayer game. de host krijgt eerst de naam van de client speler met het join packet, vervolgens antwoord de host met zijn naam en met de inhoud van he speelveld met het join2 packet.
        /// dan word het speelveld geopend.
        ///
        /// <param name="Hoogte">Hoogte van het speelveld</param>
        /// <param name="Breedte">Breedte van het speelveld</param>
        /// <param name="Naam">De naam van de speler. Dit kan de client of de host zijn</param>
        /// <param name="host">Bepaald of de speler de client of de host is</param>
        public static async void Start(int Hoogte, int Breedte, string Naam, bool host)
        {
            Host = host;
            BaseGame.Gamemode = 2;

            //Join packet
            if (!host)     //client side
            //CLIENT stuurt join
            {
                BaseGame.Naam2 = Naam;
                object[] join = new object[2];
                join[0] = "join"; //Packet
                join[1] = Naam;   //Naam
                NetClient.SendMessage(Utils.ArrayToString(join));

                //CLIENT krijgt join2
                object[] join2 = Utils.StringToArray(NetClient.ReceiveMessage()) as object[];
                BaseGame.Naam1 = (string)join2[1];
                BaseGame.InitSpeelveld((int)join2[2], (int)join2[3]);
                BaseGame.Speelveld_types = Utils.StringToArray((string)join2[4]) as int[, ];
                BaseGame.SpelerAanBeurt  = (int)join2[5];
            }
            else      //host side
            //Init
            {
                BaseGame.SpelerAanBeurt = Utils.rand.Next(1, 3);
                BaseGame.InitSpeelveld(Hoogte, Breedte);

                //HOST krijgt join
                BaseGame.Naam1 = Naam;
                object[] join = Utils.StringToArray(NetServer.ReceiveMessage()) as object[];
                BaseGame.Naam2 = (string)join[1];

                //HOST stuurt join2
                object[] join2 = new object[6];
                join2[0] = "join2"; //Packet
                join2[1] = Naam;    //Naam
                join2[2] = Hoogte;
                join2[3] = Breedte;
                join2[4] = Utils.ArrayToString(BaseGame.Speelveld_types);
                join2[5] = BaseGame.SpelerAanBeurt;
                NetServer.SendMessage(Utils.ArrayToString(join2));
            }

            BaseGame.InitForm();
            BaseGame.FormSpeelveld.PictureBox_Opslaan_En_Exit.Hide();
            BaseGame.FormSpeelveld.PictureBox_Reset.Hide();
            BaseGame.FormSpeelveld.restartToolStripMenuItem.HideDropDown();
            BaseGame.FormSpeelveld.Label_Timer.Hide();
            BaseGame.FormSpeelveld.Label_Timer.Hide();

            BaseGame.Gamestate = 1;
            BaseGame.FormSpeelveld.Label_Score_Speler_1.Text = BaseGame.Naam1 + " : ";
            BaseGame.FormSpeelveld.Label_Score_Speler_2.Text = BaseGame.Naam2 + " : ";
            //BaseGame.Timer();
            BaseGame.Render();

            KlaarVoorVolgendeKlikkaart();
        }
コード例 #2
0
        /// <summary>
        /// Wacht op een klikkaart packet van de andere speler
        /// Als die gekregen is voert hij de logica uit die nodig is
        /// </summary>
        public static void KlaarVoorVolgendeKlikkaart()
        {
            //Als deze speler niet aan de beurt is
            if ((Host ? 1 : 2) != BaseGame.SpelerAanBeurt)    // ((Host ? 1 : 2) als de host true is dan 1 zo niet dan 2
            //Wacht op klik kaart packets van andere kant
            {
                BackgroundWorker b = new BackgroundWorker();

                //Wordt op tweede thread gerunned
                b.DoWork += delegate(object o, DoWorkEventArgs args) {   //doe dit op achtergrond  (delegate is mini method in method)
                    BackgroundWorker bw = o as BackgroundWorker;
                    object[]         packet;
                    if (Host)
                    {
                        packet = Utils.StringToArray(NetServer.ReceiveMessage()) as object[];
                    }
                    else
                    {
                        packet = Utils.StringToArray(NetClient.ReceiveMessage()) as object[];
                    }
                    args.Result = packet;
                };

                //Als er een bericht is binnen gekomen
                b.RunWorkerCompleted += delegate(object o, RunWorkerCompletedEventArgs args) {  //achtergrond shit is klaar
                    object[] packet = (object[])args.Result;
                    //Is het een klik kaart, of een volgende beurt packet?
                    if (((string)packet[0]) == "klikkaart")
                    {
                        //Update speelveld
                        BaseGame.KaartKlik((int)packet[1], (int)packet[2], false);
                    }
                    else if (((string)packet[0]) == "volgendebeurt")
                    {
                        //Zet speler aan beurt goed
                        BaseGame.SpelerAanBeurt = (int)packet[1];
                    }

                    //Klaar voor volgende beurt
                    if (BaseGame.Gamestate == 1)
                    {
                        KlaarVoorVolgendeKlikkaart();
                    }
                };
                b.RunWorkerAsync();
            }
        }