Example #1
0
        public ResultToken GetGameTrendList(int gameId)
        {
            ResultToken result = new ResultToken();

            result.Success = true;
            try
            {
                if (!GameDataManager.gameDetails.ContainsKey(gameId))
                {
                    GameDetailDTO gameDetail = new GameDetailDTO();
                    using (TrendService trendService = new TrendService())
                    {
                        gameDetail.RandomTrend = trendService.GenerateRandomTrends();
                        gameDetail.MarketTrend = trendService.GenerateMarketTrends();
                        gameDetail.SectorTrend = trendService.GenerateSectorTrends();
                    }
                    using (EventService eventService = new EventService())
                    {
                        gameDetail.EventDetail = eventService.GenerateEvents();
                    }
                    gameDetail.TurnDetail = calculateTurnScore(gameDetail);

                    GameDataManager.gameDetails.Add(gameId, gameDetail);
                }
                result.Message = "Success! Game Turn Details Generated Successfully.";
                result.Data    = (GameDetailDTO)GameDataManager.gameDetails[gameId];
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Message = ex.Message;
                Console.WriteLine(ex.ToString());
            }
            return(result);
        }
Example #2
0
        public async Task <IHttpActionResult> PostGame(Game game)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.Games.Add(game);
            await db.SaveChangesAsync();

            db.Entry(game).Reference(x => x.Publisher).Load();

            var dto = new GameDetailDTO()
            {
                Id            = game.Id,
                Name          = game.Name,
                MinPlayers    = game.MinPlayers,
                MaxPlayers    = game.MaxPlayers,
                PlayTime      = game.PlayTime,
                Age           = game.Age,
                PublisherName = game.Publisher.Name
            };

            return(CreatedAtRoute("DefaultApi", new { id = game.Id }, game));
        }
Example #3
0
        public List <AnalystDetail> getRecommendations(int gameId, int currentTurn)
        {
            GameDetailDTO        gameDetail        = GameDataManager.gameDetails[gameId];
            List <AnalystDetail> analystDetailList = new List <AnalystDetail>();

            analystDetailList = calculateValue(gameDetail, currentTurn);
            return(analystDetailList);
        }
Example #4
0
        private List <TurnDetail> calculateTurnScore(GameDetailDTO gameDetail)
        {
            List <TurnDetail> turnDetails = new List <TurnDetail>();

            int[] randomTrend = (int[])gameDetail.RandomTrend;
            int[] marketTrend = (int[])gameDetail.MarketTrend;
            Dictionary <int, int>[] sectorTrend = (Dictionary <int, int>[])gameDetail.SectorTrend;
            EventDetail[]           eventTrend  = (EventDetail[])gameDetail.EventDetail;

            var sectors = eventEntities.Sectors.ToList();

            for (int i = 0; i < GameDataManager.noOfTurns; i++)
            {
                TurnDetail tempTurn = new TurnDetail();
                tempTurn.Turn = i + 1;
                List <SectorDetail> sectoreDetailList = new List <SectorDetail>();
                foreach (var st in sectorTrend[i])
                {
                    SectorDetail sectoreDetail = new SectorDetail();

                    var tempSector = sectors.FirstOrDefault(x => x.SectorId == st.Key);

                    sectoreDetail.Sector = Mapping.Mapper.Map <SectorDTO> (tempSector);

                    var value = (st.Value + randomTrend[i] + marketTrend[i] + (((eventTrend[i] != null) && ((eventTrend[i].IsStock) || ((eventTrend[i].IsSector) && (eventTrend[i].SectorId == sectoreDetail.Sector.SectorId)))) ? eventTrend[i].Effect : 0));
                    sectoreDetail.Score = value < 0?0:value;

                    var stocks = eventEntities.Stocks.Where(a => a.SectorId == sectoreDetail.Sector.SectorId).ToList();
                    List <StockDetail> stockDetailList = new List <StockDetail>();
                    foreach (var stock in stocks)
                    {
                        StockDetail stockDetail = new StockDetail();
                        stockDetail.StockId   = stock.StockId;
                        stockDetail.StockName = stock.StockName;
                        if (i == 0)
                        {
                            stockDetail.StartingPrice = stock.StartingPrice;
                        }
                        else
                        {
                            var tempObj = turnDetails.FirstOrDefault(z => z.Turn == i);
                            stockDetail.StartingPrice = tempObj.Sectors.FirstOrDefault(x => x.Sector.SectorId == sectoreDetail.Sector.SectorId).Stocks.FirstOrDefault(y => y.StockId == stockDetail.StockId).CurrentPrice;
                        }
                        stockDetail.CurrentPrice = Decimal.Round(Decimal.Add(stockDetail.StartingPrice, Decimal.Multiply(stockDetail.StartingPrice, Decimal.Divide(sectoreDetail.Score, 100))), 2);
                        stockDetailList.Add(stockDetail);
                    }
                    sectoreDetail.Stocks = new List <StockDetail>(stockDetailList);
                    sectoreDetailList.Add(sectoreDetail);
                }
                tempTurn.Sectors = sectoreDetailList;

                turnDetails.Add(tempTurn);
            }
            return(turnDetails);
        }
Example #5
0
        private int getEventValueByStock(GameDetailDTO gameDetail, int currentTurn)
        {
            int eventValue = 0;
            int randomNo   = rnd.Next(1, 11);

            if (randomNo <= 6)
            {
                //has access to event value
                EventDetail[] eventDetails = gameDetail.EventDetail;
                if (eventDetails[currentTurn] != null)
                {
                    EventDetail eventDetail = eventDetails[currentTurn];
                    eventValue = eventDetail.Effect;
                }
            }
            return(eventValue);
        }
Example #6
0
        private int getEventValueBySector(GameDetailDTO gameDetail, int currentTurn, int sectorId)
        {
            int eventValue = 0;
            int randomNo   = rnd.Next(1, 11);

            if (randomNo <= 6)
            {
                //has access to event value
                EventDetail[] eventDetails = gameDetail.EventDetail;
                if (eventDetails[currentTurn] != null)
                {
                    EventDetail eventDetail = eventDetails[currentTurn];
                    if ((eventDetail.IsSector) && (eventDetail.SectorId == sectorId))
                    {
                        eventValue = eventDetail.Effect;
                    }
                }
            }
            return(eventValue);
        }
Example #7
0
        public GameDetailDTO GetGameData(int gameId)
        {
            GameDetailDTO returnObj = new GameDetailDTO();

            try
            {
                using (APIService apiClient = new APIService())
                {
                    var         temp   = apiClient.MakeGetRequest("api/trend?gameId=" + gameId.ToString());
                    ResultToken result = apiClient.ConvertObjectToToken(temp);
                    if (result.Success && result.Data != null)
                    {
                        returnObj = JsonConvert.DeserializeObject <GameDetailDTO>(result.Data.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                Logger logger = LogManager.GetLogger("excpLogger");
                logger.Error(ex);
            }

            return(returnObj);
        }
Example #8
0
        private List <AnalystDetail> calculateValue(GameDetailDTO gameDetail, int currentTurn)
        {
            List <AnalystDetail> analystDetailList = new List <AnalystDetail>();
            string type = "";
            string name = "";
            int    id   = 0;
            //check access to ternd value (50%)
            //gives 0 or 1
            int randomNo = rnd.Next(0, 2);

            if (randomNo == 1)
            {
                //has access to trend values
                Dictionary <int, int>[] sectorTrends = gameDetail.SectorTrend;
                int[] marketTrends = gameDetail.MarketTrend;
                int[] randomTrends = gameDetail.RandomTrend;

                int maxTurn = (currentTurn - 1) + 10;
                if (maxTurn > noOfTurns)
                {
                    maxTurn = noOfTurns;
                }

                int[] scoreValues = new int[(maxTurn - (currentTurn - 1))];
                int   count       = 0;
                int   value       = 0;

                //check if it is a sector or stock recommendation
                //gives 0 or 1
                int rand = rnd.Next(0, 2);
                if (rand == 1)
                {
                    //sector
                    //get random sector
                    var    sectors = eventEntities.Sectors.ToList();
                    Sector sector  = sectors[rnd.Next(sectors.Count)];

                    //if currentTurn=1 -> index=0
                    for (int i = (currentTurn - 1); i < maxTurn; i++)
                    {
                        type = "sector";
                        name = sector.SectorName;
                        id   = sector.SectorId;
                        //get sector trends from gamedetails
                        Dictionary <int, int> sectorTrend = sectorTrends[i];
                        int sectorTrendValue = sectorTrend[sector.SectorId];

                        //get market trends from gamedetails
                        int marketTrendValue = marketTrends[i];

                        //get random trends from gamedetails
                        int randomTrendValue = randomTrends[i];

                        //check access to event value (60%)
                        //get event from gamedetails
                        int eventValue = getEventValueBySector(gameDetail, i, sector.SectorId);

                        value = sectorTrendValue + marketTrendValue + randomTrendValue + eventValue;
                        // analystDetail.score = value;
                        scoreValues[count] = value;
                        count++;
                    }
                }
                else
                {
                    //stock
                    //get random stock
                    var   stocks = eventEntities.Stocks.ToList();
                    Stock stock  = stocks[rnd.Next(stocks.Count)];

                    //if currentTurn=1 -> index=0
                    for (int i = (currentTurn - 1); i < maxTurn; i++)
                    {
                        type = "stock";
                        name = stock.StockName;
                        id   = stock.StockId;
                        //get sector trends from gamedetails
                        Dictionary <int, int> sectorTrend = sectorTrends[i];
                        int sectorTrendValue = sectorTrend[stock.SectorId];

                        //get market trends from gamedetails
                        int marketTrendValue = marketTrends[i];

                        //get random trends from gamedetails
                        int randomTrendValue = randomTrends[i];

                        //check access to event value (60%)
                        //get event from gamedetails
                        int eventValue = getEventValueByStock(gameDetail, i);

                        value = sectorTrendValue + marketTrendValue + randomTrendValue + eventValue;
                        scoreValues[count] = value;
                        count++;
                    }
                }

                for (int i = 0; i < scoreValues.Length;)
                {
                    AnalystDetail analystDetail = new AnalystDetail();
                    analystDetail.Type  = type;
                    analystDetail.Name  = name;
                    analystDetail.Id    = id;
                    analystDetail.Score = scoreValues[i];
                    analystDetail.Turn  = currentTurn + i;

                    if (scoreValues[i] <= 0)
                    {
                        analystDetail.Action = "SELL";
                    }
                    else
                    {
                        analystDetail.Action = "BUY";
                    }

                    int duration = 1;

                    for (int j = (i + 1); j < scoreValues.Length; j++)
                    {
                        if (scoreValues[i] == scoreValues[j])
                        {
                            duration++;
                            continue;
                        }
                        else
                        {
                            break;
                        }
                    }

                    analystDetail.Duration = duration;

                    analystDetailList.Add(analystDetail);
                    i = i + duration;
                }
            }
            else
            {
                //no access to trend values
                analystDetailList = null;
            }
            return(analystDetailList);
        }