コード例 #1
0
 public static IEnumerable <RaceDetail> ToRaceDetails(this IEnumerable <Race> races, IEnumerable <Bet> bets)
 {
     foreach (var race in races)
     {
         if (bets == null)
         {
             yield break;
         }
         var raceBets      = bets.Where(x => x.RaceId == race.Id);
         var newRaceDetail = new RaceDetail(race, raceBets)
         {
             HorseRaces = race.Horses.Select(x =>
             {
                 var raceBetsOnHorse = raceBets.Where(y => y.HorseId == x.Id).ToList();
                 var horseRace       = new HorseRace
                 {
                     Horse        = x,
                     RaceId       = race.Id,
                     NumberOfBets = raceBetsOnHorse.Count,
                     TotalBet     = raceBetsOnHorse.Sum(i => i.Stake)
                 };
                 horseRace.OwingOnWin = horseRace.TotalBet * x.Odds;
                 return(horseRace);
             })
         };
         yield return(newRaceDetail);
     }
 }
コード例 #2
0
        public List <RaceBets> GetRaceDetails()
        {
            var result  = new List <RaceBets>();
            var races   = GetAll();
            var allBets = _betServices.GetAll().ToList();

            foreach (var race in races)
            {
                var raceDetails = new RaceBets {
                    Id = race.Id, Status = race.Status, Name = race.Name
                };
                raceDetails.Bets         = allBets.Where(x => x.RaceId == race.Id).ToList();
                raceDetails.RaceTotalBet = raceDetails.Bets.Sum(x => x.Stake);
                foreach (var horse in race.Horses)
                {
                    var thisRaceHorseBets = raceDetails.Bets.Where(x => x.HorseId == horse.Id).ToList();
                    var horseRace         = new HorseRace
                    {
                        Horse        = horse,
                        RaceId       = race.Id,
                        NumberOfBets = thisRaceHorseBets.Count,
                        TotalBet     = thisRaceHorseBets.Sum(x => x.Stake)
                    };

                    horseRace.OwingOnWin = horseRace.TotalBet * horseRace.Horse.Odds;
                    raceDetails.HorseRaces.Add(horseRace);
                }
                result.Add(raceDetails);
            }
            return(result);
        }
コード例 #3
0
    public IEnumerator Scrolling()
    {
        float beginX;

        while (m_MsgQueue.Count > 0)
        {
            float     duration  = 10f;
            HorseRace horseRace = m_MsgQueue.Dequeue();
            string    msg       = horseRace.msg;
            int       loopTime  = horseRace.loopTime;
            m_TxtMsg.text = msg;

            float   txtWidth     = m_TxtMsg.preferredWidth;
            float   txtRectWidth = (float)0.5 * m_TxtMsg.rectTransform.rect.size.x;
            Vector3 pos          = m_TxtMsg.rectTransform.localPosition;

            beginX = panelRight + txtRectWidth;
            float distance = txtWidth + panelWidth;
            float endRect  = (float)0.5 * (txtRectWidth - panelWidth) - txtWidth;
            duration    = distance / speed;
            isScrolling = true;
            while (loopTime-- > 0)
            {
                Debug.Log(loopTime);
                m_TxtMsg.rectTransform.localPosition = new Vector3(beginX, pos.y, pos.z);
                m_TxtMsg.rectTransform.DOLocalMoveX(endRect, duration).SetEase(Ease.Linear);
                yield return(new WaitForSeconds(duration));
            }
            yield return(null);
        }
        isScrolling = false;
        gameObject.SetActive(false);
    }
