Esempio n. 1
0
 public BattleShipGrid()
 {
     InitializeComponent();
     EtatGrille = GridState.None;
     OCurrentShip = PosShips.Orientation.Horizontale;
     PositionBateau = new PosShips();
 }
Esempio n. 2
0
 /// <summary>
 /// Dessine un bateau individuellement
 /// </summary>
 /// <param name="img">l'image du bateau</param>
 /// <param name="location">la position du bateau</param>
 /// <param name="orientation">l'orientation du bateau</param>
 /// <param name="ShipSize">la taille du bateau</param>
 private void DrawSingleShip(Image img, Point location, PosShips.Orientation orientation, int ShipSize)
 {
     if (orientation == PosShips.Orientation.Verticale)
     {
         Image carry = (Image)img.Clone();
         carry.RotateFlip(RotateFlipType.Rotate90FlipNone);
         DrawImage(carry, location.X * GridRectWidth, location.Y * GridRectHeight, 1 * GridRectWidth, ShipSize * GridRectHeight);
     }
     else
     {
         DrawImage(img, location.X * GridRectWidth, location.Y * GridRectHeight, ShipSize * GridRectWidth, 1 * GridRectHeight);
     }
 }
Esempio n. 3
0
 /// <summary>
 /// Retourne si le tir à couler le bateau
 /// </summary>
 /// <param name="Hit">Position du tir</param>
 /// <param name="location">Position du bateau</param>
 /// <param name="orient">Orientation du bateau</param>
 /// <param name="longueur">longueur du bateau</param>
 /// <returns>Si le bateau est toucher couler</returns>
 private bool ToucherCouler(Point Hit, Point location, PosShips.Orientation orient, int longueur)
 {
     if (orient == PosShips.Orientation.Horizontale)
     {
         if (Hit.X >= location.X && Hit.X <= location.X + longueur-1 && Hit.Y == location.Y)
             return true;
         else
             return false;
     }
     else
     {
         if (Hit.Y >= location.Y && Hit.Y <= location.Y + longueur-1 && Hit.X == location.X)
             return true;
         else
             return false;
     }
 }
Esempio n. 4
0
 /// <summary>
 /// Retourne l'état du Hit selon la Hitlist et la grille adverse
 /// </summary>
 /// <param name="Hitlist">Liste de tir sur l'adversaire</param>
 /// <param name="GrilleAdverse">Grille de position adverse</param>
 /// <returns>État du tir</returns>
 private Hit.HitState ProcessHit(List<Hit> Hitlist, PosShips GrilleAdverse)
 {
     //Porte Avion
     if (containsHit(Hitlist.Last().Location, GrilleAdverse.PPorteAvion, GrilleAdverse.OPorteAvion, 5))
     {
         if (Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PPorteAvion, GrilleAdverse.OPorteAvion, 5)) == 5)
         {
             return Hit.HitState.CoulerPorteAvion;
         }
         else
             return Hit.HitState.Hit;
     }
     //Croiseur
     else if (containsHit(Hitlist.Last().Location, GrilleAdverse.PCroiseur, GrilleAdverse.OCroiseur, 4))
     {
         if (Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PCroiseur, GrilleAdverse.OCroiseur, 4)) == 4)
         {
             return Hit.HitState.CoulerCroiseur;
         }
         else
             return Hit.HitState.Hit;
     }
     //Contre Torpilleur
     else if (containsHit(Hitlist.Last().Location, GrilleAdverse.PContreTorpilleur, GrilleAdverse.OContreTorpilleur, 3))
     {
         if (Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PContreTorpilleur, GrilleAdverse.OContreTorpilleur, 3)) == 3)
         {
             return Hit.HitState.CoulerContreTorpilleur;
         }
         else
             return Hit.HitState.Hit;
     }
     //Sous Marin
     else if (containsHit(Hitlist.Last().Location, GrilleAdverse.PSousMarin, GrilleAdverse.OSousMarin, 3))
     {
         if (Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PSousMarin, GrilleAdverse.OSousMarin, 3)) == 3)
         {
             return Hit.HitState.CoulerSousMarin;
         }
         else
             return Hit.HitState.Hit;
     }
     //Torpilleur
     else if (containsHit(Hitlist.Last().Location, GrilleAdverse.PTorpilleur, GrilleAdverse.OTorpilleur, 2))
     {
         if (Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PTorpilleur, GrilleAdverse.OTorpilleur, 2)) == 2)
         {
             return Hit.HitState.CoulerTorpilleur;
         }
         else
             return Hit.HitState.Hit;
     }
     else
     {
         return Hit.HitState.Flop;
     }
 }
