public override bool Equals(object obj)
        {
            if (obj == null || GetType() != obj.GetType())
            {
                return(false);
            }
            if (ReferenceEquals(this, obj))
            {
                return(true);
            }

            CrazyhouseDetailedMove move = (CrazyhouseDetailedMove)obj;

            if (move.IsDrop != IsDrop)
            {
                return(false);
            }

            if (!move.IsDrop)
            {
                return(OriginalPosition.Equals(move.OriginalPosition) &&
                       NewPosition.Equals(move.NewPosition) &&
                       Player == move.Player &&
                       Promotion == move.Promotion &&
                       Piece == move.Piece &&
                       IsCapture == move.IsCapture &&
                       Castling == move.Castling);
            }
            else
            {
                return(Player == move.Player && Drop.Equals(move.Drop));
            }
        }
Beispiel #2
0
        public void DrawOutline(SpriteBatch sb)
        {
            int width = 4;

            sb.Draw(BlankPixel, new Rectangle(Moving ? Position.ToPoint() : OriginalPosition.ToPoint(), new Point(width, TileWidth)), null, Team.Color, 0, Vector2.Zero, SpriteEffects.None, UnitLayer);
            sb.Draw(BlankPixel, new Rectangle(Moving ? Position.ToPoint() : OriginalPosition.ToPoint(), new Point(TileWidth, width)), null, Team.Color, 0, Vector2.Zero, SpriteEffects.None, UnitLayer);
            sb.Draw(BlankPixel, new Rectangle(Moving ? Position.ToPoint() : OriginalPosition.ToPoint() + new Point(SpriteSize.X * Cell - width, 0), new Point(width, TileWidth)), null, Team.Color, 0, Vector2.Zero, SpriteEffects.None, UnitLayer);
            sb.Draw(BlankPixel, new Rectangle(Moving ? Position.ToPoint() : OriginalPosition.ToPoint() + new Point(0, SpriteSize.Y * Cell - width), new Point(TileWidth, width)), null, Team.Color, 0, Vector2.Zero, SpriteEffects.None, UnitLayer);
        }
 public override bool Equals(object obj)
 {
     if (obj == null || GetType() != obj.GetType())
         return false;
     if (ReferenceEquals(this, obj))
         return true;
     MoreDetailedMove move = (MoreDetailedMove)obj;
     return OriginalPosition.Equals(move.OriginalPosition)
         && NewPosition.Equals(move.NewPosition)
         && Player == move.Player
         && Promotion == move.Promotion
         && Piece == move.Piece
         && IsCapture == move.IsCapture
         && Castling == move.Castling
         && CapturedPiece == move.CapturedPiece
         && IsChecking == move.IsChecking
         && IsEnpassant == move.IsEnpassant
         && IsCheckmate == move.IsCheckmate;
 }
Beispiel #4
0
        public override bool Equals(object obj)
        {
            if (obj == null || GetType() != obj.GetType())
            {
                return(false);
            }

            if (ReferenceEquals(this, obj))
            {
                return(true);
            }

            var move = (DetailedMove)obj;

            return(OriginalPosition.Equals(move.OriginalPosition) &&
                   NewPosition.Equals(move.NewPosition) &&
                   Player == move.Player &&
                   Promotion == move.Promotion &&
                   Piece == move.Piece &&
                   IsCapture == move.IsCapture &&
                   Castling == move.Castling);
        }
 /// <summary>
 /// 生成文字描述。
 /// </summary>
 public void GenerateFriendlyText()
 {
     var sb = new System.Text.StringBuilder();
     sb.Append(Piece.GetFriendlyName());
     sb.Append("从");
     sb.Append(OriginalPosition.ToString());
     sb.Append("到");
     sb.Append(NewPosition.ToString());
     if (IsCapture && CapturedPiece != null)
     {
         sb.Append(", 吃");
         sb.Append(CapturedPiece.GetFriendlyName());
     }
     if (Promotion.HasValue)
     {
         sb.Append(", 晋升为");
         sb.Append(ChessGame.OriginalMapPgnCharToPiece(Promotion.Value, Player).GetFriendlyName());
     }
     if (Castling.Equals(CastlingType.KingSide))
     {
         sb.Append(", 王翼易位");
     }
     if (Castling.Equals(CastlingType.QueenSide))
     {
         sb.Append(", 后翼易位");
     }
     if(IsEnpassant)
     {
         sb.Append(", 吃过路兵");
     }
     if (IsCheckmate.HasValue && IsCheckmate.Value)
     {
         sb.Append(", 将死");
     } else if (IsChecking.HasValue && IsChecking.Value)
     {
         sb.Append(", 将军");
     }
     this._storedFriendlyText = sb.ToString();
 }
