/// <summary>
        /// wordt gecalled als er iemand op een kaart klikt
        /// </summary>
        /// <param name="x">De x van de kaart</param>
        /// <param name="y">De y van de kaart</param>
        /// <returns>True als de logica in basegame niet door moet gaan, anders false</returns>
        public static bool KlikKaart(int x, int y)
        {
            //Als de speler niet aan de beurt is, return true
            if ((Host ? 1 : 2) != BaseGame.SpelerAanBeurt)
            {
                return(true);
            }

            //Maak packet
            object[] klikkaart = new object[3];
            klikkaart[0] = "klikkaart";
            klikkaart[1] = x;
            klikkaart[2] = y;

            //Stuur packet
            if (Host)
            {
                NetServer.SendMessage(Utils.ArrayToString(klikkaart));
            }
            else
            {
                NetClient.SendMessage(Utils.ArrayToString(klikkaart));
            }
            return(false);
        }
        /// <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();
        }
 /// <summary>
 /// Stuurt een reset packet van de host naar die client
 /// </summary>
 public static void Reset2()
 {
     if (Host)
     {
         object[] reset = new object[1];
         reset[0] = "reset";
         NetServer.SendMessage(Utils.ArrayToString(reset));
         Start(BaseGame.Height, BaseGame.Width, BaseGame.Naam1, true);
     }
 }
        /// <summary>
        /// deze methode wisselt de beurt van de spelers als 2 getrokken kaarten niet gelijk aan elkaar zijn.
        /// de client of de host sturen het volgendebeurt packet (hangt er van af wie aan de beurt was) de ander luistert.
        ///
        /// </summary>
        public static void VolgendeBeurt()
        {
            //Als de kaarten niet gelijk zijn is volgende aan beurt
            if (BaseGame.Speelveld_types[BaseGame.Kaart1x, BaseGame.Kaart1y] != BaseGame.Speelveld_types[BaseGame.Kaart2x, BaseGame.Kaart2y])
            {
                //Coole syntax om speler aan beurt te switchen tussen 1 en 2
                BaseGame.SpelerAanBeurt = BaseGame.SpelerAanBeurt == 1 ? 2 : 1;  //1 ? 2 : 1 als het 1 is word het 2, als het 2 is word het 1.
            }

            //Stuur volgendebeurt packet
            object[] volgendebeurt = new object[2];
            volgendebeurt[0] = "volgendebeurt";
            volgendebeurt[1] = BaseGame.SpelerAanBeurt;
            if (Host)
            {
                NetServer.SendMessage(Utils.ArrayToString(volgendebeurt));
            }
            else
            {
                NetClient.SendMessage(Utils.ArrayToString(volgendebeurt));
            }
        }