public override bool IsValid() { bool valid = Validate(); if (valid) { ABasicPawn allyPawn = (ABasicPawn)CurPlayer.GetPawnAt(AllyPos); Dijkstra didi = new Dijkstra(Boards.GetBoard(), AllyPos, allyPawn.AtkRange); List <Coord> atkRange = didi.GetValidPaths(Command.ATTACK); valid = PosValidate(atkRange); } return(valid); }
protected override bool Validate() { bool valid = true; if (!Coord.IsValid(AllyPos) || !Coord.IsValid(Target)) { ErrorMsg = INVALID_POS; valid = false; } else if (Oponent == null) { ErrorMsg = NO_OPONENT; valid = false; } else if (CurPlayer == null) { ErrorMsg = PLAYER; valid = false; } else if (Boards == null) { ErrorMsg = NO_BOARDS; valid = false; } else { APawn allyPawn = CurPlayer.GetPawnAt(AllyPos); if (allyPawn is ABasicPawn) { ABasicPawn allyAttackerPawn = CurPlayer.GetPawnAt(AllyPos) as ABasicPawn; if (allyPawn == null) { ErrorMsg = NO_PAWN; valid = false; } else if (Oponent.GetUnitAt(Target) == null) { ErrorMsg = NO_PAWN; valid = false; } } else { valid = false; } } return(valid); }
public override bool Execute(bool isSimulation = false) { bool valid = false; if (Validate()) { ABasicPawn allyPawn = (ABasicPawn)CurPlayer.GetPawnAt(AllyPos); Dijkstra didi = new Dijkstra(Boards.GetBoard(), AllyPos, allyPawn.AtkRange); List <Coord> atkRange = didi.GetValidPaths(Command.ATTACK); if (PosValidate(atkRange)) { valid = true; Unit enemyUnit = Oponent.GetUnitAt(Target); int damage = allyPawn.Atk - enemyUnit.Def; if (damage > 0) { HitMsg = String.Format("{0} HAVE DEALT {1} DAMAGE!", allyPawn.Culture, damage); enemyUnit.CurrLife = enemyUnit.CurrLife - damage; if (enemyUnit.CurrLife <= 0) { Oponent.RemoveUnitAt(Target, Boards); HitMsg += " ENEMY KILLED!!"; } } else { HitMsg = BLOCK; } } } //if (!isSimulation) { // UserUtils.PrintSucess((valid) ? (HitMsg) : (ErrorMsg)); // Console.ReadLine(); //} return(valid); }
public void DoGaiaWill(Player playerOne, Player playerTwo, Board boards, int turn) { Random rnd = new Random(); int actionTurn = 10 + rnd.Next(6); if (turn % actionTurn == 0) { InspectField(playerOne, playerTwo, boards); Array terrains = Enum.GetValues(typeof(ETerrain)); int terrain = rnd.Next(terrains.Length); int cultToCheck = rnd.Next(2); Player other = null; Player currPlayer = null; PawnsPerTerrain currPpt = null; List <double> currStatistics = null; if (cultToCheck == 0) { if (playerOne.GetCulture() == ECultures.DALRIONS) { currPlayer = playerOne; other = playerTwo; currPpt = DalrionPpts; currStatistics = DalrionStatistcs; } else { currPlayer = playerTwo; other = playerOne; currPpt = RahkarPpts; currStatistics = RahkarStatistcs; } } else { if (playerOne.GetCulture() == ECultures.RAHKARS) { currPlayer = playerOne; other = playerTwo; currPpt = RahkarPpts; currStatistics = RahkarStatistcs; } else { currPlayer = playerTwo; other = playerOne; currPpt = DalrionPpts; currStatistics = DalrionStatistcs; } } List <APawn> playerPawns = currPlayer.GetPawns(); string msg = "Gaia will now "; if (currPpt.PPTs[(ETerrain)terrains.GetValue(terrain)] < 2) { if (currStatistics[ENMY_DIST] < 1) { if (currPpt.OccupiedTerrains() > 3) { msg += "increase the defense of pawns at " + (ETerrain)terrains.GetValue(terrain); foreach (APawn pawn in playerPawns) { if (boards.TerrainAt(pawn.Position) == (ETerrain)terrains.GetValue(terrain)) { pawn.Def += 3; } } } else { msg += "set the atk of pawns at " + (ETerrain)terrains.GetValue(terrain) + " to 1!"; foreach (APawn pawn in playerPawns) { if (boards.TerrainAt(pawn.Position) == (ETerrain)terrains.GetValue(terrain) && pawn is ABasicPawn) { ABasicPawn bPawn = (ABasicPawn)pawn; bPawn.Atk = 1; } } } } else if (currStatistics[ENMY_DIST] >= 1 && currStatistics[ENMY_DIST] < 3) { msg += "increase the move points of pawns at " + (ETerrain)terrains.GetValue(terrain); foreach (APawn pawn in playerPawns) { if (boards.TerrainAt(pawn.Position) != (ETerrain)terrains.GetValue(terrain)) { pawn.MovePoints += 2; } } } else { if (currStatistics[ALLY_DIST] < 3) { msg += "set the move range of pawns at " + (ETerrain)terrains.GetValue(terrain) + " to 1!"; foreach (APawn pawn in playerPawns) { if (boards.TerrainAt(pawn.Position) == (ETerrain)terrains.GetValue(terrain)) { pawn.MovePoints = 1; } } } else if (currStatistics[ALLY_DIST] >= 3 && currStatistics[ALLY_DIST] < 7) { msg += "increase the attack range of pawns at " + (ETerrain)terrains.GetValue(terrain); foreach (APawn pawn in playerPawns) { if (boards.TerrainAt(pawn.Position) == (ETerrain)terrains.GetValue(terrain) && pawn is ABasicPawn) { ABasicPawn bPawn = (ABasicPawn)pawn; bPawn.AtkRange += 2; } } } else { msg += "set the def of pawns at " + (ETerrain)terrains.GetValue(terrain) + " to 1!"; foreach (APawn pawn in playerPawns) { if (boards.TerrainAt(pawn.Position) != (ETerrain)terrains.GetValue(terrain)) { pawn.Def = 1; } } } } } //UserUtils.PrintSucess(msg + " For " + currPlayer.GetCulture()); // Console.ReadLine(); } }