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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }