public bool AddPlayer(PositionPlayer _newBatter) { if (lineup[8] != null || IsPositionFilled(_newBatter.Position)) { return false; } AddBatter(_newBatter); return true; }
private HIT_TYPE determineHitStrenght(PositionPlayer _batter, BALL_HEIGHT _battedBallType, int _defenderRange, int _defenderThrowing) { int runnerScore = 0; int defenderScore = 2 * _defenderThrowing + _defenderRange - 150; switch (_battedBallType) { case BALL_HEIGHT.FLY_BALL: runnerScore = (3 * _batter.Speed / 2); if (runnerScore - defenderScore >= randomOneToThousand()) return HIT_TYPE.TRIPLE; return HIT_TYPE.DOUBLE; case BALL_HEIGHT.LINE_DRIVE: if (_batter.Speed >= randomOneToThousand()) return HIT_TYPE.TRIPLE; runnerScore = (2 * _batter.Speed + 5 * _batter.Power); if (runnerScore - defenderScore >= randomOneToThousand()) return HIT_TYPE.DOUBLE; return HIT_TYPE.SINGLE; default: return HIT_TYPE.SINGLE; } }
private DefensiveAttributes.POSITION getPositionLineDriveHitTo(PositionPlayer _batter) { int randomResult = randomOneToThousand(); if (_batter.BatHand == PositionPlayer.BAT_HAND.RIGHT) { randomResult -= 100; } else { randomResult += 100; } if (randomResult < 100) { return DefensiveAttributes.POSITION.THIRD_BASEMAN; } else if (randomResult < 200) { return DefensiveAttributes.POSITION.LEFT_FIELDER; } else if (randomResult < 400) { return DefensiveAttributes.POSITION.SHORTSTOP; } else if (randomResult < 600) { return DefensiveAttributes.POSITION.CENTER_FIELDER; } else if (randomResult < 800) { return DefensiveAttributes.POSITION.SECOND_BASEMAN; } else if (randomResult < 900) { return DefensiveAttributes.POSITION.FIRST_BASEMAN; } else { return DefensiveAttributes.POSITION.RIGHT_FIELDER; } }
private DefensiveAttributes.POSITION getPositionGroundBallHitTo(PositionPlayer _batter) { int randomResult = randomOneToThousand(); if (_batter.BatHand == PositionPlayer.BAT_HAND.RIGHT) { randomResult -= 100; } else { randomResult += 100; } if (randomResult < 150) { return DefensiveAttributes.POSITION.THIRD_BASEMAN; } else if (randomResult < 450) { return DefensiveAttributes.POSITION.SHORTSTOP; } else if (randomResult < 650) { return DefensiveAttributes.POSITION.FIRST_BASEMAN; } else if (randomResult < 950) { return DefensiveAttributes.POSITION.SECOND_BASEMAN; } else { return DefensiveAttributes.POSITION.PITCHER; } }
private DefensiveAttributes.POSITION getPositionFlyBallHitTo(PositionPlayer _batter) { int randomResult = randomOneToThousand(); if (_batter.BatHand == PositionPlayer.BAT_HAND.RIGHT) { randomResult -= 100; } else { randomResult += 100; } if (randomResult < 300) { return DefensiveAttributes.POSITION.LEFT_FIELDER; } else if (randomResult < 600) { return DefensiveAttributes.POSITION.CENTER_FIELDER; } else { return DefensiveAttributes.POSITION.RIGHT_FIELDER; } }
private void doTriple(PositionPlayer _batter, Pitcher _pitcher, DefensiveAttributes.POSITION _hitToPosition, Game _game) { _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " triples to " + POSITION_TEXT[Convert.ToInt32(_hitToPosition)] + "!"); _game.advanceRunner(Game.BASE.THIRD, 3); _game.advanceRunner(Game.BASE.SECOND, 3); _game.advanceRunner(Game.BASE.FIRST, 3); _game.RunnerOnThird = _batter; //TODO: hit++ (batter) _game.GetAHit(); //TODO: hit++ (pitcher) //TODO: Triple++ (batter) if (!tryField(_hitToPosition, _game)) { doNonROEError(ERROR_TYPE.DEEP_BOBBLE, _game, _hitToPosition); } //Temp counter.triples++; }
private void doSingle(PositionPlayer _batter, Pitcher _pitcher, DefensiveAttributes.POSITION _hitToPosition, Game _game) { _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " singles to " + POSITION_TEXT[Convert.ToInt32(_hitToPosition)] + "!"); _game.advanceRunner(Game.BASE.THIRD, 1); _game.advanceRunner(Game.BASE.SECOND, 1); //TODO: advance extra base? _game.advanceRunner(Game.BASE.FIRST, 1); //TODO: advance extra base? _game.RunnerOnFirst = _batter; //TODO: hit++ (batter) _game.GetAHit(); //TODO: hit++ (pitcher) tryAdvanceFromThirdBase(_hitToPosition, _game); tryAdvanceFromSecondBase(_hitToPosition, _game); //Temp counter.singles++; }
private void doROEError(ERROR_TYPE _gravity, Game _game, PositionPlayer _batter, DefensiveAttributes.POSITION _posCommitingError) { _game.CommitError(); bool doDeep = false; switch (_gravity) { case ERROR_TYPE.DEEP_FIELDING: _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " reaches on an outfield fielding error by " + _game.GetDefenderFirstName(_posCommitingError) + "!"); doDeep = true; break; case ERROR_TYPE.DEEP_THROWING: _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " reaches on an outfield throwing error by " + _game.GetDefenderFirstName(_posCommitingError) + "!"); doDeep = true; break; case ERROR_TYPE.SHORT_THROWING: _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " reaches on an infield throwing error by " + _game.GetDefenderFirstName(_posCommitingError) + "!"); doDeep = true; break; case ERROR_TYPE.SHORT_FIELDING: _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " reaches on an infield fielding error by " + _game.GetDefenderFirstName(_posCommitingError) + "!"); doDeep = false; break; } if (doDeep) { doDeepError(_game); _game.RunnerOnSecond = _batter; } else { doShortError(_game); _game.RunnerOnFirst = _batter; } }
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 doHomerun(PositionPlayer _batter, Pitcher _pitcher, DefensiveAttributes.POSITION _hitToPosition, Game _game) { _game.GetLog().addEvent(_game.CurrentHalfInning, _game.HomeTeamAtBat, _batter.FirstName + " homers to " + POSITION_TEXT[Convert.ToInt32(_hitToPosition)] + "!"); _game.advanceRunner(Game.BASE.THIRD, 3); _game.advanceRunner(Game.BASE.SECOND, 3); _game.advanceRunner(Game.BASE.FIRST, 3); _game.ScoreRun(); //TODO: hit++ (batter) _game.GetAHit(); //TODO: hit++ (pitcher) //TODO: HR++ (batter) //TODO: HR++ (game) //TODO: HR++ (pitcher) //Temp for analysis counter.homeRuns++; }
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++; }
public int GetWalkRate(PositionPlayer.BAT_HAND _againtHand) { return pitcher.WalkRate(_againtHand); }
public InMatchPositionPlayer(PositionPlayer _positionPlayer) : base(_positionPlayer) { // TODO: this is not necessarily the case (example: starting the game at another position) positionPlayer = _positionPlayer; }
private void AddBatter(PositionPlayer _newBatter) { int i = 0; while (lineup[i] != null) { i++; } lineup[i] = _newBatter; }