Beispiel #1
0
        /// <summary>
        /// an adventurer do a turn
        /// </summary>
        /// <param name="iTurn"></param>
        /// <returns></returns>
        private async Task AdventurerMakeTurnAsync(int iTurn)
        {
            for (int iOrder = 1; iOrder <= CurrentGame.Players.Count; iOrder++)
            {
                Adventurer oCurrentAdventurer = CurrentGame.Players[iOrder - 1];
                Position   oAncientPosition   = oCurrentAdventurer.AdventurerPosition;
                if (oCurrentAdventurer.SequenceMovement.Length >= iTurn)
                {
                    //find a next position and next orientation
                    (Position oNewPosition, Orientation eNextOrientation) = await _oIDeplacementManage_BLL.GetNextPositionAdventurerAsync(oCurrentAdventurer, iTurn);

                    if (oNewPosition.CompareTo(oAncientPosition) == 0 && await _oIMapManage_BLL.GetValidePositionAsync(CurrentGame.Map, oNewPosition))
                    {
                        //adventurer can be moved
                        //leave the started case unoccupied
                        CaseMap oAncientCase = CurrentGame.Map.ListeCase.FirstOrDefault(c => oAncientPosition.CompareTo(c.CasePosition) == 1);
                        oAncientCase.IsOccupied = false;
                        //occuper le case d'arrive
                        CaseMap oNewCase = CurrentGame.Map.ListeCase.FirstOrDefault(c => oNewPosition.CompareTo(c.CasePosition) == 1);
                        oNewCase.IsOccupied = true;
                        //changer position du current joueur
                        oCurrentAdventurer.AdventurerPosition = oNewPosition;
                        //recuperer trésor s'il y en a, et décompte le nombre de trésor
                        if (oNewCase.Type == CaseType.Treasure && oNewCase.TreasureNumber > 0)
                        {
                            oCurrentAdventurer.NumberTreasureFound++;
                            oNewCase.TreasureNumber--;
                        }
                    }
                    //set prochaine orientation pour le joueur
                    oCurrentAdventurer.CurrentOrientation = eNextOrientation;
                }
            }
        }
Beispiel #2
0
 /// <summary>
 /// Valide a position on the map
 /// </summary>
 /// <param name="oMap"></param>
 /// <param name="oNextPosition"></param>
 /// <returns></returns>
 public async Task <bool> GetValidePositionAsync(TreasureMap oMap, Position oNextPosition)
 {
     if (oNextPosition.AxeHorizontal >= 0 && oNextPosition.AxeHorizontal < oMap.NumberCaseLarge &&
         oNextPosition.AxeVertical >= 0 && oNextPosition.AxeVertical < oMap.NumberCaseHigh)
     {
         CaseMap oCaseCarte = oMap.ListeCase.FirstOrDefault(c => c.CasePosition.CompareTo(oNextPosition) == 1);
         return(!oCaseCarte.IsOccupied && oCaseCarte.Type != CaseType.Mountain);
     }
     return(false);
 }
Beispiel #3
0
 /// <summary>
 /// Set a case occupied
 /// </summary>
 /// <param name="oInfoAdventurer"></param>
 /// <returns></returns>
 private async Task SetCaseOccupiedAsync(string oInfoAdventurer)
 {
     if (CurrentMap != null && await _oIDataValideManage_BLL.DataValideAsync(oInfoAdventurer, DataType.TreasureHunter))
     {
         string[] oArrayDataAdventurer      = oInfoAdventurer.Split(Constants.SEPERATOR);
         CaseMap  oCaseOccupiedVyAdventurer = CurrentMap.ListeCase
                                              .FirstOrDefault(c => c.CasePosition.CompareTo(new Position(int.Parse(oArrayDataAdventurer[2]), int.Parse(oArrayDataAdventurer[3]))) == 1);
         if (oCaseOccupiedVyAdventurer != null)
         {
             oCaseOccupiedVyAdventurer.IsOccupied = true;
         }
     }
 }
Beispiel #4
0
 /// <summary>
 /// Generate all cases type neutre, 0 treasure, not occupied
 /// </summary>
 /// <returns></returns>
 private async Task <List <CaseMap> > InitialiserCasesAsync()
 {
     if (CurrentMap != null)
     {
         CurrentMap.ListeCase = new List <CaseMap>();
         for (var ligne = 0; ligne < CurrentMap.NumberCaseLarge; ligne++)
         {
             for (var colonne = 0; colonne < CurrentMap.NumberCaseHigh; colonne++)
             {
                 var oCaseMap = new CaseMap(new Position(ligne, colonne), CaseType.Neutre, 0, false);
                 CurrentMap.ListeCase.Add(oCaseMap);
             }
         }
     }
     return(CurrentMap?.ListeCase);
 }
Beispiel #5
0
 /// <summary>
 /// Mountain case
 /// </summary>
 /// <param name="oListeCaseMountain"></param>
 /// <returns></returns>
 private async Task InitialiserCaseMountainAsync(List <string> oListeCaseMountain)
 {
     if (CurrentMap != null && CurrentMap.ListeCase != null && CurrentMap.ListeCase.Count > 0 && oListeCaseMountain != null && oListeCaseMountain.Count > 0)
     {
         foreach (var sInfoCaseMountain in oListeCaseMountain)
         {
             if (await _oIDataValideManage_BLL.DataValideAsync(sInfoCaseMountain, DataType.Mountain))
             {
                 string[] oCaseMountainData = sInfoCaseMountain.Split(Constants.SEPERATOR);
                 Position oMontagnePosition = new Position(int.Parse(oCaseMountainData[1]), int.Parse(oCaseMountainData[2]));
                 CaseMap  oCaseMap          = CurrentMap.ListeCase.FirstOrDefault(c => c.CasePosition.CompareTo(oMontagnePosition) == 1);
                 if (oCaseMap != null)
                 {
                     oCaseMap.Type = CaseType.Mountain;
                 }
             }
         }
     }
 }
Beispiel #6
0
 /// <summary>
 /// case contain treasure
 /// </summary>
 /// <param name="oListInfoCaseTreasure"></param>
 /// <returns></returns>
 private async Task InitialiserCaseTreasureAsync(List <string> oListInfoCaseTreasure)
 {
     if (CurrentMap != null && CurrentMap.ListeCase != null && CurrentMap.ListeCase.Count > 0 && oListInfoCaseTreasure != null && oListInfoCaseTreasure.Count > 0)
     {
         foreach (var sInfoCaseTreasure in oListInfoCaseTreasure)
         {
             if (await _oIDataValideManage_BLL.DataValideAsync(sInfoCaseTreasure, DataType.Treasure))
             {
                 string[] oCaseTreasureData = sInfoCaseTreasure.Split(Constants.SEPERATOR);
                 Position oTresurePosition  = new Position(int.Parse(oCaseTreasureData[1]), int.Parse(oCaseTreasureData[2]));
                 CaseMap  oCaseMap          = CurrentMap.ListeCase.FirstOrDefault(c => c.CasePosition.CompareTo(oTresurePosition) == 1);
                 if (oCaseMap != null)
                 {
                     oCaseMap.Type           = CaseType.Treasure;
                     oCaseMap.TreasureNumber = int.Parse(oCaseTreasureData[3]);
                 }
             }
         }
     }
 }
 public CaseMethod(CaseMap caseMap)
 {
     _caseMap = caseMap;
 }