Esempio n. 1
0
        public int distance(Coordonnee coords)
        {
            int newX = Math.Abs(coords.X - X);
            int newY = Math.Abs(coords.Y - Y);

            return newX + newY;
        }
Esempio n. 2
0
 public bool bordEau(Coordonnee coords)
 {
     return ((coords.getX() > 1 && getCase(coords.decaler(-1, 0)).getTypeCase() == TypeCases.EAU) ||
     (coords.getY() > 1 && getCase(coords.decaler(0, -1)).getTypeCase() == TypeCases.EAU) ||
     (coords.getX() < taille && getCase(coords.decaler(1, 0)).getTypeCase() == TypeCases.EAU) ||
     (coords.getY() < taille && getCase(coords.decaler(0, 1)).getTypeCase() == TypeCases.EAU));
 }
Esempio n. 3
0
        public void TestDeplacementNain()
        {
            Coordonnee destination;

            f = new FabriqueNain();
            c = new Coordonnee(1, 2); //Desert
            // - Vers case basique
            destination = new Coordonnee(1, 1); //Montagne
            u = f.fabriquerUnite(c);
            u.deplacement(destination);
            Assert.AreEqual(u.mouvement, 0);
            Assert.IsTrue(u.coordonnees.Equals(destination));
            // - Vers case eau
            destination = new Coordonnee(1, 3); //Eau
            u = f.fabriquerUnite(c);
            u.deplacement(destination);
            Assert.AreEqual(u.mouvement, 1);
            Assert.IsTrue(u.coordonnees.Equals(c));
            // - Montagne -> Montagne
            c = new Coordonnee(1, 1); //Montagne
            destination = new Coordonnee(3, 3); //Montagne
            u = f.fabriquerUnite(c);
            u.deplacement(destination);
            Assert.AreEqual(u.mouvement, 0);
            Assert.IsTrue(u.coordonnees.Equals(destination));
        }
Esempio n. 4
0
        public override bool deplacementPossible(Coordonnee coords)
        {
            if (this.coordonnees.Equals(coords))
                return false;

            int distance = coordonnees.distance(coords);
            if (distance > 1) return false;
            return (mouvement >= 1);
        }
Esempio n. 5
0
        public override resultatCombat deplacement(Coordonnee coords)
        {
            if (!deplacementPossible(coords)) return resultatCombat.DEPLACEMENT_IMPOSSIBLE;

            resultatCombat retour = verifUniteCase(coords);

            mouvement -= 1.0;
            makeResultatCombat(retour, coords);

            return retour;
        }
Esempio n. 6
0
        public Unite(Coordonnee coords)
        {
            coordonnees = new Coordonnee();
            logDernierCombat = new Log();

            attaque = ATTAQUE_MAX;
            defense = DEFENSE_MAX;
            vie = VIE_MAX;
            mouvement = MOUVEMENT_MAX;

            coordonnees.clone(coords);
        }
Esempio n. 7
0
        public override bool deplacementPossible(Coordonnee coords)
        {
            if (this.coordonnees.Equals(coords))
                return false;

            Case c = SmallWorld.Instance.carte.getCase(coords);
            int distance = coordonnees.distance(coords);
            if (distance > 1 || c.getTypeCase() == TypeCases.EAU) return false;

            if (c.getTypeCase() == TypeCases.PLAINE && mouvement >= 0.5) return true;

            return (mouvement >= 1);
        }
Esempio n. 8
0
        public override resultatCombat deplacement(Coordonnee coords)
        {
            if (!deplacementPossible(coords)) return resultatCombat.DEPLACEMENT_IMPOSSIBLE;

            resultatCombat retour = verifUniteCase(coords);

            Case c = SmallWorld.Instance.carte.getCase(coords);
            if (c.getTypeCase() == TypeCases.PLAINE) mouvement -= 0.5;
            else mouvement -= 1.0;
            makeResultatCombat(retour, coords);

            return retour;
        }
