Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
        private void initiateCalculation(GameDTO gameObj)
        {
            //get current AI player
            player = gameObj.Players.Where(c => c.PlayerName.Contains(name)).FirstOrDefault();
            //get all turns in game
            List <TurnDetail> allTurnDetails = gameObj.GameDetail.TurnDetail.ToList();

            prevTurnDetails.Clear();
            //get AI's stocks n convert to suitable obj type
            ownStocks = map_StockDetail_PlayerStock(player.PlayerStocks);
            //set cur price in owned stokcs
            if (gameObj.CurrentRound > 1)
            {
                ownStocks = setCurrentPriceForStock(ownStocks, allTurnDetails.Where(c => c.Turn == gameObj.CurrentRound).FirstOrDefault());
            }

            //validation
            if (player != null && prevTurnDetails != null)
            {
                game = gameObj;
                aiLogics.setGame(game);

                if (gameObj.CurrentRound == 1)
                {
                    try
                    {
                        aiLogics.BuyStocksForFirstTime(player.PlayerId);
                        list = aiLogics.returnBuySellList();
                    }
                    catch (Exception)
                    {
                    }
                }
                else if (gameObj.CurrentRound > 1 && gameObj.CurrentRound < 10 && ownStocks != null)
                {
                    for (int i = 1; i < gameObj.CurrentRound; i++)
                    {
                        TurnDetail turn = allTurnDetails.Where(c => c.Turn == i).FirstOrDefault();
                        prevTurnDetails.Add(turn);
                    }
                    startCalculations(player.PlayerId, prevTurnDetails, ownStocks);
                }
                else if (gameObj.CurrentRound == 10) // last round
                {
                    aiLogics.SellAllStocks(player.PlayerId, ownStocks);
                    list = aiLogics.returnBuySellList();
                }
            }
        }
Exemplo n.º 3
0
 private List <StockDetail> setCurrentPriceForStock(List <StockDetail> playerStocks, TurnDetail curTurn)
 {
     foreach (SectorDetail sector in curTurn.Sectors)
     {
         foreach (StockDetail stock in sector.Stocks)
         {
             foreach (StockDetail own in playerStocks)
             {
                 if (own.StockId == stock.StockId)
                 {
                     own.CurrentPrice = stock.CurrentPrice;
                 }
                 else
                 {
                     continue;
                 }
             }
         }
     }
     return(playerStocks);
 }