Beispiel #6
0
 public override string ToString()
 {
     return(OriginalPosition.ToString() + "-" + NewPosition.ToString());
 }
Beispiel #7
0
 public string ToString(string seperation)
 {
     return(OriginalPosition.ToString() + seperation + NewPosition.ToString());
 }
 public override int GetHashCode()
 {
     return(Player.GetHashCode() ^ Card.GetHashCode() ^ OriginalPosition.GetHashCode() ^ Move.GetHashCode());
 }
 public override string ToString()
 {
     return($"card {Card}, moving {PieceType} from {OriginalPosition} to {OriginalPosition.Add(Move)}");
 }
Beispiel #10
0
        public Vector3Int GetPosition()
        {
            List <Vector3Int> cratesWithItems = new List <Vector3Int>();
            var stockpileLoc = StorageFactory.GetStockpilePosition(Job.Owner);

            cratesWithItems.Add(stockpileLoc.Position);
            bool stockpileHasItems = true;

            foreach (var item in ItemsToGet)
            {
                if (!Job.Owner.Stockpile.Contains(item))
                {
                    stockpileHasItems = false;
                }

                if (StorageFactory.ItemCrateLocations.TryGetValue(Job.Owner, out var itemCrates) && itemCrates.TryGetValue(item.Id, out var locations))
                {
                    if (!LastCratePosition.Contains(ItemsForGoal.ClosestCrate) && locations.Contains(ItemsForGoal.ClosestCrate))
                    {
                        cratesWithItems.Add(ItemsForGoal.ClosestCrate);
                    }
                    else
                    {
                        foreach (var loc in locations)
                        {
                            if (!LastCratePosition.Contains(loc))
                            {
                                cratesWithItems.AddIfUnique(loc);
                            }
                        }
                    }
                }
            }

            if (cratesWithItems.Count == 0 || cratesWithItems[0] == stockpileLoc.Position)
            {
                if (stockpileHasItems)
                {
                    WalkingTo = StorageType.Stockpile;

                    if (stockpileLoc.Position == Vector3Int.invalidPos || stockpileLoc.Position == default(Vector3Int))
                    {
                        return(Job.Owner.Banners.FirstOrDefault().Position);
                    }
                    else
                    {
                        return(stockpileLoc.Position);
                    }
                }
                else
                {
                    PandaJobFactory.SetActiveGoal(Job, new StandAtJobGoal(Job, NextGoal, OriginalPosition, ItemsToGet.FirstOrDefault()));
                    return(OriginalPosition);
                }
            }
            else
            {
                WalkingTo = StorageType.Crate;

                if (cratesWithItems.Count == 1)
                {
                    CurrentCratePosition = cratesWithItems[0];
                }
                else
                {
                    var pos = OriginalPosition.GetClosestPosition(cratesWithItems);

                    if (pos == stockpileLoc.Position)
                    {
                        WalkingTo = StorageType.Stockpile;
                        return(stockpileLoc.Position);
                    }
                    else
                    {
                        CurrentCratePosition = pos;
                    }
                }

                return(CurrentCratePosition);
            }
        }