/// <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; } } }
/// <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); }
/// <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; } } }
/// <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); }
/// <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; } } } } }
/// <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; }