async Task GetPositionsAsync()
        {
            if (IsBusy)
            {
                return;
            }
            try
            {
                IsBusy = true;
                var positions = await App.PositionsSightsDB.GetPositionsAsync();

                positions.Sort();
                Positions.Clear();
                foreach (var position in positions)
                {
                    Positions.Add(position);
                }
            }
            catch (Exception ex)
            {
                await App.Current.MainPage.DisplayAlert("Error!", ex.Message, "OK");
            }
            finally
            {
                IsBusy = false;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// The add position.
        /// </summary>
        /// <param name="input">
        /// The input.
        /// </param>
        public bool AddPosition(string input)
        {
            if (Positions == null)
            {
                Positions = new List <Position>();
            }

            try
            {
                string pattern = "^[a-hA-H][1-9]$";
                Match  m       = Regex.Match(input, pattern, RegexOptions.IgnoreCase);
                if (m.Success)
                {
                    var letter = (Letters)Enum.Parse(typeof(Letters), input.ToUpper().Substring(0, 1));
                    var number = int.Parse(input.Substring(1, 1));
                    Positions.Add(new Position {
                        Column = letter, Row = number
                    });
                    return(true);
                }
                else
                {
                    Console.WriteLine(Battleship.GameController.GameController.MensajeDeError());
                    return(false);
                }
            }
            catch
            {
                return(false);
            }
        }
Ejemplo n.º 3
0
 public void Update(Vector2 position, Vector2 velocity)
 {
     Positions.Add(position);
     ActualPosition = position;
     Velocities.Add(velocity);
     ActualVelocity = velocity;
 }
Ejemplo n.º 4
0
 public void AddOrUpdatePosition(decimal averagePrice, int quanity, TradeType tradeType)
 {
     quanity = tradeType == TradeType.Long ? quanity : (quanity * -1);
     if (Positions.Count == 0)
     {
         Positions.Add(new Position()
         {
             Average = averagePrice, Quantity = quanity, TradeType = tradeType, LTP = averagePrice
         });
     }
     else
     {
         var position = Positions.First();
         if (position.TradeType == tradeType)
         {
             position.Quantity += quanity;
         }
         else
         {
             int remainingQuantity = position.Quantity + quanity;
             if (remainingQuantity == 0)
             {
                 LastTradePnL = position.PnL < -0.05m ? -0.05m : position.PnL;
                 PnL         += LastTradePnL;
                 Positions.Remove(position);
             }
             else
             {
                 position.Quantity = remainingQuantity;
                 LastTradePnL      = position.PnL < -0.05m ? -0.05m : position.PnL;
                 PnL += LastTradePnL;
             }
         }
     }
 }
        public bool AddPosition(ref IContractModel instrument, PositionEnum type, int amount, decimal price)
        {
            if (instrument.IsValidContractAmount(amount) && CalculateBTCMarginRequirement(instrument, type, amount, price) < BTCBalance)
            {
                var localInstrument  = instrument;
                var existingPosition = Positions.FirstOrDefault(x => x.Instrument.Name == localInstrument.Name);
                if (existingPosition == null)
                {
                    Positions.Add(new Position(amount, price, type, ref instrument));
                    BTCBalance -= instrument.MarketFee(amount / price);
                    OnBalanceChangeMessage(new BalanceChangeEventArgs(BTCBalance));
                }
                else
                {
                    if (existingPosition.Type == type)
                    {
                        existingPosition.Amount += amount;
                        existingPosition.Price   = decimal.Round((existingPosition.Amount + amount) / ((existingPosition.Amount / existingPosition.Price) + (amount / price)), 2);
                    }
                    else
                    {
                        existingPosition.Amount -= amount;
                        var realisedPnl  = existingPosition.UnrealisedPnl;
                        var positionType = existingPosition.Type;
                        if (existingPosition.Amount < 0)
                        {
                            existingPosition.Type          = existingPosition.Type == PositionEnum.Buy ? PositionEnum.Sell : PositionEnum.Buy;
                            existingPosition.Amount       *= -1;
                            existingPosition.Price         = price;
                            existingPosition.UnrealisedPnl = 0M;
                        }
                        else if (existingPosition.Amount == 0)
                        {
                            Positions.Remove(existingPosition);
                        }
                        else
                        {
                            if (existingPosition.Type == PositionEnum.Buy)
                            {
                                existingPosition.UnrealisedPnl = (existingPosition.Amount / existingPosition.Price) - (existingPosition.Amount / price);
                            }
                            else
                            {
                                existingPosition.UnrealisedPnl = (existingPosition.Amount / price) - (existingPosition.Amount / existingPosition.Price);
                            }
                            realisedPnl -= existingPosition.UnrealisedPnl;
                        }

                        BTCBalance += realisedPnl - instrument.MarketFee(amount / price);
                        OnBalanceChangeMessage(new BalanceChangeEventArgs(BTCBalance));
                        OnHistoricalPositionAddedMessage(new HistoricalPositionAddedEventArgs(new HistoricalPosition(DateTime.Now, realisedPnl, positionType, ref instrument)));
                    }
                }

                CalculateLiquidationPrice();
                return(true);
            }

            return(false);
        }
Ejemplo n.º 6
0
        private void CreatePositions()
        {
            string       tickerLast  = "noTicker";
            List <Trade> trade_iList = new List <Trade>();

            foreach (Trade trade_i in Trades)
            {
                if (trade_i.Ticker != tickerLast)
                {
                    if (trade_iList.Count > 0)
                    {
                        Position position = new Position(trade_iList, AppData);
                        position.PropertyChanged += Position_PropertyChanged;
                        Positions.Add(position);
                    }
                    trade_iList = new List <Trade>();
                }
                trade_iList.Add(trade_i);
                tickerLast = trade_i.Ticker;
                if (trade_i == Trades[Trades.Count - 1])
                {
                    Position position = new Position(trade_iList, AppData);
                    position.PropertyChanged += Position_PropertyChanged;
                    Positions.Add(position);
                }
            }

            //AccountValues.Add(new AccountValue { time = new DateTime(2018,6,10), value = 50000 });
            //AccountValues.Add(new AccountValue { time = new DateTime(2019, 6, 10), value = 300000 });
            //AccountValues.Add(new AccountValue { time = new DateTime(2020, 6, 10), value = 400000 });
        }
Ejemplo n.º 7
0
        public MovementRandomDropoff(RandomDropOff dropoff)
        {
            _dropoff = dropoff;

            Positions.Add(new Position(0, new RealPoint(_dropoff.Position.X + 300 + 40, _dropoff.Position.Y)));
            Positions.Add(new Position(180, new RealPoint(_dropoff.Position.X - 300 - 40, _dropoff.Position.Y)));
        }
Ejemplo n.º 8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="o"></param>
        /// <returns>Capital usage by this order.</returns>
        public decimal AddOrder(Order o)
        {
            Open = true;

            if (!Positions.ContainsKey(o.Instrument.ID))
            {
                Positions.Add(o.Instrument.ID, new Position(o.Instrument));
            }

            decimal orderCapUsage = Positions[o.Instrument.ID].AddOrder(o);

            _ordersRemaining--;

            if (o.CurrencyID > 1)
            {
                decimal quantity = -o.Quantity * o.Multiplier * o.Price;
                var     ft       = new FXTransaction
                {
                    FXCurrency   = o.Currency,
                    FXCurrencyID = o.CurrencyID,
                    Quantity     = quantity,
                    Proceeds     = quantity * o.FXRateToBase,
                    Cost         = -quantity * o.FXRateToBase,
                    DateTime     = o.TradeDate
                };
                AddFXTransaction(ft);
            }

            return(orderCapUsage);
        }
 public MenuExercisesWithFiltering()
 {
     Positions.Add("Dostępne zajęcia na silowni, filtrowane po dacie i godzinie");
     Positions.Add("Dostępne zajęcia na silowni, filtrowane po typie zajęć");
     Positions.Add("Dostępne zajęcia na silowni, filtrowane wg prowadzącego");
     Positions.Add("Wyjście do menu głównego");
 }
Ejemplo n.º 10
0
        private void FillPositions()
        {
            SelectedPosition = null;
            Positions.Clear();

            if (!IsConnected || SelectedVehicule == null)
            {
                return;
            }

            var positions = Enumerable.Empty <IPosition>();

            using (var service = ServiceFactories.CreateETLService())
            {
                service.ErrorOccured += OnErrorOccured;
                positions             = service.GetPositions(Token, SelectedVehicule.Data);
            }

            if (positions == null)
            {
                return;
            }
            foreach (var position in positions)
            {
                Positions.Add(new PositionViewModel(position));
            }
        }
Ejemplo n.º 11
0
        public MovementRandomPickup(GameElementZone zone)
        {
            _zone = zone;

            Positions.Add(new Position(-45, new RealPoint(1050, 400)));
            Positions.Add(new Position(-45 + 180, new RealPoint(1950, 400)));
        }
Ejemplo n.º 12
0
        private void Save(SideButton sideButton)
        {
            if (!Position.HasErrors)
            {
                switch (sideButton)
                {
                case SideButton.Add:
                    Position.Insert();
                    Positions.Add(Position);
                    break;

                case SideButton.Edit:
                    Position.Update();
                    OldPosition.Copy(Position);
                    break;
                }
                ReturnState(sideButton);
            }
            else
            {
                RadWindow.Alert(new DialogParameters
                {
                    Content = "Ada data yg masih kosong",
                    Owner   = Application.Current.MainWindow
                });
            }
        }
        //Set current culture and update UI fields
        public void SetLanguage()
        {
            Properties.Settings.Default.Language = Language;
            Properties.Settings.Default.Save();
            switch (Language)
            {
            default:
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
                break;

            case 1:
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ru-RU");
                break;
            }

            Title           = ResourceHandler.GetResource("Title");
            NameString      = ResourceHandler.GetResource("NameString");
            Retrieve        = ResourceHandler.GetResource("Retrieve");
            Clear           = ResourceHandler.GetResource("Clear");
            LanguageLabel   = ResourceHandler.GetResource("LanguageLabel");
            FrequencyLabel  = ResourceHandler.GetResource("FrequencyLabel");
            LambdaLabel     = ResourceHandler.GetResource("LambdaLabel");
            SignalTypeLabel = ResourceHandler.GetResource("SignalTypeLabel");
            CommentLabel    = ResourceHandler.GetResource("CommentLabel");

            Positions.Clear();
            Positions.Add(ResourceHandler.GetResource("JuniorResearcher"));
            Positions.Add(ResourceHandler.GetResource("Researcher"));
            Positions.Add(ResourceHandler.GetResource("SeniorResearcher"));
        }
Ejemplo n.º 14
0
        public void AddPosition(string positionCode)
        {
            var coordinate = new Coordinate(positionCode);
            var position   = new Position(coordinate, this);

            Positions.Add(position);
        }
Ejemplo n.º 15
0
        public override void ReadXml(XmlReader reader)
        {
            if (!reader.IsEmptyElement)
            {
                Positions.Clear();
                reader.ReadStartElement("Positions");
                int i = 1;
                while (reader.NodeType != XmlNodeType.EndElement)
                {
                    Positions.Add(new KneeBoardPosition(this, i++, reader.GetAttribute("ImageFilename")));
                    reader.Read();
                }
                reader.ReadEndElement();
            }
            else
            {
                reader.Read();
            }


            if (reader.Name.Equals("Alignment"))
            {
                Alignment = (ImageAlignmentPlus)Enum.Parse(typeof(ImageAlignmentPlus), reader.ReadElementString("Alignment"));
            }

            // Load base after image so size is properly persisted.
            base.ReadXml(reader);

            BeginTriggerBypass(true);
            CurrentPosition = DefaultPosition;             //
            EndTriggerBypass(true);
        }
        public AnalyticsViewModel()
        {
            Factory = new SourceInstrumentDataFactory();

            Mediator.Instance.PortfolioChanged += (s, e) =>
            {
                UpdateCurrentPortfolio(e.Portfolio);
                Positions = RepositoryReader.LoadPositions(e.Portfolio);
                UpdateCurrentPortfolioPrices(e.Portfolio);
                PortfolioProfit = PortfolioAnalytics.CalculatePortFolioProfit(Positions);
                PortfolioReturn = PortfolioAnalytics.CalculatePortfolioReturn(Positions);
                s = this;
                e.AnalyticList = HistoricalReturnSeries;
            };



            Mediator.Instance.AddPosition += (s, e) =>
            {
                Positions.Add(e.Position);
                PortfolioProfit = PortfolioAnalytics.CalculatePortFolioProfit(Positions);
                PortfolioReturn = PortfolioAnalytics.CalculatePortfolioReturn(Positions);
                s = this;
                e.AnalyticList = HistoricalReturnSeries;
            };
        }
Ejemplo n.º 17
0
        public void CloneMarker()
        {
            var position = (uint)Writer.BaseStream.Position;

            Positions.Add(position);
            Allocate();
        }
Ejemplo n.º 18
0
 private void PositionAddedMessageReceived(PositionAddedMessage position)
 {
     DispatcherHelper.CheckBeginInvokeOnUI(() =>
     {
         Positions.Add(position.Position);
     });
 }
Ejemplo n.º 19
0
        private void SearchForMidway(FilterEditModel filters)
        {
            GeoCoordinate searchCoordinate;

            // get itinerary from Google Directions
            GoogleItinerary     itineraryComputer = new GoogleItinerary();
            GoogleItineraryBase response          = itineraryComputer.GetItinerary(filters.PositionA, filters.PositionB);

            // push polylines to view for rendering
            Steps = new Dictionary <double, double>();
            foreach (var step in response.routes[0].legs[0].steps)
            {
                Steps.Add(step.end_location["lat"], step.end_location["lng"]);
            }

            // compute mid point ?
            // TODO

            // if google response is not relevant, use As The Crow Flies method
            searchCoordinate = MidPoint(filters.PositionA, filters.PositionB);
            Positions.Add(filters.PositionA.Latitude, filters.PositionA.Longitude);
            Positions.Add(filters.PositionB.Latitude, filters.PositionB.Longitude);

            InitLocationsByCoordinate(searchCoordinate, filters.OnlyOpenBars);
        }
Ejemplo n.º 20
0
        public void ProcessItemsAt(DateTime date)
        {
            //select the orders from today
            var todaysOrders = _allOrders.Where(x => x.TradeDate.Date == date).ToList();


            foreach (Order o in todaysOrders)
            {
                //Add orders to their respective trades
                if (o.TradeID.HasValue)
                {
                    TradeTrackers[o.TradeID.Value].AddOrder(o);
                }

                //add orders to positions
                if (!Positions.ContainsKey(o.InstrumentID))
                {
                    Positions.Add(o.InstrumentID, new Position(o.Instrument));
                }
                Positions[o.InstrumentID].AddOrder(o);
            }

            AddTodaysCashTransactions(date);
            AddTodaysFxTransactions(date);
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Add the CTs to the trade trackers
        /// </summary>
        private void AddTodaysCashTransactions(DateTime date)
        {
            if (!_cashTransactionsByDate.ContainsKey(date.Date))
            {
                return;
            }

            foreach (CashTransaction ct in _cashTransactionsByDate[date.Date].Where(x => x.TradeID.HasValue))
            {
                //add to trade
                TradeTrackers[ct.TradeID.Value].AddCashTransaction(ct);

                //add to position
                if (ct.InstrumentID.HasValue)
                {
                    if (!Positions.ContainsKey(ct.InstrumentID.Value))
                    {
                        Positions.Add(ct.InstrumentID.Value, new Position(ct.Instrument));
                    }
                    Positions[ct.InstrumentID.Value].AddCashTransaction(ct);
                }
                else
                {
                    Positions[NullInstrumentId].AddCashTransaction(ct);
                }
            }
        }
Ejemplo n.º 22
0
 private void SetDefault()
 {
     if (RentValues.Count() == 0 && Positions.Count() == 0 && Users.Count() == 0)
     {
         Positions.Add(new Position()
         {
             Name = "јдминистратор"
         });
         Positions.Add(new Position()
         {
             Name = "ѕользователь"
         });
         Users.Add(new User()
         {
             FirstName = "јдмин", LastName = "јдмин", Login = "******", Password = "******", PositionId = 1
         });
         RentValues.Add(new RentValue {
             Name = "—уточный", Price = 10
         });
         RentValues.Add(new RentValue {
             Name = "ћес¤чный", Price = 100,
         });
         this.SaveChanges();
     }
 }
Ejemplo n.º 23
0
    private List <Edge> ResetGraphData(AI_TYPE InType, Vector3[] InPositions)
    {
        // Lazy
        Dictionary <int, Vector3> Positions;

        if (!Map_Positions.TryGetValue(InType, out Positions))
        {
            Positions = new Dictionary <int, Vector3>();
            Map_Positions.Add(InType, Positions);
        }
        ;
        Positions.Clear();

        foreach (var pos in InPositions)
        {
            Positions.Add(Positions.Count, pos);
        }

        // Reset Graph, Restore edges of Prim to graph
        G = new Graph(Positions);
        List <Edge> edges = G.Prim();

        G.ResetAdj(edges);

        return(edges);
    }
Ejemplo n.º 24
0
        private void DrawCharacter(string text, Vector3 origin, float w, float h, TextInfo info)
        {
            Positions.Clear();
            Colors.Clear();
            TextureCoordinates.Clear();
            info.Offsets.Clear();
            // CCW from top left
            var a = new Vector2(-w / 2, -h / 2);
            var b = new Vector2(-w / 2, h / 2);
            var c = new Vector2(w / 2, -h / 2);
            var d = new Vector2(w / 2, h / 2);

            var uv_a = new Vector2(0, 0);
            var uv_b = new Vector2(0, 1);
            var uv_c = new Vector2(1, 0);
            var uv_d = new Vector2(1, 1);

            // Create foreground data
            Positions.Add(info.Origin);
            Positions.Add(info.Origin);
            Positions.Add(info.Origin);
            Positions.Add(info.Origin);

            Colors.Add(FontColor);
            Colors.Add(FontColor);
            Colors.Add(FontColor);
            Colors.Add(FontColor);

            TextureCoordinates.Add(uv_b);
            TextureCoordinates.Add(uv_d);
            TextureCoordinates.Add(uv_a);
            TextureCoordinates.Add(uv_c);

            info.Offsets.Add(a);
            info.Offsets.Add(c);
            info.Offsets.Add(b);
            info.Offsets.Add(d);

            // Create background data
            Positions.Add(info.Origin);
            Positions.Add(info.Origin);
            Positions.Add(info.Origin);
            Positions.Add(info.Origin);

            Colors.Add(BackgroundColor);
            Colors.Add(BackgroundColor);
            Colors.Add(BackgroundColor);
            Colors.Add(BackgroundColor);

            TextureCoordinates.Add(uv_a);
            TextureCoordinates.Add(uv_a);
            TextureCoordinates.Add(uv_a);
            TextureCoordinates.Add(uv_a);

            info.Offsets.Add(a);
            info.Offsets.Add(c);
            info.Offsets.Add(b);
            info.Offsets.Add(d);
        }
Ejemplo n.º 25
0
 public MenuLogin()
 {
     Positions.Add("Podaj dane logowania");
     Positions.Add("Zapomniałem loginu");
     Positions.Add("Zapomniałem Hasła");
     Positions.Add("Cofnij");
     Positions.Add("Wyjdź");
 }
Ejemplo n.º 26
0
 public void Update(Vector2 position, string typeId, int speedTurnsLeft, int abilityCooldown)
 {
     base.Update(position);
     Positions.Add(position);
     this.TypeId          = typeId;
     this.SpeedTurnsLeft  = speedTurnsLeft;
     this.AbilityCooldown = abilityCooldown;
 }
Ejemplo n.º 27
0
        private void AddPosition(PositionModel position)
        {
            Positions.Add(position);

            position.PropertyChanged += PositionPropertyChanged;

            UpdatePnl();
        }
Ejemplo n.º 28
0
        public Position CreatePosition(string id)
        {
            var position = new Position(id);

            Positions.Add(position.Id, position);

            return(position);
        }
 public MenuStartAdmin()
 {
     Positions.Add("Dostępne zajęcia na silowni");
     Positions.Add("Wyświetl zajęcia filtrowane wg kryteriów");
     Positions.Add("Zarządzaj użytkownikami");
     Positions.Add("Wyloguj");
     Positions.Add("Wyjście z programu");
 }
Ejemplo n.º 30
0
        public MovementGroundedZone(GroundedZone zone) : base()
        {
            _zone = zone;

            Positions.Add(new Position(180, new RealPoint(_zone.Position.X - 70 - 225, zone.Position.Y)));
            Positions.Add(new Position(0, new RealPoint(_zone.Position.X + 70 + 225, zone.Position.Y)));
            Positions.Add(new Position(90, new RealPoint(_zone.Position.X, zone.Position.Y + 70 + 225)));
        }
Ejemplo n.º 31
0
        public override void SetEnablePositions(ISituation situation, out Positions enableMovein, out Positions enableCapture)
        {
            enableMovein = new Positions();
            enableCapture = new Positions();

            if (this.GameSide == Enums.GameSide.White)
            {
                #region 白兵
                if (this.Position.Y < 1) return;//白兵怎么也不可能在第一行上
                Position tmpPos = Position.Empty;
                //向北
                tmpPos = this.Position.ShiftNorth();
                if (tmpPos == Position.Empty) return;
                if (!situation.ContainsPiece(tmpPos.Dot))
                {
                    enableMovein.Add(tmpPos);
                }
                //再向北(仅当在兵从未动过时)
                if (this.Position.Y == 1)
                {
                    tmpPos = tmpPos.ShiftNorth();
                    if (!situation.ContainsPiece(tmpPos.Dot))
                    {
                        enableMovein.Add(tmpPos);
                    }
                }
                //吃过路兵的判断
                if (this.Position.Y == 4)
                {
                    #region 过路兵
                    //西北
                    tmpPos = this.Position.ShiftWest();
                    if (tmpPos != null)
                    {
                        Piece pawn;
                        Game game = (Game)situation;
                        if (game.TryGetPiece(tmpPos.Dot, out pawn))
                        {
                            if (pawn is PiecePawn)
                            {
                                if (((PiecePawn)pawn).EnableEnPassanted)
                                {
                                    enableMovein.Add(this.Position.ShiftWestNorth());
                                    enableCapture.Add(tmpPos);
                                }
                            }
                        }
                    }
                    //东北
                    tmpPos = this.Position.ShiftEast();
                    if (tmpPos != null)
                    {
                        Piece pawn;
                        Game game = (Game)situation;
                        if (game.TryGetPiece(tmpPos.Dot, out pawn))
                        {
                            if (pawn is PiecePawn)
                            {
                                if (((PiecePawn)pawn).EnableEnPassanted)
                                {
                                    enableMovein.Add(this.Position.ShiftEastNorth());
                                    enableCapture.Add(tmpPos);
                                }
                            }
                        }
                    }
                    #endregion
                }
                //剑指西北
                Position.Shift(this.GameSide, situation, this.Position.ShiftWestNorth(), enableMovein, enableCapture, false);
                //剑指东北
                Position.Shift(this.GameSide, situation, this.Position.ShiftEastNorth(), enableMovein, enableCapture, false);
                #endregion
            }
            else
            {
                #region 黑兵
                if (this.Position.Y > 6) return;
                Position tmpPos = Position.Empty;
                //向南
                tmpPos = this.Position.ShiftSouth();
                if (tmpPos == Position.Empty) return;
                if (!situation.ContainsPiece(tmpPos.Dot))
                {
                    enableMovein.Add(tmpPos);
                }
                //再向南(仅当在兵从未动过时)
                if (this.Position.Y == 6)
                {
                    tmpPos = tmpPos.ShiftSouth();
                    if (!situation.ContainsPiece(tmpPos.Dot))
                    {
                        enableMovein.Add(tmpPos);
                    }
                }
                //吃过路兵的判断
                if (this.Position.Y == 3)
                {
                    #region 过路兵
                    //西南
                    tmpPos = this.Position.ShiftWest();
                    if (tmpPos != null)
                    {
                        Piece pawn;
                        Game game = (Game)situation;
                        if (game.TryGetPiece(tmpPos.Dot, out pawn))
                        {
                            if (pawn is PiecePawn)
                            {
                                if (((PiecePawn)pawn).EnableEnPassanted)
                                {
                                    enableMovein.Add(this.Position.ShiftWestSouth());
                                    enableCapture.Add(tmpPos);
                                }
                            }
                        }
                    }
                    //东南
                    tmpPos = this.Position.ShiftEast();
                    if (tmpPos != null)
                    {
                        Piece pawn;
                        Game game = (Game)situation;
                        if (game.TryGetPiece(tmpPos.Dot, out pawn))
                        {
                            if (pawn is PiecePawn)
                            {
                                if (((PiecePawn)pawn).EnableEnPassanted)
                                {
                                    enableMovein.Add(this.Position.ShiftEastSouth());
                                    enableCapture.Add(tmpPos);
                                }
                            }
                        }
                    }
                    #endregion
                }
                //剑指西南
                Position.Shift(this.GameSide, situation, this.Position.ShiftWestSouth(), enableMovein, enableCapture, false);
                //剑指东南
                Position.Shift(this.GameSide, situation, this.Position.ShiftEastSouth(), enableMovein, enableCapture, false);
                #endregion
            }
        }
Ejemplo n.º 32
0
        /// <summary>
        /// 从当前的位置移动到新位置。
        /// 而后,判断该位置中是否有棋子,并根据判断结果更新两个Position集合(可移动"位置"集合,可杀棋"位置"集合)。
        /// 并返回是否可以继续移动的判断。
        /// </summary>
        /// <param name="situation">当前局面</param>
        /// <param name="tgtPos">目标位置</param>
        /// <param name="moveInPs">可移动"位置"集合</param>
        /// <param name="capturePs">可杀棋"位置"集合</param>
        /// <param name="enableToMoved">该棋格为空时,是否可以移入,一般是指“兵”,“兵”的斜向的两个棋格对于“兵”来讲能吃子不能移入。</param>
        /// <returns>移动到新位置后是否可以继续移动(当目标棋格中无棋子)</returns>
        public static bool Shift(
            Enums.GameSide side, ISituation situation,
            Position tgtPos, Positions moveInPs, Positions capturePs, bool enableToMoved)
        {
            if (tgtPos == Position.Empty) return false;

            char pieceChar;
            if (situation.TryGetPiece(tgtPos.Dot, out pieceChar))
            {
                if (char.IsLower(pieceChar) && side == Enums.GameSide.White)
                    capturePs.Add(tgtPos);
                if (char.IsUpper(pieceChar) && side == Enums.GameSide.Black)
                    capturePs.Add(tgtPos);
                return false;
            }
            else
            {
                if (enableToMoved)
                {
                    moveInPs.Add(tgtPos);
                    return true;
                }
                else
                    return false;
            }
        }