Esempio n. 9
0
        public override bool deplacementPossible(Coordonnee coords)
        {
            if (this.coordonnees.Equals(coords))
                return false;

            int distance = coordonnees.distance(coords);
            Case c = SmallWorld.Instance.carte.getCase(coords);

            if (c.getTypeCase() == TypeCases.EAU) return false;

            Case currentCase = SmallWorld.Instance.carte.getCase(coordonnees);
            if (currentCase.getTypeCase() == TypeCases.MONTAGNE && c.getTypeCase() == TypeCases.MONTAGNE && mouvement >= 1
                && !SmallWorld.Instance.carte.presenceUniteEnnemie(coords, this)) return true;

            if (distance > 1) return false;

            return (mouvement >= 1);
        }
Esempio n. 10
0
 public int getNombreUnites(Coordonnee coord)
 {
     int nb = 0;
     foreach (Joueur j in SmallWorld.Instance.joueurs)
     {
         foreach (Unite u in j.getUnites())
         {
             if(u.coordonnees.Equals(coord))
                 nb++;
         }
     }
     return nb;
 }
Esempio n. 11
0
 public Viking(Coordonnee coords)
     : base(coords)
 {
 }
Esempio n. 12
0
 public Nain(Coordonnee coords)
     : base(coords)
 {
 }
Esempio n. 13
0
 public bool presenceUniteEnnemie(Coordonnee coord, Unite amie)
 {
     foreach (Joueur j in SmallWorld.Instance.joueurs)
     {
         if (j.Peuple != amie.getPeuple())
         {
             foreach (Unite u in j.getUnites())
             {
                 if (u.coordonnees.Equals(coord))
                     return true;
             }
         }
     }
     return false;
 }
Esempio n. 14
0
        private void drawBack(DrawingContext dc)
        {
            int taille = SmallWorld.Instance.carte.taille;
            for (int x = 1; x <= taille; x++)
            {
                for (int y = 1; y <= taille; y++)
                {
                    Coordonnee coords = new Coordonnee(x, y);
                    switch (SmallWorld.Instance.carte.getCase(coords).getTypeCase())
                    {
                        case TypeCases.DESERT:
                            dc.DrawImage(desert, new Rect((x - 1) * imgSize, (y - 1) * imgSize, imgSize, imgSize));
                            break;
                        case TypeCases.PLAINE:
                            dc.DrawImage(plaine, new Rect((x - 1) * imgSize, (y - 1) * imgSize, imgSize, imgSize));
                            break;
                        case TypeCases.MONTAGNE:
                            dc.DrawImage(montagne, new Rect((x - 1) * imgSize, (y - 1) * imgSize, imgSize, imgSize));
                            break;
                        case TypeCases.EAU:
                            dc.DrawImage(eau, new Rect((x - 1) * imgSize, (y - 1) * imgSize, imgSize, imgSize));
                            break;
                        case TypeCases.FORET:
                            dc.DrawImage(foret, new Rect((x - 1) * imgSize, (y - 1) * imgSize, imgSize, imgSize));
                            break;
                        case TypeCases.VORTEX:
                            dc.DrawImage(vortex, new Rect((x - 1) * imgSize, (y - 1) * imgSize, imgSize, imgSize));
                            break;
                    }
                }
            }

            SolidColorBrush scb = Brushes.Black;
            Pen p = new Pen(scb, 3);
            dc.DrawLine(p, new Point(0,0), new Point(0,taille*imgSize));
            dc.DrawLine(p, new Point(taille*imgSize, 0), new Point(0,0));
            for (int x = 1; x <= taille; x++)
            {
                dc.DrawLine(p, new Point(x*imgSize, 0), new Point(x*imgSize, taille*imgSize));
            }
            for (int y = 1; y <= taille; y++)
            {
                dc.DrawLine(p, new Point(0, y * imgSize), new Point(taille * imgSize, y * imgSize));
            }
        }
Esempio n. 15
0
        protected override void OnMouseLeave(MouseEventArgs e)
        {
            if (checkPreventRefresh())
                return;

            lastCaseSurvolee = null;
            this.InvalidateVisual();
        }
