private void doLineDrive(PositionPlayer _batter, Pitcher _pitcher, DefensiveAttributes.POSITION _hitToPosition, Game _game) { if (isAHit(BABIP_ON_LINE_DRIVES, _game.GetDefenderRange(_hitToPosition))) { switch (determineHitStrenght(_batter, BALL_HEIGHT.LINE_DRIVE, _game.GetDefenderRange(_hitToPosition), _game.GetDefenderThrowing(_hitToPosition))) { case HIT_TYPE.SINGLE: doSingle(_batter, _pitcher, _hitToPosition, _game); break; case HIT_TYPE.DOUBLE: doDouble(_batter, _pitcher, _hitToPosition, _game); break; case HIT_TYPE.TRIPLE: doTriple(_batter, _pitcher, _hitToPosition, _game); break; default: doSingle(_batter, _pitcher, _hitToPosition, _game); break; } } else { if (!tryField(_hitToPosition, _game)) { doROEError(ERROR_TYPE.DEEP_FIELDING, _game, _batter, _hitToPosition); } else { _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " lines out to " + POSITION_TEXT[Convert.ToInt32(_hitToPosition)] + "."); _game.IncreaseOuts(); if (_game.Outs != 0 && (_hitToPosition == DefensiveAttributes.POSITION.CENTER_FIELDER || _hitToPosition == DefensiveAttributes.POSITION.LEFT_FIELDER || _hitToPosition == DefensiveAttributes.POSITION.RIGHT_FIELDER)) { tryAdvanceFromThirdBase(_hitToPosition, _game); if (_game.Outs != 0) { tryAdvanceFromSecondBase(_hitToPosition, _game); } } } } //Temp counter.linedrives++; }
private void doGroundBall(PositionPlayer _batter, Pitcher _pitcher, DefensiveAttributes.POSITION _hitToPosition, Game _game) { if (isAHit(BABIP_ON_GROUND_BALLS, _game.GetDefenderRange(_hitToPosition))) { doSingle(_batter, _pitcher, _hitToPosition, _game); } else { if (!tryField(_hitToPosition, _game)) { doROEError(ERROR_TYPE.SHORT_FIELDING, _game, _batter, _hitToPosition); } else { if (!tryThrow(_hitToPosition, _game)) { doROEError(ERROR_TYPE.SHORT_THROWING, _game, _batter, _hitToPosition); } else { //must revise this part of the logic if (_game.Outs < 2) { if (_game.RunnerOnFirst != null) { if (!(_game.RunnerOnFirst.Speed * 4 <= randomOneToThousand())) { _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " grounds to " + POSITION_TEXT[Convert.ToInt32(_hitToPosition)] + " for a double play!"); _game.RunnerOnFirst = null; _game.IncreaseOuts(); if (_game.Outs == 1) { _game.advanceRunner(Game.BASE.THIRD, 1); _game.advanceRunner(Game.BASE.SECOND, 1); } _game.RunnerOnSecond = null; } else { _game.advanceRunner(Game.BASE.THIRD, 1); _game.advanceRunner(Game.BASE.SECOND, 1); _game.RunnerOnFirst = _batter; _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " grounds to " + POSITION_TEXT[Convert.ToInt32(_hitToPosition)] + " for a fielder's choice!"); } } else { _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " grounds out to " + POSITION_TEXT[Convert.ToInt32(_hitToPosition)] + "."); _game.advanceRunner(Game.BASE.THIRD, 1); _game.advanceRunner(Game.BASE.SECOND, 1); } } else { _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " grounds out to " + POSITION_TEXT[Convert.ToInt32(_hitToPosition)] + "."); } _game.IncreaseOuts(); } } } //Temp counter.groundballs++; }