/// <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>
 /// Deze method start de local multiplayer game
 /// </summary>
 /// <param name="Hoogte">Hoogte van het speelveld</param>
 /// <param name="Breedte">Breedte van het speelveld</param>
 /// <param name="Naam1">De naam van speler 1</param>
 /// <param name="Naam2">De naam van speler 2</param>
 public static void Start(int Hoogte, int Breedte, string Naam1, string Naam2)
 {
     BaseGame.Gamemode = 1;
     BaseGame.InitSpeelveld(Hoogte, Breedte);
     BaseGame.InitForm();
     BaseGame.SpelerAanBeurt = Utils.rand.Next(1, 3);
     BaseGame.Gamestate      = 1;
     BaseGame.Naam1          = Naam1;
     BaseGame.Naam2          = Naam2;
     BaseGame.FormSpeelveld.Label_Score_Speler_1.Text = Naam1 + " : ";
     BaseGame.FormSpeelveld.Label_Score_Speler_2.Text = Naam2 + " : ";
     BaseGame.Timer();
     BaseGame.Render();
 }
        /// <summary>
        /// zet alle variabelen in de game. draait omgedraaide kaarten om en revert niet gelijke kaarten als die geload zijn.
        /// </summary>
        private static void Initiate()
        {
            //laad alle variabelen
            BaseGame.Gamemode             = Convert.ToInt32(Loaddata[0]);
            BaseGame.Gamestate            = Convert.ToInt32(Loaddata[1]);
            BaseGame.Speelveld_types      = Utils.StringToArray(Loaddata[2]) as int[, ];
            BaseGame.Speelveld_omgedraaid = Utils.StringToArray(Loaddata[3]) as bool[, ];
            BaseGame.Height         = Convert.ToInt32(Loaddata[4]);
            BaseGame.Width          = Convert.ToInt32(Loaddata[5]);
            BaseGame.Zetten1        = Convert.ToInt32(Loaddata[6]);
            BaseGame.Zetten2        = Convert.ToInt32(Loaddata[7]);
            BaseGame.Score1         = Convert.ToInt32(Loaddata[8]);
            BaseGame.Score2         = Convert.ToInt32(Loaddata[9]);
            BaseGame.Kaart1x        = Convert.ToInt32(Loaddata[10]);
            BaseGame.Kaart1y        = Convert.ToInt32(Loaddata[11]);
            BaseGame.Kaart2x        = Convert.ToInt32(Loaddata[12]);
            BaseGame.Kaart2y        = Convert.ToInt32(Loaddata[13]);
            BaseGame.Kaartcounter   = Convert.ToInt32(Loaddata[14]);
            BaseGame.Naam1          = Convert.ToString(Loaddata[15]);
            BaseGame.Naam2          = Convert.ToString(Loaddata[16]);
            BaseGame.SpelerAanBeurt = Convert.ToInt32(Loaddata[17]);
            BaseGame.Tijdbeurt      = Convert.ToInt32(Loaddata[18]);
            BaseGame.Tijdtotaal     = Convert.ToInt32(Loaddata[19]);
            BaseGame.Terugdraai     = Convert.ToBoolean(Loaddata[20]);

            BaseGame.Render(); // rendered opgegeven waarden

            //draait omgedraaide kaarten om
            for (int h = 0; h < BaseGame.Height; h++)
            {
                for (int w = 0; w < BaseGame.Width; w++)
                {
                    BaseGame.ZetOmgedraaid(w, h, BaseGame.Speelveld_omgedraaid[w, h]);
                }
            }

            //draait 2 ongelijke kaarten terug als die geload zijn.
            try
            {
                if (BaseGame.Speelveld_types[BaseGame.Kaart1x, BaseGame.Kaart1y] != BaseGame.Speelveld_types[BaseGame.Kaart2x, BaseGame.Kaart2y])
                {
                    BaseGame.DraaiKaartenTerug();
                }
            }
            catch { }
        }
 public static void Start(int Hoogte, int Breedte, string Naam)
 {
     BaseGame.Gamemode = 0;
     BaseGame.InitSpeelveld(Hoogte, Breedte);
     BaseGame.InitForm();
     BaseGame.FormSpeelveld.Label_Score_Speler_2.Visible    = false;
     BaseGame.FormSpeelveld.Label_Score_Speler_2.Visible    = false;
     BaseGame.FormSpeelveld.Label_Zetten_Speler_2.Visible   = false;
     BaseGame.FormSpeelveld.Label_Zetten_Speler_2.Visible   = false;
     BaseGame.FormSpeelveld.Textbox_Score_Speler_2.Visible  = false;
     BaseGame.FormSpeelveld.Textbox_Zetten_Speler_2.Visible = false;
     BaseGame.FormSpeelveld.Label_Beurt.Visible             = false;
     BaseGame.SpelerAanBeurt = 1;
     BaseGame.Gamestate      = 1;
     BaseGame.Naam1          = Naam;
     BaseGame.FormSpeelveld.Label_Score_Speler_1.Text = Naam + " : ";
     BaseGame.Timer();
     BaseGame.Render();
 }