/// <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(); } }
/// <summary> /// load het dynamisch speelveld met de opgegeven grootte. afhankelijk van hoeveel kaarten moeten afgebeeld worden, worden de picture boxes groter gemaakt. /// ook de settings van de pictureboxes worden hier geset. /// </summary> public FormSpeelveld() { double yTussenruimte = 10; double xTussenruimte = 60; double xSizeTemp = 150; double ySizeTemp = 225; InitializeComponent(); PictureBox[,] Kaart = new PictureBox[BaseGame.Width, BaseGame.Height]; if (BaseGame.Width == 2 && BaseGame.Height == 2) //speelveld 2x2 vergroot de kaarten met factor 2 { xSizeTemp *= 2; ySizeTemp *= 2; } else if (BaseGame.Width == 3 && BaseGame.Height == 2) //speelveld 2x3 vergroot de kaarten met 1.5 { xSizeTemp *= 1.5; ySizeTemp *= 1.5; } else if (BaseGame.Width == 4 && BaseGame.Height == 2) //speelveld 2x4 vergroot de kaarten met 1.15 { yTussenruimte = 10; xSizeTemp *= 1.15; ySizeTemp *= 1.15; } else if (BaseGame.Width == 4 && BaseGame.Height == 3) //speelveld 3x4 vergroot de kaarten met 1.15 { yTussenruimte = 10; xSizeTemp *= 1.15; ySizeTemp *= 1.15; } else if (BaseGame.Width == 4 && BaseGame.Height == 4) //speelveld 4x4 geen vergroting { yTussenruimte = 10; xSizeTemp *= 1; ySizeTemp *= 1; } int yLocation = 25; for (int y = 0; y < BaseGame.Height; y++) //voert alle kaarten in met goede tussenruimtes en juiste locatie { int xLocation = 366; //begin locatie for (int x = 0; x < BaseGame.Width; x++) { string Kaartnaam = "Kaart" + x + "" + y; //juiste naam geven Kaart[x, y] = new PictureBox(); //maakt nieuwe picturebox Kaart[x, y].Name = Kaartnaam; Kaart[x, y].Size = new Size(Convert.ToInt32(xSizeTemp), Convert.ToInt32(ySizeTemp)); //juiste size per speelveld Kaart[x, y].Image = (Bitmap)Properties.Resources.ResourceManager.GetObject(ManagerThema.Themaprefix + "Voorkant"); Kaart[x, y].BackgroundImageLayout = ImageLayout.Stretch; Kaart[x, y].BackColor = Color.Transparent; Kaart[x, y].Visible = true; Kaart[x, y].Anchor = AnchorStyles.Left; Kaart[x, y].SizeMode = PictureBoxSizeMode.Zoom; Kaart[x, y].Location = new Point(xLocation, yLocation); //nieuwe locatie Kaart[x, y].BringToFront(); string eventnaam = Kaartnaam + "_Click"; int x2 = x; int y2 = y; Kaart[x, y].Click += new EventHandler((sender, e) => { BaseGame.KaartKlik(x2, y2); }); this.Controls.Add(Kaart[x, y]); xLocation += Convert.ToInt32(xSizeTemp) + Convert.ToInt32(xTussenruimte); //nieuw x coördinaat } yLocation += Convert.ToInt32(ySizeTemp) + Convert.ToInt32(yTussenruimte); //nieuw y coördinaat } }