private void UpdateOtherPlayerPosition( GameSessionModel session, PlayerInSessionModel playerInGame, PlayerInSessionModel otherPlayer, int col, int row ) { bool nextTileOtherPlayerUncovered = session.Map[col, row].IsTileUncoveredByPlayer[otherPlayer.Player.seatNumber - 1]; bool prevTileOtherPlayerUncovered = session.Map[playerInGame.CurrentPosition.Column, playerInGame.CurrentPosition.Row].IsTileUncoveredByPlayer[otherPlayer.Player.seatNumber - 1]; if (nextTileOtherPlayerUncovered) { if (!prevTileOtherPlayerUncovered) { Clients.Client( otherPlayer.Player.ConnectionId ).clientReceiveUpdateOtherPlayerPosition_changeAlphaOtherPlayer( playerInGame.CurrentPosition.Column, playerInGame.CurrentPosition.Row, playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber, (.1) ); } else { Clients.Client( otherPlayer.Player.ConnectionId ).clientReceiveUpdateOtherPlayerPosition( playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber ); } } else if (!nextTileOtherPlayerUncovered && prevTileOtherPlayerUncovered) { Clients.Client( otherPlayer.Player.ConnectionId ).clientReceiveUpdateOtherPlayerPosition_changeAlphaOtherPlayer( playerInGame.CurrentPosition.Column, playerInGame.CurrentPosition.Row, playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber, -.1 ); } }
private TileKind PineConeHitsTile( int col, int row, PlayerInSessionModel player, GameSessionModel session, bool isMainPlayer ) { //map // 0 = covered tile // 1 = uncovered tile // 2 = covered Mine tile // 3 = uncovered/destroyed Mine tile // 4 = uncovered/scored Mine tile // 5 = uncovered mine (not scored) uncovered by pineCone explosion // 6 = uncovered tile by pineCone explosion // 7 = coveredTurret // 8 = uncoveredTurret int tile = player.PrivateMap[col, row].Tile; TileKind result; switch ((TileKind)tile) { case TileKind.CoveredEmptyTile: { result = TileKind.UncoveredTileByPineConeExplosion; if (isMainPlayer) { player.AmmoPoints += session.Map[col, row].Number; } break; } case TileKind.UncoveredEmptyTile: { result = TileKind.UncoveredTileByPineConeExplosion; break; } case TileKind.CoveredMineTile: { result = TileKind.UncoveredMineByPineConeExplosionNotScored; break; } case TileKind.UncoveredDestroyedMineTile: { result = TileKind.UncoveredDestroyedMineTile; break; } case TileKind.UncoveredScoredMineTile: { result = TileKind.UncoveredScoredMineTile; break; } default: { result = TileKind.UncoveredEmptyTile; break; } } player.PrivateMap[col, row].Tile = (int)result; session.Map[col, row].IsTileUncoveredByPlayer[player.Player.seatNumber - 1] = true; return result; }
private void Shoot( PlayerInSessionModel playerInGame, PlayerInSessionModel opponent, Random rnd, GameSessionModel game ) { int startCol = playerInGame.CurrentPosition.Column; int startRow = playerInGame.CurrentPosition.Row; int endCol = opponent.CurrentPosition.Column; int endRow = opponent.CurrentPosition.Row; if (playerInGame.AmmoPoints == 0) { playerInGame.IsShooting = false; RemoveShootingHandler( playerInGame.ShootingQuarterSecondCounter, playerInGame.playerShootingHandler ); playerInGame.ShootingQuarterSecondCounter = 0; Clients.Client( playerInGame.Player.ConnectionId ).clientReceivePlayerStopsShooting ( opponent.Player.seatNumber ); return; } ArrayList tiles; if (ShootingPathIsClear( startCol, startRow, endCol, endRow, playerInGame.PrivateMap, out tiles )) { //TODO: move to separate class/module ie. (Damage Calculation Logic) int upperBaseDmgLimit = (playerInGame.UncoveredMines * 2) + 10; int upperDmgLimit = rnd.Next( 0, 9 ) == 9 ? upperBaseDmgLimit + rnd.Next( 1, upperBaseDmgLimit ) : upperBaseDmgLimit; int lowerDmgLimit = rnd.Next( 0, 2 ) == 0 ? 0 : (playerInGame.UncoveredMines * 2); int rndDamage = rnd.Next( lowerDmgLimit, upperDmgLimit ); opponent.Health -= rndDamage; playerInGame.AmmoPoints -= 1; //TODO: temporary if (opponent.Health <= 0) { game.EndGame = true; PositionModel uncoveredBulletTile = GetUncoveredBulletTile( tiles, game.Map, playerInGame.UncoveredBulletTile, opponent.Player.seatNumber - 1 ); Clients.Client( playerInGame.Player.ConnectionId ).clientReceivePlayerShootsOtherPlayer( rndDamage, playerInGame.AmmoPoints, opponent.Player.seatNumber, string.Format( "Player {0} has won the game by destroying player {1}. Hail to the king! Congratz {0}.", playerInGame.Player.Name, opponent.Player.Name ) ); Clients.Client( opponent.Player.ConnectionId ).clientReceivePlayerGetsShotByOtherPlayer( rndDamage, opponent.Health, uncoveredBulletTile, string.Format( "Player {0} has won the game by destroying player {1}. Hail to the king! Congratz {0}.", playerInGame.Player.Name, opponent.Player.Name ) ); playerInGame.IsShooting = false; RemoveShootingHandler( playerInGame.ShootingQuarterSecondCounter, playerInGame.playerShootingHandler ); } else { PositionModel uncoveredBulletTile = GetUncoveredBulletTile( tiles, game.Map, playerInGame.UncoveredBulletTile, opponent.Player.seatNumber - 1 ); Clients.Client( playerInGame.Player.ConnectionId ).clientReceivePlayerShootsOtherPlayer( rndDamage, playerInGame.AmmoPoints, opponent.Player.seatNumber ); Clients.Client( opponent.Player.ConnectionId ).clientReceivePlayerGetsShotByOtherPlayer( rndDamage, opponent.Health, uncoveredBulletTile ); } } else { playerInGame.IsShooting = false; RemoveShootingHandler( playerInGame.ShootingQuarterSecondCounter, playerInGame.playerShootingHandler ); Clients.Client( playerInGame.Player.ConnectionId ).clientReceivePlayerStopsShooting ( opponent.Player.seatNumber ); } }
private List<PositionModel> CheckIfMineIsUncoveredAllAround( PlayerInSessionModel player ) { List<PositionModel> tiles = new List<PositionModel>(); int numCol = GameSettings.Map.NumberOfTiles_Column; int numRow = GameSettings.Map.NumberOfTiles_Row; int col = player.CurrentPosition.Column; int row = player.CurrentPosition.Row; int rMinusOne = row - 1; int rPlusOne = row + 1; int kMinusOne = col - 1; int kPlusOne = col + 1; for (var k = kMinusOne; k <= kPlusOne; k++) { for (var r = rMinusOne; r <= rPlusOne; r++) { //check if tile is outside of map boundry(ex. row = -1) if (r >= 0 && r < numRow && k >= 0 && k < numCol) { var isMine = CheckIfTileIsMine( player.PrivateMap[k, r].Tile ); if (isMine) { if (CheckIfTilesAroundParameterTileAreUncovered( k, r, player.PrivateMap )) { //The mine is uncovered from all sides here player.PrivateMap[k, r].Tile = 4; tiles.Add( new PositionModel( k, r ) ); } } } } } return tiles; }