Esempio n. 5
0
 /// <summary>
 /// Si le joueur à gagner 
 /// </summary>
 /// <param name="Hitlist">Liste de tir sur l'ADVERSAIRE</param>
 /// <param name="GrilleAdverse">Grille de l'adversaire</param>
 /// <returns>à Gagner</returns>
 private bool aGagner(List<Hit> Hitlist, PosShips GrilleAdverse)
 {
     //Vérifie si chaque bateau à été couler
     return Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PPorteAvion, GrilleAdverse.OPorteAvion, 5)) == 5 &&
         Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PCroiseur, GrilleAdverse.OCroiseur, 4)) == 4 &&
         Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PContreTorpilleur, GrilleAdverse.OContreTorpilleur, 3)) == 3 &&
         Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PSousMarin, GrilleAdverse.OSousMarin, 3)) == 3 &&
         Hitlist.Count(touche => containsHit(touche.Location, GrilleAdverse.PTorpilleur, GrilleAdverse.OTorpilleur, 2)) == 2;
 }
Esempio n. 6
0
        /// <summary>
        /// Attente de la comfirmation du serveur pour savoir si le Hit
        /// est un Flop ou un Touché
        /// </summary>
        /// <param name="AjoutHit"></param>
        private void waitHitConfirm(func AjoutHit)
        {
            object carry = null;
            try
            {
                carry = CommUtility.ReadAndDeserialize(serveur.GetStream());
                AjoutHit((Hit)carry);

                Lock.WaitOne();
                Thread.Sleep(300);
                State = GameState.WaitingTurn;
                Lock.ReleaseMutex();
                UpdateAction();

            }
            catch(Exception e)
            {
                try
                {
                    if (carry != null)
                    {
                        Result result = (Result)carry;
                        if(result.Etat == Result.ResultState.Victory)//Si la réponse est Victoire
                        {
                            if (result.Touche != null && result.Touche.Etat != Hit.HitState.NoAction)
                                AjoutHit(result.Touche);
                            Lock.WaitOne();
                            State = GameState.Victory;
                            EnemyShips = result.EnemyShips;
                            Lock.ReleaseMutex();
                            UpdateAction();

                        }
                        else//Si la réponse est Perdage
                        {
                            if (result.Touche != null && result.Touche.Etat != Hit.HitState.NoAction)
                                AjoutHit(result.Touche);
                            Lock.WaitOne();
                            State = GameState.Lose;
                            EnemyShips = result.EnemyShips;
                            Lock.ReleaseMutex();
                            UpdateAction();
                        }
                    }
                    else
                        throw;

                }
                catch (Exception)
                {
                    Lock.WaitOne();
                    State = GameState.ServerDC;
                    Lock.ReleaseMutex();
                    UpdateAction();
                }
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Attend son tour en Thread pour continuer a jouer
        /// </summary>
        public void WaitingTurn()
        {
            object data = null;
            try //Essai de convertir l'objet recu en Hit
            {
                serveur.ReceiveTimeout = 90000;
                data = CommUtility.ReadAndDeserialize(serveur.GetStream());
                Hit hit = (Hit)data;
                if (hit.Etat != Hit.HitState.NoAction)
                    AddHitSelf(hit);

                Lock.WaitOne();
                State = GameState.PlayingTurn;
                Lock.ReleaseMutex();
                UpdateAction();
            }
            catch (Exception ex)
            {
                try //Si pas convertable en Hit, essai de convertir en result
                {
                    Result result = (Result)data;
                    if (result.Etat == Result.ResultState.Lose)//si le résultat est "Lose"
                    {
                        if (result.Touche != null && result.Touche.Etat!=Hit.HitState.NoAction)
                            AddHitSelf(result.Touche);
                        Lock.WaitOne();
                        State = GameState.Lose;
                        EnemyShips = result.EnemyShips;
                        Lock.ReleaseMutex();

                    }
                    else//si le résultat est "WIN"
                    {
                        if (result.Touche != null && result.Touche.Etat != Hit.HitState.NoAction)
                            AddHitSelf(result.Touche);
                        Lock.WaitOne();
                        State = GameState.Victory;
                        EnemyShips = result.EnemyShips;
                        Lock.ReleaseMutex();
                    }
                    UpdateAction();
                }
                catch (Exception es)//Si non convertable, on lance une érreur
                {
                    Lock.WaitOne();
                    State = GameState.ServerDC;
                    Lock.ReleaseMutex();
                    UpdateAction();
                }
            }
        }
Esempio n. 8
0
 /// <summary>
 /// Envoie La grille de bateaux au servers
 /// </summary>
 /// <param name="grilleBeto"></param>
 public void EnvoiBateau(PosShips grilleBeto)
 {
     CommUtility.SerializeAndSend(serveur.GetStream(), grilleBeto);
     Lock.WaitOne();
     State = Jeu.GameState.WaitingTurn;
     Lock.ReleaseMutex();
     UpdateAction();
 }