// Reçoit le message d'ordre de passage private void RecevoirOrdre() { string reponse; byte[] buffer = new byte[socket.SendBufferSize]; int byteLecture = socket.Receive(buffer); byte[] byteFormatter = new byte[byteLecture]; for (int i = 0; i < byteLecture; ++i) { byteFormatter[i] = buffer[i]; } reponse = Encoding.ASCII.GetString(byteFormatter); string[] tabreponse = reponse.Split(' '); if (tabreponse[0] == "1") { if (LB_Demarrer.InvokeRequired)//pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act = () => LB_Demarrer.Text = ("Vous êtes premier et votre adversaire est: " + tabreponse[1].ToString()); LB_Demarrer.Invoke(act); Action act2 = () => BTN_Attaquer.Enabled = true; BTN_Attaquer.Invoke(act2); } else { LB_Demarrer.Text = ("Vous êtes premier et votre adversaire est: " + tabreponse[1].ToString()); BTN_Attaquer.Enabled = true; } _monTour = true; } else if (tabreponse[0] == "2") { if (LB_Demarrer.InvokeRequired)//pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act = () => LB_Demarrer.Text = ("Vous êtes deuxième et votre adversaire est: " + tabreponse[1].ToString()); LB_Demarrer.Invoke(act); Action act2 = () => BTN_Attaquer.Enabled = false; BTN_Attaquer.Invoke(act2); _monTour = false; } else { LB_Demarrer.Text = ("Vous êtes deuxième et votre adversaire est: " + tabreponse[1].ToString()); BTN_Attaquer.Enabled = false; _monTour = false; } } else { if (LB_Demarrer.InvokeRequired)//pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act = () => LB_Demarrer.Text = (tabreponse[0].ToString()); LB_Demarrer.Invoke(act); Action act1 = () => LB_Demarrer.ForeColor = Color.Red; LB_Demarrer.Invoke(act1); Action act2 = () => BTN_Attaquer.Enabled = false; BTN_Attaquer.Invoke(act2); _monTour = false; } else { LB_Demarrer.Text = (tabreponse[0].ToString()); LB_Demarrer.ForeColor = Color.Red; BTN_Attaquer.Enabled = false; _monTour = false; } } if (BTN_Demarrer.InvokeRequired)//pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act3 = () => BTN_Demarrer.Enabled = true; BTN_Demarrer.Invoke(act3); } else { BTN_Demarrer.Enabled = true; } }
//Reçoit le résultat de son coup private void RecevoirReponse() { DataGridViewCellStyle toucheStyle = new DataGridViewCellStyle(); toucheStyle.BackColor = Color.Red; toucheStyle.ForeColor = Color.Red; DataGridViewCellStyle manqueStyle = new DataGridViewCellStyle(); manqueStyle.BackColor = Color.Blue; manqueStyle.ForeColor = Color.Blue; DialogResult dialogResult; string reponse; byte[] buffer = new byte[socket.SendBufferSize]; int byteLecture = socket.Receive(buffer); byte[] byteFormatter = new byte[byteLecture]; for (int i = 0; i < byteLecture; ++i) { byteFormatter[i] = buffer[i]; } reponse = Encoding.ASCII.GetString(byteFormatter); string[] tabreponse = reponse.Split(' '); //Si le coup touche un bateau if (tabreponse[0] == "True") { if (_monTour) { if (LB_MsgAttaque.InvokeRequired)//pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act1 = () => LB_MsgAttaque.Text = "Touché!"; LB_MsgAttaque.Invoke(act1); Action act2 = () => LB_MsgAttaque.ForeColor = Color.Green; LB_MsgAttaque.Invoke(act2); Action act3 = () => DGV_Attaque.Rows[Int32.Parse(tabreponse[2])].Cells[Int32.Parse(tabreponse[1])].Style = toucheStyle; DGV_Attaque.Invoke(act3); } else { LB_MsgAttaque.Text = "Touché!"; LB_MsgAttaque.ForeColor = Color.Green; DGV_Attaque.Rows[Int32.Parse(tabreponse[2])].Cells[Int32.Parse(tabreponse[1])].Style = toucheStyle; } } else { if (LB_MsgAttaque.InvokeRequired)//pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act1 = () => LB_MsgAttaque.Text = "Touché!"; LB_MsgAttaque.Invoke(act1); Action act2 = () => LB_MsgAttaque.ForeColor = Color.Red; LB_MsgAttaque.Invoke(act2); Action act3 = () => DGV_Perso.Rows[Int32.Parse(tabreponse[2])].Cells[Int32.Parse(tabreponse[1])].Style = toucheStyle; DGV_Perso.Invoke(act3); } else { LB_MsgAttaque.Text = "Touché!"; LB_MsgAttaque.ForeColor = Color.Red; DGV_Perso.Rows[Int32.Parse(tabreponse[2])].Cells[Int32.Parse(tabreponse[1])].Style = toucheStyle; } } if (tabreponse.Length > 3) //si tabreponse[3] existe, il contient le bateau coulé { if (LB_MsgAttaque.InvokeRequired) //pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act1 = () => LB_MsgAttaque.Text = tabreponse[3] + " coulé!"; LB_MsgAttaque.Invoke(act1); } else { LB_MsgAttaque.Text = tabreponse[3] + " coulé!"; } if (tabreponse.Length > 4)//si tabreponse[4] existe, quelqu'un à gagné, le match est fini { if (tabreponse[4] == "1") { dialogResult = MessageBox.Show("Vous avez gagné \n Play Again ?", "Fini", MessageBoxButtons.YesNo); } else { dialogResult = MessageBox.Show("Vous avez perdu \n Play Again ?", "Fini", MessageBoxButtons.YesNo); } if (dialogResult == DialogResult.Yes) { envoyerMessageNouvellePartie("NouvellePartie"); System.Diagnostics.Process.Start(Application.ExecutablePath); // to start new instance of application if (this.InvokeRequired) { Action act = () => this.Dispose(); this.Invoke(act); //to turn off current app } else { Dispose(); } } else if (dialogResult == DialogResult.No) { envoyerMessageNouvellePartie("Non"); if (this.InvokeRequired) { Action act = () => this.Dispose(); this.Invoke(act); //to turn off current app } else { Dispose(); } } } } } else { if (_monTour) { if (LB_MsgAttaque.InvokeRequired)//pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act1 = () => LB_MsgAttaque.Text = "Manqué!"; LB_MsgAttaque.Invoke(act1); Action act2 = () => LB_MsgAttaque.ForeColor = Color.Red; LB_MsgAttaque.Invoke(act2); Action act3 = () => DGV_Attaque.Rows[Int32.Parse(tabreponse[2])].Cells[Int32.Parse(tabreponse[1])].Style = manqueStyle; DGV_Attaque.Invoke(act3); } else { LB_MsgAttaque.Text = "Manqué!"; LB_MsgAttaque.ForeColor = Color.Red; DGV_Attaque.Rows[Int32.Parse(tabreponse[2])].Cells[Int32.Parse(tabreponse[1])].Style = manqueStyle; } } else { if (LB_MsgAttaque.InvokeRequired)//pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act1 = () => LB_MsgAttaque.Text = "Manqué!"; LB_MsgAttaque.Invoke(act1); Action act2 = () => LB_MsgAttaque.ForeColor = Color.Green; LB_MsgAttaque.Invoke(act2); Action act3 = () => DGV_Perso.Rows[Int32.Parse(tabreponse[2])].Cells[Int32.Parse(tabreponse[1])].Style = manqueStyle; DGV_Perso.Invoke(act3); } else { LB_MsgAttaque.Text = "Manqué!"; LB_MsgAttaque.ForeColor = Color.Green; DGV_Perso.Rows[Int32.Parse(tabreponse[2])].Cells[Int32.Parse(tabreponse[1])].Style = manqueStyle; } } } if (BTN_Attaquer.InvokeRequired)//pour exécuter un délégué qui met à jour le thread d'interface utilisateur { Action act1 = () => BTN_Attaquer.Enabled = !BTN_Attaquer.Enabled; BTN_Attaquer.Invoke(act1); Action act2 = () => DGV_Attaque.Refresh(); DGV_Attaque.Invoke(act2); Action act3 = () => this.Refresh(); this.Invoke(act3); } else { BTN_Attaquer.Enabled = !BTN_Attaquer.Enabled; DGV_Attaque.Refresh(); this.Refresh(); } _monTour = !_monTour; if (!_monTour) { RecevoirReponse(); } }