private Dictionary <BrickPosition, IBrick> RestoreColumnFromGameDataAndMergeWithGameField( ICurrentGameData currentGameData, GameField gameField) { Dictionary <BrickPosition, IBrick> column; if (currentGameData.Column == null) { column = null; } else { column = new Dictionary <BrickPosition, IBrick>(); foreach (var pair in currentGameData.Column) { var brickPosition = BrickPosition.FromTuple(pair.Key); if (gameField.TryGetValue(brickPosition, out var brick)) { column.Add(brickPosition, brick); } } } return(column); }
public void ExplodeBomb(BombExplode explosion) { lock (_bombs) { // Find bomb IEnumerable <Bomb> bombEnum = from bomb in _bombs where (bomb.Position.X == explosion.X && bomb.Position.Y == explosion.Y) select bomb; Bomb explodingBomb = bombEnum.First(); explodingBomb.Range = explosion.Range; explodingBomb.MapToCheck = _currentMap; Deployment.Current.Dispatcher.BeginInvoke(explodingBomb.Explode); _bombs.Remove(explodingBomb); } foreach (BrickPosition destroyedBrickPos in explosion.DestroyedBricks) { Point absoluteBrickPosition = Util.GetAbsoluteCoordinates(new Point(destroyedBrickPos.X, destroyedBrickPos.Y)); lock (_mainState.Bricks) { IEnumerable <Brick.Brick> foundBrick = _mainState.Bricks.Where(brick => brick.Position.X == absoluteBrickPosition.X && brick.Position.Y == absoluteBrickPosition.Y); if (foundBrick.Count() > 0) { BrickPosition pos = destroyedBrickPos; Deployment.Current.Dispatcher.BeginInvoke(() => ((DestroyableBrick)foundBrick.First()).ShutDown(pos.SpawnedPowerup)); } } } }
private void OnSwipeLeft() { if (!move && player.GetComponent <PlayerCotrol>().GetCanShoot()) { move = true; newPosition = BrickPosition.GetPositionOnLeftSwipe(transform.position); } }
private void FixedUpdate() { if (move) { transform.position = Vector3.MoveTowards(transform.position, new Vector3(newPosition.x, transform.position.y, newPosition.z), 0.1f); if (BrickPosition.IsEqualsPosition(newPosition, transform.position)) { move = false; } } }
private GameField RestoreGameFieldFromGameData(ICurrentGameData currentGameData) { var settings = ContainerProvider.Resolve <ISettingsProvider>().GetSettingsInstance(); var gameField = new GameField(settings.FieldWidth, settings.FieldHeight); foreach (var pair in currentGameData.GameField) { gameField.Add(BrickPosition.FromTuple(pair.Key), new Brick { BrickKind = pair.Value }); } return(gameField); }
public bool GravitateGameField(GameField gameField) { var brickAffectedByGravity = false; var settings = ContainerProvider.Resolve <ISettingsProvider>().GetSettingsInstance(); var indexOfLastButOneRow = settings.FieldHeight - 2; for (var i = 0; i < settings.FieldWidth; i++) { for (var j = indexOfLastButOneRow; j >= 0; j--) { var brickPosition = new BrickPosition { XCoordinate = i, YCoordinate = j }; if (!gameField.TryGetValue(brickPosition, out var brick)) { continue; } var positionUnderBrick = brickPosition.IncrementYCoordinate(); BrickPosition?targetBrickPosition = null; while (positionUnderBrick.YCoordinate < settings.FieldHeight) { if (!gameField.ContainsKey(positionUnderBrick)) { targetBrickPosition = positionUnderBrick; } positionUnderBrick = positionUnderBrick.IncrementYCoordinate(); } if (!targetBrickPosition.HasValue) { continue; } gameField.Remove(brickPosition); gameField.Add(targetBrickPosition.Value, brick); brickAffectedByGravity = true; } } return(brickAffectedByGravity); }
private void SpawnNewVawe(int count) { HashSet <BrickPosition.position> position = new HashSet <BrickPosition.position>(); while (position.Count < count) { position.Add(new BrickPosition.position(Random.Range(0, 4), Random.Range(1, 6))); } foreach (BrickPosition.position pos in position) { Vector3 newBrickPosition = BrickPosition.GetBrickCoord(pos.GetSide(), pos.GetPosition()); GameObject newBrick = Instantiate(brick, newBrickPosition, Quaternion.identity); newBrick.GetComponent <Brick>().SetHP(hpBricks, hpBricks); } }
public void AllBricksAreAtBottomFieldAfterGravitate() { var gameSettings = new MockGameSettings { FieldWidth = 10, FieldHeight = 10 }; ContainerProvider.Resolve <ISettingsProvider>().SetSettingsInstance(gameSettings); var gameField = GenerateRandomField(gameSettings.FieldWidth, gameSettings.FieldHeight); var gravitationService = new Services.GravitationService(); gravitationService.GravitateGameField(gameField); for (var x = 0; x < gameSettings.FieldWidth; x++) { var topBrickInColumnFound = false; for (var y = 0; y < gameSettings.FieldHeight; y++) { var brickPosition = new BrickPosition { XCoordinate = x, YCoordinate = y }; if (topBrickInColumnFound) { Assert.IsTrue(gameField.ContainsKey(brickPosition)); } else { if (gameField.ContainsKey(brickPosition)) { topBrickInColumnFound = true; } } } } }
protected override BrickPosition GetPredecessorPosition(BrickPosition brickPosition) { return(brickPosition.IncrementXCoordinate().DecrementYCoordinate()); }
/// <summary> /// Checks if any bombs have exploded /// </summary> private void CheckBombs() { lock (_bombs) { List <Bomb> defunctBombs = new List <Bomb>(); foreach (Bomb bomb in _bombs.Where(bomb => bomb.IsTimeUp())) { Point absoluteBombPosition = Util.ToRealCoordinates(bomb.Position); List <Player> players = null; lock (_clients) { players = (from client in _clients select client.LocalPlayer).ToList(); } List <Player> deadPlayers = null; // Find and destroy bricks Point[] destroyedBrickPos = _level.GetDestroyedBricksAndPlayers(bomb, players, out deadPlayers); foreach (Player deadPlayer in deadPlayers) { deadPlayer.Dead = true; } // Kill all dead players lock (_clients) { foreach (Client cl in _clients) { Client client = cl; ThreadPool.QueueUserWorkItem(o => { foreach (Player deadPlayer in deadPlayers) { client.SendStatusUpdate(new PlayerDeath(deadPlayer.Color)); } }); } } // Spawn powerups BrickPosition[] destroyedBricks = new BrickPosition[destroyedBrickPos.Length]; int i = 0; Random rnd = new Random(); foreach (Point pos in destroyedBrickPos) { int powerupNum = rnd.Next(10); // Powerup powerup; switch (powerupNum) { case 1: powerup = Powerup.AdditionalBomb; break; case 2: powerup = Powerup.ManualTrigger; break; case 3: powerup = Powerup.BombRange; break; case 4: powerup = Powerup.ScrambledControls; break; default: powerup = Powerup.None; break; } _level.SetPowerup(pos, powerup); destroyedBricks[i++] = new BrickPosition(pos, powerup); if (powerup != Powerup.None) { Console.WriteLine((string)("Spawned powerup " + powerup)); } } lock (_clients) { foreach (Client cl in _clients) { Client client = cl; Bomb bmb = bomb; ThreadPool.QueueUserWorkItem(o => client.SendStatusUpdate(new BombExplosion(absoluteBombPosition.X, absoluteBombPosition.Y, bmb.Range, destroyedBricks))); } } defunctBombs.Add(bomb); } _bombs.RemoveAll(defunctBombs.Contains); } }
protected abstract BrickPosition GetPredecessorPosition(BrickPosition brickPosition);