예제 #1
0
파일: Game.cs 프로젝트: Alanik/ColorFactory
        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 );

            }
        }
예제 #2
0
파일: Game.cs 프로젝트: Alanik/ColorFactory
        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;
        }
예제 #3
0
파일: Game.cs 프로젝트: Alanik/ColorFactory
        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 );
            }
        }
예제 #4
0
파일: Game.cs 프로젝트: Alanik/ColorFactory
        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;
        }