private double GetScore(Board board, ISlot <ICard <CardType> > slot) { var card = slot.Card; SquareDesc squareDesc = board.Desc(); var state = new GameState() { HeroGold = board.Gold, HeroHealth = board.HeroHealth, HeroWeapon = board.Weapon, CardGold = 0, MonsterHealth = 0, CardWeapon = 0, }; switch (card.Type) { case CardType.Monster: state.MonsterHealth = card.Value; return(ScoreMonsterCard(squareDesc, state)); case CardType.Weapon: state.CardWeapon = card.Value; return(ScoreWeaponCard(squareDesc, state)); case CardType.Gold: state.CardGold = card.Value; return(ScoreGoldCard(squareDesc, state)); default: throw new ArgumentOutOfRangeException(); } }
private double ScoreMonsterCard(SquareDesc squareDesc, GameState state) { if (state.HeroWeapon > 0) { return(_multipliers.MonsterWhenPossessingWeaponScoreMultiplier[(int)squareDesc] * _multipliers.MonsterWhenPossessingWeaponScoreFunc.Evaluate(state)); } else if (state.MonsterHealth > state.HeroHealth) { return(ScoreMonsterWhenNotPossessingWeaponAndMonsterHealthIsGreater(state)); } else { return(_multipliers.MonsterWhenNotPossessingWeaponScoreMultiplier[(int)squareDesc] * _multipliers.MonsterWhenNotPossessingWeaponScoreFunc.Evaluate(state)); } }
private double GetScore(Board board, ISlot <ICard <CardType> > slot) { var card = slot.Card; SquareDesc squareDesc = board.Desc(); switch (card.Type) { case CardType.Monster: return(ScoreMonsterCard(board.Weapon, card.Value, board.HeroHealth, squareDesc)); case CardType.Weapon: return(ScoreWeaponCard(board.Weapon, card.Value, squareDesc)); case CardType.Gold: return(ScoreGoldCard(card.Value, squareDesc)); default: throw new ArgumentOutOfRangeException(); } }
private double ScoreMonsterCard(int heroWeapon, int monsterHealth, int heroHealth, SquareDesc squareDesc) { if (heroWeapon > 0) { return(_multipliers.MonsterWhenPossessingWeaponScoreMultiplier[(int)squareDesc] * ScoreMonsterWhenPossessingWeapon(heroWeapon, monsterHealth)); } else if (monsterHealth > heroHealth) { return(ScoreMonsterWhenNotPossessingWeaponAndMonsterHealthIsGreater(heroHealth, monsterHealth)); } else { return(_multipliers.MonsterWhenNotPossessingWeaponScoreMultiplier[(int)squareDesc] * ScoreMonsterWhenNotPossessingWeaponAndHeroHealthIsGreater(heroHealth, monsterHealth)); } }
private double ScoreWeaponCard(int heroWeapon, int weaponValue, SquareDesc squareDesc) { return(heroWeapon > 0 ? _multipliers.WeaponWhenPossessingWeaponScoreMultiplier[(int)squareDesc] * ScoreWeaponCardWhenPossessingWeapon(heroWeapon, weaponValue) : _multipliers.WeaponWhenPossessingNotWeaponScoreMultiplier[(int)squareDesc] * ScoreWeaponCardWhenNotPossessingWeapon(weaponValue)); }
private double ScoreGoldCard(int goldScore, SquareDesc squareDesc) { return(_multipliers.GoldScoreMultiplier[(int)squareDesc] * goldScore); }
private double ScoreWeaponCard(SquareDesc squareDesc, GameState state) { return(state.HeroWeapon > 0 ? _multipliers.WeaponWhenPossessingWeaponScoreMultiplier[(int)squareDesc] * _multipliers.WeaponWhenPossessingWeaponScoreFunc.Evaluate(state) : _multipliers.WeaponWhenNotPossessingWeaponScoreMultiplier[(int)squareDesc] * _multipliers.WeaponWhenNotPossessingWeaponScoreFunc.Evaluate(state)); }
private double ScoreGoldCard(SquareDesc squareDesc, GameState state) { return(_multipliers.GoldScoreMultiplier[(int)squareDesc] * state.CardGold); }