コード例 #4
0
        public async Task <HorseRace> GetRaceDataAsync(string raceId)
        {
            var xmlText = await dataLoader.LoadDataAsync(raceId);

            if (string.IsNullOrWhiteSpace(xmlText))
            {
                throw new RaceDataInvalidException("Empty document provided");
            }

            var xdoc = XDocument.Parse(xmlText);

            var raceElements = xdoc.XPathSelectElements("/meeting/races/race");
            var raceNode     = raceElements.SingleOrDefault();

            if (raceNode == null)
            {
                // TODO: ask the business or find the feed docs and determine if we might have multiple races. If so, this
                // would need to find the right way of identifying the correct race
                throw new RaceDataInvalidException("Expected 1 race in the source document");
            }

            var race = new HorseRace()
            {
                RaceName = xdoc.XPathSelectElement("/meeting/track").Attribute("TranslatedName").Value,
                _horses  = ParseHorses(raceNode)
            };

            return(race);
        }
コード例 #5
0
        public async Task <HorseRace> GetRaceDataAsync(string raceId)
        {
            var jsonText = await dataLoader.LoadDataAsync(raceId);

            var model = JsonConvert.DeserializeObject <UkJsonRaceData>(jsonText);

            if (model?.RawData == null)
            {
                throw new RaceDataInvalidException("Source data missing RawData node");
            }
            if (model.RawData.Markets?.Count != 1)
            {
                // TODO: what if there are multiple markets? do we treat them seperately or combine their selections together? Ask the business
                throw new RaceDataInvalidException("Expected 1 market");
            }
            var market = model.RawData.Markets[0];

            var race = new HorseRace()
            {
                RaceName = model.RawData.FixtureName,
                _horses  = market.Selections.Select(s => new Horse()
                {
                    HorseName = s.Tags.GetValueOrDefault("name"),
                    Price     = s.Price
                }).ToList()
            };

            return(race);
        }
コード例 #6
0
        private Horse AddHorse(HorseRace race, Horse horse)
        {
            var addResult = race.AddHorse(horse);

            Assert.True(addResult, addResult.Message);

            return(horse);
        }
コード例 #7
0
 static void WriteRaceToConsoleInPriceOrder(HorseRace race)
 {
     Console.WriteLine("**********************");
     Console.WriteLine("Race: " + race.RaceName);
     foreach (var horse in race.Horses.OrderBy(h => h.Price))
     {
         Console.WriteLine($"Horse: {horse.HorseName}, Price: {horse.Price}");
     }
     Console.WriteLine("**********************");
 }
コード例 #8
0
ファイル: Program.cs プロジェクト: erossini/TestForCandidate
        private static void Main(string[] args)
        {
            var race = new HorseRace();

            new Menu <HorseRace>()
            .AddCommand(new PrintRaceInfo())
            .AddCommand(new AddHorseCommand())
            .AddCommand(new StartRaceCommand())
            .Run(race);
        }
コード例 #9
0
        private void BrnRunRace_Click(object sender, EventArgs e)
        {
            HorseRace horseRace = new HorseRace(horses, 110, 140);

            if (horseRace.IsValidRace())
            {
                TxtRaceWinner.Text = "The Winner Is :" + horseRace.Winner().HorseName;
            }
            else
            {
                MessageBox.Show("Margin Not Between 110% and 140%");
            }
        }
コード例 #10
0
        public HorseRace GetHorseRace(object theDeserializedObj)
        {
            var aCaulfieldRaceFeed = theDeserializedObj as CaulfieldRaceFeed;

            if (aCaulfieldRaceFeed == null ||
                aCaulfieldRaceFeed.Races == null ||
                aCaulfieldRaceFeed.Races.Length == 0 ||
                aCaulfieldRaceFeed.Races[0].Horses == null ||
                aCaulfieldRaceFeed.Races[0].Horses.Length == 0 ||
                aCaulfieldRaceFeed.Races[0].Prices == null ||
                aCaulfieldRaceFeed.Races[0].Prices.Length == 0 ||
                aCaulfieldRaceFeed.Races[0].Prices[0].HorsePrices == null ||
                aCaulfieldRaceFeed.Races[0].Prices[0].HorsePrices.Length == 0)
            {
                return(null);
            }

            var aHourseRace = new HorseRace
            {
                Track  = aCaulfieldRaceFeed.Track?.Name,
                Horses = new List <Horse>()
            };

            var aHorseNumberPriceMapping = new Dictionary <int, decimal>();

            foreach (var aHorsePrices in aCaulfieldRaceFeed.Races[0].Prices[0].HorsePrices)
            {
                aHorseNumberPriceMapping[aHorsePrices.Number] = aHorsePrices.Price;
            }

            foreach (var aCaulfieldHorse in aCaulfieldRaceFeed.Races[0].Horses)
            {
                if (aCaulfieldHorse.Name == null)
                {
                    continue;
                }

                var aHorse = new Horse {
                    Name = aCaulfieldHorse.Name
                };
                aHourseRace.Horses.Add(aHorse);

                decimal aPrice;
                if (aHorseNumberPriceMapping.TryGetValue(aCaulfieldHorse.Number, out aPrice))
                {
                    aHorse.Price = aPrice;
                }
            }

            return(aHourseRace);
        }
