public void UpdateSituation() { for (int t = 0; t < Constants.TANK_COUNT; t++) { Tank tank = Game.Current.Elements[t] as Tank; TankSituation tankSituation = new TankSituation(this); tankSituation.Tank = tank; tankSituation.TankState = GameState.GetMobileState(t); // tankSituation.IsShotAt // tankSituation.ThreateningBullets // tankSituation.IsInLineOfFire // tankSituation.IsLockedDown // tankSituation.IsShutIntoQuadrant // tankSituation.Quadrant TankSituationsByTankIndex[tank.Index] = tankSituation; tankSituation.UpdateTankActionSituations(GameState); int bulletIndex = t + Constants.MIN_BULLET_INDEX; int bulletId = Game.Current.Turns[GameState.Tick].BulletIds[t]; BulletSituation bulletSituation = BulletSituationCalculator.CreateBulletSituation(GameState, tankSituation, bulletIndex, bulletId); BulletSituationsByTankIndex[t] = bulletSituation; } }
public void UpdateTankActionSituation(TankSituation tankSituation, TankAction tankAction, GameState newGameState) { TankAction[] tankActions = new TankAction[] { TankAction.NONE, TankAction.NONE, TankAction.NONE, TankAction.NONE }; tankActions[tankSituation.Tank.Index] = tankAction; List <Point> wallsRemoved = new List <Point>(); MutableGameStateEngine.ApplyAllActions(newGameState as MutableGameState, tankActions, wallsRemoved); bool isAdjacentWallRemoved = false; if (!tankSituation.TankState.IsActive) { IsValid = (TankAction == TankAction.NONE); return; } else { IsValid = true; } if (tankAction == TankAction.FIRE) { Direction movementDir = tankSituation.TankState.Dir; TankLocation tankLoc = Game.Current.Turns[newGameState.Tick].CalculationCache.TankLocationMatrix[tankSituation.TankState.Pos]; Point adjacentWallPoint = tankLoc.OutsideEdgesByDirection[(int)movementDir].CentreCell.Position; isAdjacentWallRemoved = wallsRemoved.Any( wallPoint => wallPoint == adjacentWallPoint ); } NewGameState = newGameState; WallsRemoved = wallsRemoved.ToArray(); IsAdjacentWallRemoved = isAdjacentWallRemoved; NewTankState = NewGameState.GetMobileState(TankSituation.Tank.Index); }
public BulletSituation(TankSituation tankSituation, int bulletIndex, int bulletId) { TankSituation = tankSituation; tankSituation.TanksBulletSituation = this; BulletIndex = bulletIndex; BulletId = bulletId; }
public bool AreAllTankActionsGenerated(int yourPlayerIndex) { foreach (Tank tank in Game.Current.Players[yourPlayerIndex].Tanks) { TankSituation tankSituation = TankSituationsByTankIndex[tank.Index]; if (!tankSituation.IsTankActionDetermined) { return(false); } } return(true); }
public TankActionSet GenerateTankActions(int yourPlayerIndex, int tick) { TankActionSet tankActionSet = new TankActionSet(yourPlayerIndex, tick); foreach (Tank tank in Game.Current.Players[yourPlayerIndex].Tanks) { TankSituation tankSituation = TankSituationsByTankIndex[tank.Index]; TankAction bestAction = tankSituation.GetBestTankAction(); tankActionSet.Actions[tank.Number] = bestAction; } return(tankActionSet); }
public TankActionSituation(TankSituation tankSituation, TankAction tankAction) { TankSituation = tankSituation; TankAction = tankAction; }
public GameSituation(GameState gameState) { GameState = gameState; TankSituationsByTankIndex = new TankSituation[Constants.TANK_COUNT]; BulletSituationsByTankIndex = new BulletSituation[Constants.TANK_COUNT]; }