Esempio n. 16
0
 private void drawDeplacement(DrawingContext dc)
 {
     if (caseSurvolee != null) {
         drawCase(caseSurvolee, Brushes.Blue.Clone(), 0.35, dc);
         caseSurvolee = null;
     }
 }
Esempio n. 17
0
 /**
  * Vérifie si une ou plusieurs unité ennemies sont présentes sur la case
  * Le cas échéant, lance une attaque contre l'unité ayant le plus de défense
  * Sinon, déplace l'unité voulant se déplacer
  */
 protected resultatCombat verifUniteCase(Coordonnee coords)
 {
     int defMax = 0;
     int choisie = -1;
     Joueur ennemi = null;
     bool uniteSeule = true;
     foreach (Joueur j in SmallWorld.Instance.joueurs)
     {
         if (j != SmallWorld.Instance.getJoueurCourant())
         {
             for (int i = 0; i < j.getUnites().Count; i++)
             {
                 Unite u = j.getUnites()[i];
                 if (u.coordonnees.Equals(coords))
                 {
                     if (choisie != -1) uniteSeule = false;
                     if (u.defense > defMax)
                     {
                         choisie = i;
                         defMax = u.defense;
                         ennemi = j;
                     }
                 }
             }
         }
     }
     if (choisie != -1)
     {
         return combattre(choisie, uniteSeule, ennemi);
     }
     else
     {
         return resultatCombat.DEPLACEMENT_SIMPLE;
     }
 }
Esempio n. 18
0
 protected void makeResultatCombat(resultatCombat result, Coordonnee coords)
 {
     switch (result)
     {
         case resultatCombat.ATTAQUANT_MORT:
         case resultatCombat.DEUX_MORTS:
             SmallWorld.Instance.getJoueurCourant().getUnites().Remove(this);
             break;
         case resultatCombat.DEPLACEMENT_BATAILLE:
         case resultatCombat.DEPLACEMENT_SIMPLE:
             coordonnees = coords;
             break;
     }
 }
Esempio n. 19
0
 public abstract bool deplacementPossible(Coordonnee coords);
Esempio n. 20
0
 /// <summary>
 /// Regarde en fonction de la case si l'unité peut se déplacer ou pas
 /// </summary>
 public abstract resultatCombat deplacement(Coordonnee coords);
Esempio n. 21
0
 public Unite fabriquerUnite(Coordonnee coords)
 {
     return new Nain(coords);
 }
Esempio n. 22
0
        public Dictionary<Unite, int> getUnites(Coordonnee coord)
        {
            Dictionary<Unite, int> listeUnite = new Dictionary<Unite, int>();
            bool joueurTrouve = false; // Optimisation de la boucle

            foreach (Joueur j in SmallWorld.Instance.joueurs)
            {
                int i = 0; // ID dans le tableau des unitées
                foreach (Unite u in j.getUnites())
                {
                    if (u.coordonnees.Equals(coord))
                    {
                        listeUnite.Add(u, i);
                        joueurTrouve = true;
                    }
                    i++;
                }
                if (joueurTrouve)
                    break;
            }
            return listeUnite;
        }
Esempio n. 23
0
        protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            Point click = e.GetPosition(this);

            if (e.LeftButton == MouseButtonState.Pressed) {
                verifierActionSelectionUnite(click);
            }
            else if (e.RightButton == MouseButtonState.Pressed)
            {

                if (s.Visibility == System.Windows.Visibility.Hidden)
                {

                    verifierActionDeplacement(click);

                    lastCaseSurvolee = null; // Permet de refresh l'interface
                    MouseEventArgs mouse1 = new MouseEventArgs(Mouse.PrimaryDevice, 0) { RoutedEvent = Mouse.MouseMoveEvent };
                    this.RaiseEvent(mouse1);
                }
                else  // Si jamais le menu est ouvert on le ferme juste et on déplace pas
                {
                    s.Visibility = System.Windows.Visibility.Hidden;
                    this.InvalidateVisual();
                }

            }
        }
