Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Player
- {
- public string Name { get; set; }
- public int TotalScore { get; private set; }
- public List<int> Scores { get; private set; }
- private static Random random;
- internal CoinOptions coinOption;
- public Player(string name)
- {
- random = new Random();
- Name = name;
- Scores = new List<int>();
- }
- public int Play()
- {
- return random.Next(6);
- }
- internal void AddScore(int score)
- {
- this.TotalScore += score;
- this.Scores.Add(score);
- }
- }
- internal static class Coin
- {
- private static Random random = new Random();
- public static CoinOptions FlipCoin()
- {
- var probability = random.Next(1);
- return (CoinOptions)probability;
- }
- }
- public class HandCricket
- {
- Player playerOne, playerTwo;
- private Player batsman, bowler;
- private int inningsCount = 0;
- public HandCricket(Player one, Player two)
- {
- playerOne = one;
- playerTwo = two;
- }
- public GameResultSummary Play()
- {
- var tossResult = Toss();
- var gameResult = new GameResultSummary() { TossResult = tossResult };
- setBatsamanAndBowler(tossResult);
- gameResult.Innings.Add(new Innings() { Batsman = batsman, Bowler = bowler });
- playInnings();
- inningsCount += 1;
- switchBatsmanAndBowler();
- gameResult.Innings.Add(new Innings() { Batsman = batsman, Bowler = bowler });
- playInnings();
- gameResult.GameResult.DoesGameHaveResult = true;
- if (batsman.TotalScore > bowler.TotalScore)
- {
- gameResult.GameResult.Winner = batsman;
- }
- else if (batsman.TotalScore < bowler.TotalScore)
- {
- gameResult.GameResult.Winner = bowler;
- }
- else
- {
- gameResult.GameResult.DoesGameHaveResult = false;
- }
- return gameResult;
- }
- private TossResult Toss()
- {
- playerOne.coinOption = CoinOptions.Heads;
- playerTwo.coinOption = CoinOptions.Tails;
- var winningFlip = Coin.FlipCoin();
- var winningPlayer = winningFlip == playerOne.coinOption ? playerOne : playerTwo;
- return new TossResult() { TossWinningPlayer = winningPlayer, TossWinningPlayerSelection = PlayingOptions.Bat };
- }
- private void playInnings()
- {
- int batsmanScore, bowlingScore;
- while(true)
- {
- batsmanScore = batsman.Play();
- bowlingScore = bowler.Play();
- if((batsmanScore == bowlingScore) || (inningsCount > 0 && batsman.TotalScore > bowler.TotalScore))
- {
- break;
- }
- batsman.AddScore(batsmanScore);
- }
- }
- private void switchBatsmanAndBowler()
- {
- var tempObject = batsman;
- batsman = bowler;
- bowler = tempObject;
- }
- private void setBatsamanAndBowler(TossResult tossResult)
- {
- if(tossResult.TossWinningPlayerSelection == PlayingOptions.Bat)
- {
- batsman = tossResult.TossWinningPlayer;
- bowler = getOpponentPlayerObject(tossResult.TossWinningPlayer);
- }
- else
- {
- bowler = tossResult.TossWinningPlayer;
- batsman = getOpponentPlayerObject(tossResult.TossWinningPlayer);
- }
- }
- private Player getOpponentPlayerObject(Player firstPlayer)
- {
- if (ReferenceEquals(playerOne, firstPlayer))
- {
- return playerTwo;
- }
- return playerOne;
- }
- }
- public class GameResultSummary
- {
- internal TossResult TossResult { get; set; }
- internal GameResult GameResult { get; set; }
- internal List<Innings> Innings { get; set; }
- public GameResultSummary()
- {
- Innings = new List<Innings>();
- GameResult = new GameResult();
- }
- public void GameSummary()
- {
- Console.WriteLine(string.Format("Player {0} won the toss and elected to {1}", TossResult.TossWinningPlayer.Name, TossResult.TossWinningPlayerSelection.ToString()));
- foreach (var player in Innings)
- {
- Console.WriteLine(string.Format("Player {0} played and scored {1}", player.Batsman.Name, player.Batsman.TotalScore));
- }
- if(GameResult.DoesGameHaveResult)
- {
- Console.WriteLine(string.Format("{0} won the game", GameResult.Winner.Name));
- }
- else
- {
- Console.WriteLine(string.Format("Game was drawn"));
- }
- }
- }
- class GameResult
- {
- internal Player Winner { get; set; }
- internal bool DoesGameHaveResult { get; set; }
- }
- public class Innings
- {
- public Player Batsman { get; set; }
- public Player Bowler { get; set; }
- }
- public class TossResult
- {
- public Player TossWinningPlayer { get; set; }
- public PlayingOptions TossWinningPlayerSelection { get; set; }
- }
- public enum CoinOptions
- {
- Heads = 0,
- Tails = 1
- }
- public enum PlayingOptions
- {
- Bat = 0, Bowl = 1
- }
Add Comment
Please, Sign In to add comment