コード例 #11
0
ファイル: Winner.cs プロジェクト: harikumar273/Bet365
        public void TestMethod1()
        {
            List <Horse> horses = new List <Horse>
            {
                new Horse {
                    HorseName = "A", Odd = 0.5
                },
                new Horse {
                    HorseName = "B", Odd = 2
                },
                new Horse {
                    HorseName = "C", Odd = 3
                },
                new Horse {
                    HorseName = "D", Odd = 8
                }
            };
            int A = 0, B = 0, C = 0, D = 0;

            for (int x = 0; x < 1000000; x++)
            {
                HorseRace horseRace = new HorseRace(horses, 110, 140);
                Horse     horse     = horseRace.Winner();
                switch (horse.HorseName)
                {
                case "A":
                    A++;
                    break;

                case "B":
                    B++;
                    break;

                case "C":
                    C++;
                    break;

                case "D":
                    D++;
                    break;
                }
            }

            Assert.IsTrue(A >= 460000 && A <= 500000);
        }
コード例 #12
0
        public HorseRace GetHorseRace(object theDeserializedObj)
        {
            var aWolferhamptonRaceFeed = theDeserializedObj as WolferhamptonRaceFeed;

            if (aWolferhamptonRaceFeed == null ||
                aWolferhamptonRaceFeed.RawData == null ||
                aWolferhamptonRaceFeed.RawData.Markets == null ||
                aWolferhamptonRaceFeed.RawData.Markets.Length == 0 ||
                aWolferhamptonRaceFeed.RawData.Markets[0].Selections == null ||
                aWolferhamptonRaceFeed.RawData.Markets[0].Selections.Length == 0)
            {
                return(null);
            }

            var aHourseRace = new HorseRace
            {
                Track  = aWolferhamptonRaceFeed.RawData?.Tags?.Track,
                Horses = new List <Horse>()
            };

            foreach (var aSelection in aWolferhamptonRaceFeed.RawData.Markets[0].Selections)
            {
                if (aSelection.Tags == null ||
                    string.IsNullOrEmpty(aSelection.Tags.Name))
                {
                    continue;
                }

                var aHorse = new Horse
                {
                    Name  = aSelection.Tags.Name,
                    Price = aSelection.Price
                };
                aHourseRace.Horses.Add(aHorse);
            }

            return(aHourseRace);
        }
コード例 #13
0
        public void RunTest()
        {
            var race = new HorseRace();

            var winners = new Dictionary <Horse, int>();

            winners.Add(AddHorse(race, CreateHorse("FIRST", "1/2")), 1);
            winners.Add(AddHorse(race, CreateHorse("SECOND", "2/1")), 1);
            winners.Add(AddHorse(race, CreateHorse("THIRD", "3/1")), 1);
            winners.Add(AddHorse(race, CreateHorse("FOUR", "8/1")), 1);

            var raceCount = 1000000;

            for (var i = 0; i < raceCount; i++)
            {
                var winner = race.Start();
                winners[winner]++;
            }

            foreach (var winner in winners)
            {
                AssertWinCount(winner.Key, winner.Value, race.Margin, raceCount);
            }
        }