Esempio n. 24
0
        /**
         * Retourne des suggestions de déplacement pour l'unité courante
         * Return List<Coordonnee> liste de coordonnées de cases suggérées
         */
        public unsafe List<Coordonnee> getSuggestions()
        {
            int x = SmallWorld.Instance.getUniteCourante().coordonnees.getX();
            int y = SmallWorld.Instance.getUniteCourante().coordonnees.getY();

            int** suggestions = wrapper.suggestions((int) SmallWorld.Instance.getJoueurCourant().Peuple, x, y);

            List<Coordonnee> retour = new List<Coordonnee>();

            for (int i = 0; i < 3; i++)//3 suggestions. TODO: Changement automatique en fonction du nombre reçu
            {
                int suggx = suggestions[i][0];
                int suggy = suggestions[i][1];
                if (suggx != 0 && suggy != 0)
                {
                    Coordonnee suggestion = new Coordonnee(suggx, suggy);
                    retour.Add(suggestion);
                }
            }
            return retour;
        }
Esempio n. 25
0
        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (checkPreventRefresh())
                return;

            Point click = e.GetPosition(this);
            Coordonnee tempCaseSurvol = pointToCoordonne(click);
            Unite uCourrante = SmallWorld.Instance.getUniteCourante();

            if (lastCaseSurvolee == null || (!(tempCaseSurvol.Equals(lastCaseSurvolee))))
            {
                // Affichage d'une case déplacable
                if (uCourrante.deplacementPossible(tempCaseSurvol))
                {

                    caseSurvolee = tempCaseSurvol;
                }
                else
                {
                    caseSurvolee = null;
                }

                // Survol d'une unité
                Dictionary<Unite, int> d = SmallWorld.Instance.carte.getUnites(tempCaseSurvol);
                if (d.Count == 1)
                {
                    if (fenetreParent != null)
                        fenetreParent.setInfoUniteSurvole(d.Keys.First(), d.Values.First());
                }
                else if (d.Count > 1)
                {
                    if (fenetreParent != null)
                        // TODO : A virer
                        fenetreParent.setInfoUniteSurvole(d.Count);
                }
                else
                {
                    if (fenetreParent != null)
                     fenetreParent.hideInfoUniteSurvole();
                }

                lastCaseSurvolee = tempCaseSurvol;
                this.InvalidateVisual();
            }
        }
Esempio n. 26
0
 public bool Equals(Coordonnee obj)
 {
     return (X == obj.X && Y == obj.Y);
 }
Esempio n. 27
0
 private void drawCase(Coordonnee c, Brush couleur, double opacity, DrawingContext dc)
 {
     int x = c.getX();
     int y = c.getY();
     Brush sugg = couleur;
     sugg.Opacity = opacity;
     dc.DrawRectangle(sugg, null, new Rect((x - 1) * imgSize, (y - 1) * imgSize, imgSize, imgSize));
 }
Esempio n. 28
0
 public void initialiseVortexs()
 {
     for (int i = 0; i < taille; i++)
     {
         for (int j = 0; j < taille; j++)
         {
             int typeCase = grid[i, j];
             if (typeCase == (int)TypeCases.VORTEX)
             {
                 Coordonnee c = new Coordonnee(i + 1, j + 1);
                 vortexs.Add(c);
             }
         }
     }
 }
Esempio n. 29
0
 /**
  * Demande à une unité de se déplacer sur la case visée
  * Return true si fin du jeu
  */
 public bool deplacement(Coordonnee c)
 {
     resultatCombat result = getUniteCourante().deplacement(c);
     if (result == resultatCombat.ATTAQUANT_MORT || getUniteCourante().mouvement < 1)
     {
         int nextUnite = getJoueurCourant().getFirstMovementAbleUnit();
         if (nextUnite == -1)
             passerTour();
         else
             instance.uniteCourante = nextUnite;
     }
     return checkFinJeu();
 }
Esempio n. 30
0
 public void clone(Coordonnee coords)
 {
     X = coords.getX();
     Y = coords.getY();
 }