Exemple #1
0
 public void SpawnUnit(Unit UnitToSpawn, MapZones Side, bool UI_Show)
 {
     UnitToSpawn.Position = new Vector2(Position.X, Position.Y);
     if (Side == MapZones.RIGHT)
     {
         UnitToSpawn.CurrentFrame = 1;
     }
     else
     {
         UnitToSpawn.CurrentFrame = 5;
     }
     UnitOnTile = UnitToSpawn;
     UnitToSpawn.Spawn();
     if (TileContains == MapTiles.NONE)
     {
         TileContains = MapTiles.WITH_UNIT;
     }
     else
     {
         TileContains = MapTiles.WITH_UNIT_AND_BUILDING;
     }
     if (!UI_Show)
     {
         UnitToSpawn.UI_Visible = false;
     }
 }
Exemple #2
0
        public void HighLiteTilesWithPF(MapZones Opponent)
        {
            int          PL;
            List <Point> Marked;

            PathFinding(ActionStartPoint.X, ActionStartPoint.Y, 0, 0, Tiles[ActionStartPoint.X][ActionStartPoint.Y].UnitOnTile.MovePointsLeft, out PL, out Marked, Opponent);
            foreach (var Til in Marked)
            {
                if (!ChangedAnimTiles.Contains(Til))
                {
                    ChangedAnimTiles.Add(Til);
                }
            }
            foreach (var TilCoords in Marked)
            {
                ChangeTilesAnims(2, 1, new Animation(1, 1, true), TilCoords);
            }
        }
Exemple #3
0
        public bool Equals(ZoneData other)
        {
            if (other == null)
            {
                return(false);
            }

            return(CurrentZoneIndex.Equals(other.CurrentZoneIndex) &&
                   CurrentLevel.Equals(other.CurrentLevel) &&
                   FindIndex.Equals(other.FindIndex) &&
                   Zones.SequenceEqual(other.Zones) &&
                   ZoneInfo.SequenceEqual(other.ZoneInfo) &&
                   NumberOfZones.Equals(other.NumberOfZones) &&
                   NumberOfZoneInfos.Equals(other.NumberOfZoneInfos) &&
                   MapZones.SequenceEqual(other.MapZones) &&
                   AudioZones.SequenceEqual(other.AudioZones) &&
                   NumberOfMapZones.Equals(other.NumberOfMapZones) &&
                   NumberOfAudioZones.Equals(other.NumberOfAudioZones));
        }
Exemple #4
0
 public bool CheckTileAllowed(Point TileCoords, MapZones AllowedZones, CardCanUseOnTiles AllowedTiles)
 {
     if (AllowedZones == MapZones.RIGHT && TileCoords.Y != Tiles[0].Length - 1)
     {
         return(false);
     }
     if (AllowedZones == MapZones.LEFT && TileCoords.Y != 0)
     {
         return(false);
     }
     if (AllowedTiles == CardCanUseOnTiles.ONLY_NONE && Tiles[TileCoords.X][TileCoords.Y].TileContains != MapTiles.NONE)
     {
         return(false);
     }
     if (AllowedTiles == CardCanUseOnTiles.ONLY_WITH_BUILDING && Tiles[TileCoords.X][TileCoords.Y].TileContains != MapTiles.WITH_BUILDING)
     {
         return(false);
     }
     if (AllowedTiles == CardCanUseOnTiles.ONLY_WITH_UNIT && Tiles[TileCoords.X][TileCoords.Y].TileContains != MapTiles.WITH_UNIT)
     {
         return(false);
     }
     if (AllowedTiles == CardCanUseOnTiles.WITH_BUILDING_AND_WITH_UNIT && Tiles[TileCoords.X][TileCoords.Y].TileContains != MapTiles.WITH_UNIT_AND_BUILDING)
     {
         return(false);
     }
     if (AllowedTiles == CardCanUseOnTiles.NONE_OR_WITH_UNIT && !(Tiles[TileCoords.X][TileCoords.Y].TileContains == MapTiles.NONE || Tiles[TileCoords.X][TileCoords.Y].TileContains == MapTiles.WITH_UNIT))
     {
         return(false);
     }
     if (AllowedTiles == CardCanUseOnTiles.NONE_OR_WITH_BUILDING && !(Tiles[TileCoords.X][TileCoords.Y].TileContains == MapTiles.NONE || Tiles[TileCoords.X][TileCoords.Y].TileContains == MapTiles.WITH_BUILDING))
     {
         return(false);
     }
     if (AllowedTiles == CardCanUseOnTiles.WITH_BUILDING_OR_WITH_UNIT && !(Tiles[TileCoords.X][TileCoords.Y].TileContains == MapTiles.WITH_UNIT || Tiles[TileCoords.X][TileCoords.Y].TileContains == MapTiles.WITH_BUILDING))
     {
         return(false);
     }
     return(true);
 }
Exemple #5
0
 public void Update(ref bool IsMouseHandled, Map TiledMap, Camera cam, float CardAppearPos, bool IsPlayerTurn, MapZones PlayerZone, GameState state, int PlayerMoney)
 {
     ChooseArrow.Update();
     for (var i = 0; i < KilledNonTargetCards.Count; i++)
     {
         if (KilledNonTargetCards[i] != null)
         {
             if (KilledNonTargetCards[i].CurrAnimName == "NONE")
             {
                 KilledNonTargetCards.RemoveAt(i);
                 i--;
             }
             else
             {
                 KilledNonTargetCards[i].UpdateAnims();
             }
         }
     }
     if (_ChoosedCard == -1)
     {
         for (var i = 0; i < Cards.Count; i++)
         {
             if (Cards[i] != null)
             {
                 Cards[i].MoveUpdate();
                 Cards[i].UpdateAnims();
                 if (!IsMouseHandled && Cards[i].Update() != ButtonStates.NONE)
                 {
                     IsMouseHandled = true;
                     _ChoosedCard   = i;
                 }
                 else
                 {
                     Cards[i].StopAnimation(true);
                     //Cards[i].IterationReset();
                     Cards[i].Down();
                 }
             }
         }
     }
     else
     if (Cards[_ChoosedCard] != null)
     {
         IsMouseHandled = true;
         for (var i = 0; i < Cards.Count; i++)
         {
             Cards[i].MoveUpdate();
             Cards[i].UpdateAnims();
         }
         if (MouseControl.IsLeftBtnClicked)
         {
             if (IsClick)
             {
                 IsClick = false;
                 Cards[_ChoosedCard].IsPressed = false;
             }
             else
             {
                 IsClick = true;
                 Cards[_ChoosedCard].IsPressed = true;
             }
         }
         var Upd = Cards[_ChoosedCard].Update();
         if (IsPlayerTurn && (IsClick || Upd == ButtonStates.PRESSED))
         {
             CalculateCardPosition(10, true, _ChoosedCard);
             Cards[_ChoosedCard].Down();
             Cards[_ChoosedCard].SetUpLayer();
             Cards[_ChoosedCard].Position = new Vector2(MouseControl.X - (Cards[_ChoosedCard].FrameSize.X * 0.25f), MouseControl.Y - (Cards[_ChoosedCard].FrameSize.Y * 0.25f));
             if (MouseControl.Y < CardAppearPos)
             {
                 IsMouseHandled = false;
                 if (Cards[_ChoosedCard].IsTargeted)
                 {
                     if (!TiledMap.IsAnimsChanged)
                     {
                         TiledMap.ChangeTilesAnims(2, 1, new Animation(1, 1, true), TiledMap.GetTilesByAllowedZones(Cards[_ChoosedCard].AllowedZones, Cards[_ChoosedCard].AllowedTiles));
                     }
                     Cards[_ChoosedCard].Disappear();
                     ChooseArrow.Appear();
                     ChooseArrow.BeginPoint = new Vector2((300 + CurrentScreenRes.X) / 2, CurrentScreenRes.Y + 20);
                     ChooseArrow.EndPoint   = new Vector2(MouseControl.X, MouseControl.Y);
                 }
                 else
                 {
                     Cards[_ChoosedCard].PlayAnimation("Choosed");
                 }
             }
             else
             {
                 if (Cards[_ChoosedCard].IsTargeted)
                 {
                     TiledMap.SetDefault();
                     ChooseArrow.Disappear();
                     Cards[_ChoosedCard].Appear();
                     Cards[_ChoosedCard].IsDisappearing = false;
                 }
                 else
                 {
                     Cards[_ChoosedCard].CurrentFrame = 0;
                 }
             }
         }
         else
         if (Upd != ButtonStates.NONE)
         {
             if (Upd == ButtonStates.CLICKED)
             {
                 Cards[_ChoosedCard].Down();
                 if (Cards[_ChoosedCard].IsTargeted)
                 {
                     ChooseArrow.Disappear();
                     Cards[_ChoosedCard].Appear();
                     Cards[_ChoosedCard].IsDisappearing = false;
                 }
                 else
                 {
                     Cards[_ChoosedCard].StopAnimation(true);
                 }
                 if (MouseControl.Y < CardAppearPos)
                 {
                     var  Tmp = TiledMap.GetTileIJByCoords(MouseControl.MouseToWorldCoords(cam));
                     Tile TmpTile;
                     if (Tmp != null)
                     {
                         TmpTile = TiledMap.GetTile(Tmp[0], Tmp[1]);
                     }
                     else
                     {
                         TmpTile = null;
                     }
                     if (Cards[_ChoosedCard].IsTargeted)
                     {
                         if (TmpTile != null && PlayerMoney >= Convert.ToInt32(Cards[_ChoosedCard].MoneyInfo.Text) && TiledMap.CheckTileAllowed(new Point(Tmp[0], Tmp[1]), PlayerZone, Cards[_ChoosedCard].AllowedTiles))        //DONE: Убрать костыль TmpTile.NotSelectedFrame != 0, ввести тип Player для поиска правильной стороны
                         {
                             //TEST: Юниты
                             //TmpTile.SpawnUnit(new Unit(Vector2.Zero, GameContent.UnitTextures[0], GameContent.UI_Info_Allied, GameContent.UI_InfoFont, Color.White, 392, 20, 5, 3, 6, 1, 2, Side.PLAYER, AttScript, ScrForUnit, new Point(Tmp[0], Tmp[1]), new Animation(8, 17, false), 0.4f), MapZones.RIGHT, TiledMap.UI_VisibleState);
                             CommandParser.SendCommandToGameServer(new string[] { "SPAWN", _ChoosedCard.ToString(), Tmp[0].ToString(), Tmp[1].ToString() });
                             state.SetEnemyTurn();
                             Cards.RemoveAt(_ChoosedCard);
                         }
                         else
                         {
                             CalculateCardPosition(10, true);
                         }
                     }
                     else
                     {
                         Cards[_ChoosedCard].StopAnimation(true);
                         KilledNonTargetCards.Add(new Card(Cards[_ChoosedCard]));
                         KilledNonTargetCards.Last().Disappear();
                         Cards.RemoveAt(_ChoosedCard);
                     }
                     TiledMap.SetDefault();
                 }
                 else
                 {
                     CalculateCardPosition(10, true);
                 }
                 _ChoosedCard = -1;
             }
         }
         else
         {
             Cards[_ChoosedCard].Down();
             //Cards[_ChoosedCard].IterationReset();
             _ChoosedCard = -1;
         }
     }
 }
Exemple #6
0
        public void Update(ref bool IsMouseHandled, Map map, Hand hand, Camera cam, GameMenu Menu, MapZones Opponent)
        {
            EnemyTurnMoveProcess();
            Br.UpdateAnims();
            if (_IsEndGame)
            {
                if (iteration < 300)
                {
                    iteration++;
                    if (iteration >= 60 && iteration < 90)
                    {
                        EndGame.Visible = true;
                        EndGame.Scale  -= new Vector2(0.0333f);
                    }
                }
                else
                {
                    if (iteration == 300)
                    {
                        Parent.EndGame();
                        iteration++;
                    }
                }
            }
            else
            if (_IsVs)
            {
                Cardchoose.Update();
                if (ChooseConfirm.Update() == ButtonStates.CLICKED)
                {
                    Parent.IsNotLockClick = false;
                    ChooseConfirm.Visible = false;
                    var replacedcards = Cardchoose.GetReplacedCards();
                    var command       = new List <string>();
                    for (var i = 0; i < replacedcards.Length; i++)
                    {
                        if (replacedcards[i] == true)
                        {
                            command.Add(i.ToString());
                        }
                    }
                    if (command.Count == 0)
                    {
                        command.Add("NONE");
                    }
                    CommandParser.SendCommandToGameServer(command.ToArray());
                }
                IsMouseHandled = true;
                if (iteration < 120)
                {
                    if (IsStartVs && iteration > 80)
                    {
                        PlayerIcon.Position   += new Vector2((_DestinationPointPlayer.X - PlayerIcon.Position.X) / 8, 0);
                        OpponentIcon.Position -= new Vector2((OpponentIcon.Position.X - _DestinationPointOpponent.X) / 8, 0);
                        PlayerName.Position    = new Vector2(PlayerIcon.Position.X + PlayerIcon.Texture.Width / 2 * PlayerIcon.Scale.X - PlayerName.Font.MeasureString(PlayerName.Text).X, PlayerIcon.Position.Y + PlayerIcon.Texture.Height * PlayerIcon.Scale.Y);
                        OpponentName.Position  = new Vector2(OpponentIcon.Position.X + OpponentIcon.Texture.Width / 2 * OpponentIcon.Scale.X - OpponentName.Font.MeasureString(OpponentName.Text).X, OpponentIcon.Position.Y + OpponentIcon.Texture.Height * OpponentIcon.Scale.Y);
                    }
                    if (IsStopVs && iteration > 80)
                    {
                        PlayerIcon.Position   -= _TmpPlDistance;
                        OpponentIcon.Position -= _TmpOpDistance;
                        PlayerIcon.Scale      -= _TmpIconScale;
                        OpponentIcon.Scale    -= _TmpIconScale;
                        PlayerName.Position   -= _TmpPlNameDistance;
                        OpponentName.Position -= _TmpOpNameDistance;
                        PlayerName.Scale      -= _TmpTextScale;
                        OpponentName.Scale    -= _TmpTextScale;
                        Vs.Visible             = false;
                    }
                    if (iteration == 119)
                    {
                        if (IsStartVs)
                        {
                            IsStartVs = false;
                            StopVS();
                        }
                        else
                        if (IsStopVs)
                        {
                            IsStopVs                = false;
                            PlayerIcon.Position     = Vector2.Zero;
                            OpponentIcon.Position   = new Vector2(_CurrentScreenRes.X - OpponentIcon.Texture.Width * OpponentIcon.Scale.X, 0);
                            PlayerIcon.Scale        = new Vector2(0.4f);
                            OpponentIcon.Scale      = new Vector2(0.4f);
                            PlayerName.Scale        = Vector2.One;
                            OpponentName.Scale      = Vector2.One;
                            PlayerName.Position     = PlayerIcon.Position + new Vector2(PlayerIcon.Texture.Width * PlayerIcon.Scale.X + 10, 0);
                            OpponentName.Position   = OpponentIcon.Position - new Vector2(OpponentName.Font.MeasureString(OpponentName.Text).X + 10, 0);
                            ChooseText.Visible      = true;
                            ChooseOrderText.Visible = true;
                            ChooseConfirm.Visible   = true;
                            var Cards = new Card[ShowingCards.Length];
                            for (var i = 0; i < ShowingCards.Length; i++)
                            {
                                Cards[i] = new Card(Vector2.One, GameContent.CardTexture, GameContent.UnitCards[ShowingCards[i]].Card_Decoration, new Vector2(16, 9), 200, 10, 0, 13, new Animation(14, 16, true), new Animation(2, 6, false), new Animation(7, 12, false), new Animation(1, 1, true), 0, GameContent.UI_InfoFont, Color.White, GameContent.UnitCards[ShowingCards[i]].Name, GameContent.UnitCards[ShowingCards[i]].Damage.ToString(), GameContent.UnitCards[ShowingCards[i]].Armor.ToString(), GameContent.UnitCards[ShowingCards[i]].AttackRadius.ToString(), GameContent.UnitCards[ShowingCards[i]].Speed.ToString(), GameContent.UnitCards[ShowingCards[i]].HP.ToString(), GameContent.UnitCards[ShowingCards[i]].Cost.ToString(), 141, 315, 4, 4, 37, true, Parent.PlayerSide, Layer: 0.001f);
                            }
                            Cardchoose.ShowCards(true,
                                                 Cards);
                        }
                        else
                        {
                            _IsVs = false;

                            ChooseText.Visible      = false;
                            ChooseOrderText.Visible = false;
                            ChooseText.Text         = "Выберите карту";
                            ChooseText.Position     = new Vector2((CurrentScreenRes.X - ChooseText.Font.MeasureString(ChooseText.Text).X) / 2, CurrentScreenRes.Y / 2 - 250);
                            hand.AddCards(20, Cardchoose.GetCards(true).ToArray());
                            Cardchoose.ClearCardList();
                            Br.ScreenBrUp();
                        }
                    }
                    iteration++;
                }
            }
            else
            if (IsPlayerTurnStarted)
            {
                if (iteration < 100)
                {
                    NewTurnText.Update();
                    if (iteration == 79)
                    {
                        NewTurnText.Disappear();
                    }
                    iteration++;
                }
                else
                {
                    if (!IsPlayerTurnCardShown)
                    {
                        IsPlayerTurnCardShown = true;
                        ChooseText.Visible    = true;

                        var Cards = new Card[ShowingCards.Length];
                        for (var i = 0; i < ShowingCards.Length; i++)
                        {
                            Cards[i] = new Card(Vector2.One, GameContent.CardTexture, GameContent.UnitCards[ShowingCards[i]].Card_Decoration, new Vector2(16, 9), 200, 10, 0, 13, new Animation(14, 16, true), new Animation(2, 6, false), new Animation(7, 12, false), new Animation(1, 1, true), 0, GameContent.UI_InfoFont, Color.White, GameContent.UnitCards[ShowingCards[i]].Name, GameContent.UnitCards[ShowingCards[i]].Damage.ToString(), GameContent.UnitCards[ShowingCards[i]].Armor.ToString(), GameContent.UnitCards[ShowingCards[i]].AttackRadius.ToString(), GameContent.UnitCards[ShowingCards[i]].Speed.ToString(), GameContent.UnitCards[ShowingCards[i]].HP.ToString(), GameContent.UnitCards[ShowingCards[i]].Cost.ToString(), 141, 315, 4, 4, 37, true, Parent.PlayerSide, Layer: 0.001f);
                        }
                        Cardchoose.ShowCards(false, Cards);
                    }
                    var Upd = Cardchoose.Update();
                    if (Upd != -1)
                    {
                        Cardchoose.Enabled = false;
                        //Отправить на серв данные
                        CommandParser.SendCommandToGameServer(new string[] { "CHOOSE", Upd.ToString() });
                    }
                }
            }
            else
            {
                if (!IsMouseHandled)
                {
                    if (MouseControl.X < UI_BottomLeft.Texture.Width)
                    {
                        if (MouseControl.Y > _CurrentScreenRes.Y - UI_BottomLeft.Texture.Height)
                        {
                            IsMouseHandled = true;
                        }
                    }
                    else
                    if (MouseControl.Y > _CurrentScreenRes.Y - UI_Bottom.Texture.Height)
                    {
                        IsMouseHandled = true;
                    }
                    else
                    if (MouseControl.Y < UI_UpLeft.Texture.Height)
                    {
                        IsMouseHandled = true;
                    }
                }

                var MoveUpd     = Btn_Move.Update();
                var AttackUpd   = Btn_Attack.Update();
                var EndTurnUpd  = Btn_EndTurn.Update();
                var StatsUpd    = Btn_Stats.Update();
                var ChatUpd     = Btn_Chat.Update();
                var GameMenuUpd = Btn_GameMenu.Update();
                _ShowInf = false;

                if (!(map.IsPathFinding || map.IsAttack))
                {
                    Btn_EndTurn.Enabled = true;
                    if (!map.IsPathFinding)
                    {
                        Btn_Attack.Enabled = true;
                    }
                    if (!map.IsAttack)
                    {
                        Btn_Move.Enabled = true;
                    }
                    for (var i = 0; i < hand.CardsCount; i++)
                    {
                        hand[i].Enabled = true;
                    }
                }
                else
                {
                    for (var i = 0; i < hand.CardsCount; i++)
                    {
                        hand[i].Enabled = false;
                    }
                }

                if ((MoveUpd == ButtonStates.CLICKED || (Btn_Move.Enabled && KeyBindings.CheckKeyReleased("KEY_MOVEUNIT"))) && map.SelectedTile.X != -1)
                {
                    if (map.IsPathFinding)
                    {
                        map.IsPathFinding = false;
                        map.SetDefault();
                        map.UpdateAllTiles(cam);
                        map.CreatePathArrows(null, cam);
                    }
                    else
                    if ((map.GetTile(map.SelectedTile.X, map.SelectedTile.Y).TileContains == MapTiles.WITH_UNIT || map.GetTile(map.SelectedTile.X, map.SelectedTile.Y).TileContains == MapTiles.WITH_UNIT_AND_BUILDING) && map.GetTile(map.SelectedTile.X, map.SelectedTile.Y).UnitOnTile.side == Side.PLAYER)
                    {
                        Btn_Attack.Enabled   = false;
                        Btn_EndTurn.Enabled  = false;
                        map.IsPathFinding    = true;
                        map.ActionStartPoint = new Point(map.SelectedTile.X, map.SelectedTile.Y);
                        map.HighLiteTilesWithPF(Opponent);
                        map.UpdateAllTiles(cam);
                    }
                }
                else
                if (MoveUpd == ButtonStates.ENTERED)
                {
                    Inf.Appear();
                    Inf.Text = "Перемещение/ближний бой";
                    _ShowInf = true;
                }

                if ((AttackUpd == ButtonStates.CLICKED || (Btn_Attack.Enabled && KeyBindings.CheckKeyReleased("KEY_ATTACKUNIT"))) && map.SelectedTile.X != -1)
                {
                    if (map.IsAttack)
                    {
                        map.IsAttack = false;
                        map.SetDefault();
                        map.UpdateAllTiles(cam);
                        map.CreatePathArrows(null, cam);
                    }
                    else
                    if ((map.GetTile(map.SelectedTile.X, map.SelectedTile.Y).TileContains == MapTiles.WITH_UNIT || map.GetTile(map.SelectedTile.X, map.SelectedTile.Y).TileContains == MapTiles.WITH_UNIT_AND_BUILDING) && map.GetTile(map.SelectedTile.X, map.SelectedTile.Y).UnitOnTile.side == Side.PLAYER && map.GetTile(map.SelectedTile.X, map.SelectedTile.Y).UnitOnTile.CanAttack)
                    {
                        Btn_EndTurn.Enabled  = false;
                        Btn_Move.Enabled     = false;
                        map.IsAttack         = true;
                        map.ActionStartPoint = new Point(map.SelectedTile.X, map.SelectedTile.Y);
                        map.HighLiteTilesWithEnemy();
                        map.UpdateAllTiles(cam);
                    }
                }
                else
                if (AttackUpd == ButtonStates.ENTERED)
                {
                    Inf.Appear();
                    Inf.Text = "Дальняя атака";
                    _ShowInf = true;
                }


                if (StatsUpd == ButtonStates.CLICKED || KeyBindings.CheckKeyReleased("KEY_STATS"))
                {
                    if (map.UI_VisibleState)
                    {
                        map.HideUnitStats();
                    }
                    else
                    {
                        map.ShowUnitStats();
                    }
                }
                else
                if (StatsUpd == ButtonStates.ENTERED)
                {
                    Inf.Appear();
                    Inf.Text = "Скрыть/показать\n характ. юнитов";
                    _ShowInf = true;
                }
                if (ChatUpd == ButtonStates.ENTERED)
                {
                    Inf.Appear();
                    Inf.Text = "Чат";
                    _ShowInf = true;
                }

                if (GameMenuUpd == ButtonStates.CLICKED)
                {
                    Menu.Show(this, Parent, null);
                }
                else
                if (GameMenuUpd == ButtonStates.ENTERED)
                {
                    Inf.Appear();
                    Inf.Text = "Игровое меню";
                    _ShowInf = true;
                }

                if (PlayerPoints.Update() == ButtonStates.ENTERED)
                {
                    Inf.Appear();
                    Inf.Text = "Очки/Необходимо\nдля победы";
                    _ShowInf = true;
                }
                if (OpponentPoints.Update() == ButtonStates.ENTERED)
                {
                    Inf.Appear();
                    Inf.Text = "Очки/Необходимо\nдля победы";
                    _ShowInf = true;
                }
                if (PlayerMoney.Update() == ButtonStates.ENTERED)
                {
                    Inf.Appear();
                    Inf.Text = "Ресурсы";
                    _ShowInf = true;
                }
                if (RoundTime.Update() == ButtonStates.ENTERED)
                {
                    Inf.Appear();
                    Inf.Text = "Время хода";
                    _ShowInf = true;
                }

                //*TEST
                if (EndTurnUpd == ButtonStates.CLICKED)
                {
                    //if(IsEnemyTurn)
                    //    SetPlayerTurn(1);
                    //else
                    //    SetEnemyTurn();
                    Parent.SetEnemyTurn();
                    CommandParser.SendCommandToGameServer(new string[] { "NEXTTURN" });
                    //DONE: Отправить на сервер команду смены хода
                }
                //*TEST

                if (!_ShowInf)
                {
                    Inf.Disappear();
                }
                else
                {
                    Inf.Position = new Vector2(MouseControl.X + 10, MouseControl.Y);
                }
                Inf.Update();
                if (map.ChoosedTileI != -1)
                {
                    var tmptile = map.GetTile(map.ChoosedTileI, map.ChoosedTileJ);
                    if (tmptile.UnitOnTile != null)
                    {
                        TileName.Text = tmptile.TileName + ", " + tmptile.UnitOnTile.Name;
                    }
                    else
                    {
                        TileName.Text = map.GetTile(map.ChoosedTileI, map.ChoosedTileJ).TileName;
                    }
                    TileName.Position = new Vector2(UI_BottomLeft.Position.X + UI_BottomLeft.Texture.Width / 2 - TileName.Font.MeasureString(TileName.Text).X / 2, UI_BottomLeft.Position.Y + 5);
                }
            }
        }
Exemple #7
0
        public Card(Vector2 Position, Texture2D Texture, Texture2D ArtTexture, Vector2 ArtOffset, int FrameSizeX, int FPS, int NotSelectedFrame, int DisabledFrame, Animation Selected, Animation Disappear, Animation Appear, Animation Choosed, int ClickedFrame, SpriteFont Font, Color TextColor, string CardName, string DamageInfo, string DefenseInfo, string AttackDistanceInfo, string MovePointsInfo, string HPInfo, string MoneyInfo, int CardName_OffsY, int Stats_OffsY, int FirstStat_OffsX, int MidStat_OffsX, int StatCellWidth, bool IsTargeted, MapZones AllowedZones = MapZones.ALL, CardCanUseOnTiles AllowedTiles = CardCanUseOnTiles.ONLY_NONE, float Layer = DefaultLayer) : base(Position, Texture, FrameSizeX, FPS, NotSelectedFrame, Selected, ClickedFrame, DisabledFrame, Layer)
        {
            _UpPosition             = new Vector2(base.Position.X - FrameSize.X * 0.25f, base.Position.Y - FrameSize.Y * 0.5f);
            _DownPosition           = new Vector2(base.Position.X, base.Position.Y);
            this.ArtOffset          = ArtOffset;
            this.Stats_OffsY        = Stats_OffsY;
            this.FirstStat_OffsX    = FirstStat_OffsX;
            this.MidStat_OffsX      = MidStat_OffsX;
            this.StatCellWidth      = StatCellWidth;
            this.CardName           = new BasicText(new Vector2(Position.X + (FrameSize.X - Font.MeasureString(CardName).X) / 2, Position.Y + CardName_OffsY), CardName, Font, TextColor, Layer - 0.0001f);
            this.CardName_OffsY     = CardName_OffsY;
            this.DamageInfo         = new BasicText(new Vector2(Position.X + FirstStat_OffsX + (StatCellWidth - Font.MeasureString(DamageInfo).X) / 2, Position.Y + Stats_OffsY), DamageInfo, Font, TextColor, Layer - 0.0001f);
            this.DefenseInfo        = new BasicText(new Vector2(Position.X + FirstStat_OffsX + StatCellWidth + (StatCellWidth - Font.MeasureString(DefenseInfo).X) / 2, Position.Y + Stats_OffsY), DefenseInfo, Font, TextColor, Layer - 0.0001f);
            this.AttackDistanceInfo = new BasicText(new Vector2(Position.X + FirstStat_OffsX + MidStat_OffsX + StatCellWidth * 2 + (StatCellWidth - Font.MeasureString(AttackDistanceInfo).X) / 2, Position.Y + Stats_OffsY), AttackDistanceInfo, Font, TextColor, Layer - 0.0001f);
            this.MovePointsInfo     = new BasicText(new Vector2(Position.X + FirstStat_OffsX + MidStat_OffsX * 2 + StatCellWidth * 3 + (StatCellWidth - Font.MeasureString(MovePointsInfo).X) / 2, Position.Y + Stats_OffsY), MovePointsInfo, Font, TextColor, Layer - 0.0001f);
            this.HPInfo             = new BasicText(new Vector2(Position.X + FirstStat_OffsX + MidStat_OffsX * 2 + StatCellWidth * 4 + (StatCellWidth - Font.MeasureString(HPInfo).X) / 2, Position.Y + Stats_OffsY), HPInfo, Font, TextColor, Layer - 0.0001f);

            this.MoneyInfo = new BasicText(new Vector2(Position.X + FirstStat_OffsX + MidStat_OffsX * 2 + StatCellWidth * 4 + 1 + (StatCellWidth - Font.MeasureString(MoneyInfo).X) / 2, Position.Y + 1 + (StatCellWidth - Font.MeasureString(MoneyInfo).Y) / 2), MoneyInfo, Font, Color.Khaki, Layer - 0.0001f);

            Art = new BasicSprite(Position + ArtOffset, ArtTexture, Layer + 0.0005f);
            AddAnimation("Disappear", Disappear);
            AddAnimation("Appear", Appear);
            AddAnimation("Choosed", Choosed);
            LastLayer       = Layer;
            IsDown          = true;
            IsPressed       = false;
            LockClicking    = false;
            IsMoving        = false;
            this.IsTargeted = IsTargeted;
            MoveSpeed       = 0;
            UpdBtnAnims     = false;

            this.AllowedTiles = AllowedTiles;
            this.AllowedZones = AllowedZones;
        }
Exemple #8
0
        public void Update(ref bool IsMouseHandled, Hand hand, Camera cam, bool IsPlayerTurn, MapZones Opponent, GameState gameState)
        {
            if (MouseControl.IsRightBtnClicked)
            {
                if (IsPathFinding)
                {
                    IsPathFinding = false;
                    SetDefault();
                    UpdateAllTiles(cam);
                    CreatePathArrows(null, cam);
                }
                else
                if (IsAttack)
                {
                    IsAttack = false;
                    SetDefault();
                    UpdateAllTiles(cam);
                    CreatePathArrows(null, cam);
                }
                else
                {
                    DeSelectTile(SelectedTile);
                }
            }
            if (_ChoosedTileI == -1 || _ChoosedTileJ == -1)
            {
                for (var i = 0; i < Tiles.Length; i++)
                {
                    for (var j = 0; j < Tiles[0].Length; j++)
                    {
                        if (Tiles[i][j] != null)
                        {
                            Tiles[i][j].UpdateAnims();
                            if (!IsMouseHandled && Tiles[i][j].Update(cam: cam) != ButtonStates.NONE)
                            {
                                IsMouseHandled = true;
                                _ChoosedTileI  = i;
                                _ChoosedTileJ  = j;
                            }
                            else
                            {
                                Tiles[i][j].StopAnimation(true, Tiles[i][j].NotSelectedFrame);
                            }
                            Tiles[i][j].UpdateUnit(this, cam);
                        }
                    }
                }
            }
            else
            if (Tiles[_ChoosedTileI][_ChoosedTileJ] != null)
            {
                Tiles[_ChoosedTileI][_ChoosedTileJ].UpdateAnims();
                var UpdateResult = Tiles[_ChoosedTileI][_ChoosedTileJ].Update(cam: cam);
                if (!IsMouseHandled && UpdateResult != ButtonStates.NONE)
                {
                    IsMouseHandled = true;
                    if (UpdateResult == ButtonStates.CLICKED)
                    {
                        if (IsPathFinding)
                        {
                            IsPathFinding = false;
                            int          PL;
                            List <Point> Marked;

                            var Path = PathFinding(ActionStartPoint.X, ActionStartPoint.Y, _ChoosedTileI, _ChoosedTileJ, Tiles[ActionStartPoint.X][ActionStartPoint.Y].UnitOnTile.MovePointsLeft, out PL, out Marked, Opponent);
                            if (Path != null)
                            {
                                var Command = new string[Path.Count + 1];
                                Command[0] = "MOVE";
                                for (var i = 1; i < Command.Length; i++)
                                {
                                    Command[i] = Path[i - 1].X.ToString() + " " + Path[i - 1].Y.ToString();
                                }
                                CommandParser.SendCommandToGameServer(Command);
                                gameState.SetEnemyTurn();
                            }
                            //UnitMove(PathFinding(ActionStartPoint.X, ActionStartPoint.Y, _ChoosedTileI, _ChoosedTileJ, Tiles[ActionStartPoint.X][ActionStartPoint.Y].UnitOnTile.MovePointsLeft, out PL, out Marked, Opponent));

                            SetDefault();
                            UpdateAllTiles(cam);
                            CreatePathArrows(null, cam);
                            DeSelectTile(SelectedTile);
                            SelectTile(new Point(_ChoosedTileI, _ChoosedTileJ));
                            //Переместить
                        }
                        else
                        if (IsAttack)
                        {
                            IsAttack = false;

                            if (EnemyFinding(ActionStartPoint.X, ActionStartPoint.Y, Tiles[ActionStartPoint.X][ActionStartPoint.Y].UnitOnTile.AttackDistance).Contains(new Point(_ChoosedTileI, _ChoosedTileJ)))
                            {
                                //Tiles[ActionStartPoint.X][ActionStartPoint.Y].UnitOnTile.Attack(Tiles[_ChoosedTileI][_ChoosedTileJ].UnitOnTile);
                                CommandParser.SendCommandToGameServer(new string[] { "ATTACK", ActionStartPoint.X.ToString(), ActionStartPoint.Y.ToString(), _ChoosedTileI.ToString(), _ChoosedTileJ.ToString() });
                                gameState.SetEnemyTurn();
                            }

                            SetDefault();
                            UpdateAllTiles(cam);
                            CreatePathArrows(null, cam);
                        }
                        else
                        {
                            if (SelectedTile.X != -1)
                            {
                                DeSelectTile(SelectedTile);
                            }
                            if (IsPlayerTurn)
                            {
                                SelectTile(new Point(_ChoosedTileI, _ChoosedTileJ));
                            }
                        }
                    }

                    if (IsPathFinding)
                    {
                        int          PL;
                        List <Point> Marked;
                        CreatePathArrows(PathFinding(ActionStartPoint.X, ActionStartPoint.Y, _ChoosedTileI, _ChoosedTileJ, Tiles[ActionStartPoint.X][ActionStartPoint.Y].UnitOnTile.MovePointsLeft, out PL, out Marked, Opponent), cam);
                        foreach (var Til in Marked)
                        {
                            if (!ChangedAnimTiles.Contains(Til))
                            {
                                ChangedAnimTiles.Add(Til);
                            }
                        }
                        foreach (var TilCoords in Marked)
                        {
                            ChangeTilesAnims(2, 1, new Animation(1, 1, true), TilCoords);
                        }
                    }
                    else
                    if (IsAttack)
                    {
                        Attack_Radius.Visible = true;
                        var EnFind = EnemyFinding(ActionStartPoint.X, ActionStartPoint.Y, Tiles[ActionStartPoint.X][ActionStartPoint.Y].UnitOnTile.AttackDistance);
                        foreach (var Til in EnFind)
                        {
                            if (!ChangedAnimTiles.Contains(Til))
                            {
                                ChangedAnimTiles.Add(Til);
                            }
                        }
                        foreach (var TilCoords in EnFind)
                        {
                            ChangeTilesAnims(2, 1, new Animation(1, 1, true), TilCoords);
                        }
                        if (EnFind.Contains(new Point(_ChoosedTileI, _ChoosedTileJ)))
                        {
                            var TmpList = new List <Point>();
                            TmpList.Add(new Point(ActionStartPoint.X, ActionStartPoint.Y));
                            TmpList.Add(new Point(_ChoosedTileI, _ChoosedTileJ));
                            CreatePathArrows(TmpList, cam);
                        }
                        else
                        {
                            CreatePathArrows(null, cam);
                        }
                    }

                    if (hand.ChoosedCard == -1)
                    {
                        Info.Appear();
                        Info.Position           = new Vector2(MouseControl.X - Info.Texture.Width / 2, MouseControl.Y + 20);
                        Info.NeedMovePointsText = Tiles[_ChoosedTileI][_ChoosedTileJ].MovingPointsNeeded.ToString();
                        Info.DefenseText        = Tiles[_ChoosedTileI][_ChoosedTileJ].GiveArmor.ToString();
                    }
                }
                else
                {
                    Info.Disappear();
                    Tiles[_ChoosedTileI][_ChoosedTileJ].StopAnimation(true, Tiles[_ChoosedTileI][_ChoosedTileJ].NotSelectedFrame);
                    _ChoosedTileI = -1;
                    _ChoosedTileJ = -1;
                }
                for (var i = 0; i < Tiles.Length; i++)
                {
                    for (var j = 0; j < Tiles[0].Length; j++)
                    {
                        if (Tiles[i][j] != null)
                        {
                            Tiles[i][j].UpdateUnit(this, cam);
                        }
                    }
                }
            }
            Info.Update();
            FlyingTextProcessor.Update();
        }
Exemple #9
0
        public Point[] GetTilesByAllowedZones(MapZones AllowedZones, CardCanUseOnTiles AllowedTiles)
        {
            var TileList = new List <Point>();

            if (AllowedZones == MapZones.ALL)
            {
                switch (AllowedTiles)
                {
                case CardCanUseOnTiles.ONLY_NONE:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        for (var j = 0; j < Tiles[0].Length; j++)
                        {
                            if (Tiles[i][j] != null)
                            {
                                if (Tiles[i][j].TileContains == MapTiles.NONE)
                                {
                                    TileList.Add(new Point(i, j));
                                }
                            }
                        }
                    }
                    break;

                case CardCanUseOnTiles.ONLY_WITH_BUILDING:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        for (var j = 0; j < Tiles[0].Length; j++)
                        {
                            if (Tiles[i][j] != null)
                            {
                                if (Tiles[i][j].TileContains == MapTiles.WITH_BUILDING)
                                {
                                    TileList.Add(new Point(i, j));
                                }
                            }
                        }
                    }
                    break;

                case CardCanUseOnTiles.ONLY_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        for (var j = 0; j < Tiles[0].Length; j++)
                        {
                            if (Tiles[i][j] != null)
                            {
                                if (Tiles[i][j].TileContains == MapTiles.WITH_UNIT)
                                {
                                    TileList.Add(new Point(i, j));
                                }
                            }
                        }
                    }
                    break;

                case CardCanUseOnTiles.WITH_BUILDING_AND_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        for (var j = 0; j < Tiles[0].Length; j++)
                        {
                            if (Tiles[i][j] != null)
                            {
                                if (Tiles[i][j].TileContains == MapTiles.WITH_UNIT_AND_BUILDING)
                                {
                                    TileList.Add(new Point(i, j));
                                }
                            }
                        }
                    }
                    break;

                case CardCanUseOnTiles.NONE_OR_WITH_BUILDING:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        for (var j = 0; j < Tiles[0].Length; j++)
                        {
                            if (Tiles[i][j] != null)
                            {
                                if (Tiles[i][j].TileContains == MapTiles.NONE || Tiles[i][j].TileContains == MapTiles.WITH_BUILDING)
                                {
                                    TileList.Add(new Point(i, j));
                                }
                            }
                        }
                    }
                    break;

                case CardCanUseOnTiles.NONE_OR_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        for (var j = 0; j < Tiles[0].Length; j++)
                        {
                            if (Tiles[i][j] != null)
                            {
                                if (Tiles[i][j].TileContains == MapTiles.NONE || Tiles[i][j].TileContains == MapTiles.WITH_UNIT)
                                {
                                    TileList.Add(new Point(i, j));
                                }
                            }
                        }
                    }
                    break;

                case CardCanUseOnTiles.WITH_BUILDING_OR_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        for (var j = 0; j < Tiles[0].Length; j++)
                        {
                            if (Tiles[i][j] != null)
                            {
                                if (Tiles[i][j].TileContains == MapTiles.WITH_BUILDING || Tiles[i][j].TileContains == MapTiles.WITH_UNIT)
                                {
                                    TileList.Add(new Point(i, j));
                                }
                            }
                        }
                    }
                    break;
                }
            }
            else
            if (AllowedZones == MapZones.LEFT)
            {
                switch (AllowedTiles)
                {
                case CardCanUseOnTiles.ONLY_NONE:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][0].TileContains == MapTiles.NONE)
                        {
                            TileList.Add(new Point(i, 0));
                        }
                    }
                    break;

                case CardCanUseOnTiles.ONLY_WITH_BUILDING:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][0].TileContains == MapTiles.WITH_BUILDING)
                        {
                            TileList.Add(new Point(i, 0));
                        }
                    }
                    break;

                case CardCanUseOnTiles.ONLY_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][0].TileContains == MapTiles.WITH_UNIT)
                        {
                            TileList.Add(new Point(i, 0));
                        }
                    }
                    break;

                case CardCanUseOnTiles.WITH_BUILDING_AND_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][0].TileContains == MapTiles.WITH_UNIT_AND_BUILDING)
                        {
                            TileList.Add(new Point(i, 0));
                        }
                    }
                    break;

                case CardCanUseOnTiles.NONE_OR_WITH_BUILDING:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][0].TileContains == MapTiles.NONE || Tiles[i][0].TileContains == MapTiles.WITH_BUILDING)
                        {
                            TileList.Add(new Point(i, 0));
                        }
                    }
                    break;

                case CardCanUseOnTiles.NONE_OR_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][0].TileContains == MapTiles.NONE || Tiles[i][0].TileContains == MapTiles.WITH_UNIT)
                        {
                            TileList.Add(new Point(i, 0));
                        }
                    }
                    break;

                case CardCanUseOnTiles.WITH_BUILDING_OR_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][0].TileContains == MapTiles.WITH_BUILDING || Tiles[i][0].TileContains == MapTiles.WITH_UNIT)
                        {
                            TileList.Add(new Point(i, 0));
                        }
                    }
                    break;
                }
            }
            else
            {
                switch (AllowedTiles)
                {
                case CardCanUseOnTiles.ONLY_NONE:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][Tiles[0].Length - 1].TileContains == MapTiles.NONE)
                        {
                            TileList.Add(new Point(i, Tiles[0].Length - 1));
                        }
                    }
                    break;

                case CardCanUseOnTiles.ONLY_WITH_BUILDING:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][Tiles[0].Length - 1].TileContains == MapTiles.WITH_BUILDING)
                        {
                            TileList.Add(new Point(i, Tiles[0].Length - 1));
                        }
                    }
                    break;

                case CardCanUseOnTiles.ONLY_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][Tiles[0].Length - 1].TileContains == MapTiles.WITH_UNIT)
                        {
                            TileList.Add(new Point(i, Tiles[0].Length - 1));
                        }
                    }
                    break;

                case CardCanUseOnTiles.WITH_BUILDING_AND_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][Tiles[0].Length - 1].TileContains == MapTiles.WITH_UNIT_AND_BUILDING)
                        {
                            TileList.Add(new Point(i, Tiles[0].Length - 1));
                        }
                    }
                    break;

                case CardCanUseOnTiles.NONE_OR_WITH_BUILDING:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][Tiles[0].Length - 1].TileContains == MapTiles.NONE || Tiles[Tiles[0].Length - 1][i].TileContains == MapTiles.WITH_BUILDING)
                        {
                            TileList.Add(new Point(i, Tiles[0].Length - 1));
                        }
                    }
                    break;

                case CardCanUseOnTiles.NONE_OR_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][Tiles[0].Length - 1].TileContains == MapTiles.NONE || Tiles[Tiles[0].Length - 1][i].TileContains == MapTiles.WITH_UNIT)
                        {
                            TileList.Add(new Point(i, Tiles[0].Length - 1));
                        }
                    }
                    break;

                case CardCanUseOnTiles.WITH_BUILDING_OR_WITH_UNIT:
                    for (var i = 0; i < Tiles.Length; i++)
                    {
                        if (Tiles[i][Tiles[0].Length - 1].TileContains == MapTiles.WITH_BUILDING || Tiles[i][Tiles[0].Length - 1].TileContains == MapTiles.WITH_UNIT)
                        {
                            TileList.Add(new Point(i, Tiles[0].Length - 1));
                        }
                    }
                    break;
                }
            }
            if (ChangedAnimTiles.Count > 0)
            {
                SetDefault();
            }
            ChangedAnimTiles = new List <Point>(TileList);
            return(TileList.ToArray());
        }
Exemple #10
0
        private List <Point> GetSmez(Point vers, bool isfirst, MapZones Opponent)
        {
            var list = new List <Point>();

            if (!isfirst && Tiles[vers.X][vers.Y].UnitOnTile != null)
            {
                return(list);
            }
            if (vers.X - 1 >= 0)
            {
                if (Tiles[vers.X - 1][vers.Y] != null)
                {
                    list.Add(new Point(vers.X - 1, vers.Y));
                }
            }
            if (vers.X + 1 < Tiles.Length)
            {
                if (Tiles[vers.X + 1][vers.Y] != null)
                {
                    list.Add(new Point(vers.X + 1, vers.Y));
                }
            }
            if (vers.Y % 2 == 0)
            {
                if (vers.Y + 1 < Tiles[0].Length)
                {
                    if (!(Opponent == MapZones.RIGHT && vers.Y + 1 == Tiles[0].Length - 1))
                    {
                        if (Tiles[vers.X][vers.Y + 1] != null)
                        {
                            list.Add(new Point(vers.X, vers.Y + 1));
                        }
                        if (vers.X - 1 >= 0)
                        {
                            if (Tiles[vers.X - 1][vers.Y + 1] != null)
                            {
                                list.Add(new Point(vers.X - 1, vers.Y + 1));
                            }
                        }
                    }
                }
                if (vers.Y - 1 >= 0)
                {
                    if (!(Opponent == MapZones.LEFT && vers.Y - 1 == 0))
                    {
                        if (Tiles[vers.X][vers.Y - 1] != null)
                        {
                            list.Add(new Point(vers.X, vers.Y - 1));
                        }
                        if (vers.X - 1 >= 0)
                        {
                            if (Tiles[vers.X - 1][vers.Y - 1] != null)
                            {
                                list.Add(new Point(vers.X - 1, vers.Y - 1));
                            }
                        }
                    }
                }
            }
            else
            {
                if (vers.Y + 1 < Tiles[0].Length)
                {
                    if (!(Opponent == MapZones.RIGHT && vers.Y + 1 == Tiles[0].Length - 1))
                    {
                        if (Tiles[vers.X][vers.Y + 1] != null)
                        {
                            list.Add(new Point(vers.X, vers.Y + 1));
                        }
                        if (vers.X + 1 < Tiles.Length)
                        {
                            if (Tiles[vers.X + 1][vers.Y + 1] != null)
                            {
                                list.Add(new Point(vers.X + 1, vers.Y + 1));
                            }
                        }
                    }
                }
                if (vers.Y - 1 >= 0)
                {
                    if (!(Opponent == MapZones.LEFT && vers.Y - 1 == 0))
                    {
                        if (Tiles[vers.X][vers.Y - 1] != null)
                        {
                            list.Add(new Point(vers.X, vers.Y - 1));
                        }
                        if (vers.X + 1 < Tiles.Length)
                        {
                            if (Tiles[vers.X + 1][vers.Y - 1] != null)
                            {
                                list.Add(new Point(vers.X + 1, vers.Y - 1));
                            }
                        }
                    }
                }
            }
            return(list);
        }
Exemple #11
0
        public List <Point> PathFinding(int starti, int startj, int stopi, int stopj, int MovePoints, out int PathLength, out List <Point> Marked, MapZones Opponent)
        {
            var dlini  = new double[Tiles.Length, Tiles[0].Length];
            var puti   = new List <Point> [Tiles.Length, Tiles[0].Length];
            var marked = new List <Point>();

            for (var i = 0; i < Tiles.Length; i++)
            {
                for (var j = 0; j < Tiles[0].Length; j++)
                {
                    dlini[i, j] = double.PositiveInfinity;
                }
            }
            var used    = new HashSet <Point>();
            var needuse = new HashSet <Point>();
            var first   = true;

            dlini[starti, startj] = 0;
            puti[starti, startj]  = new List <Point>
            {
                new Point(starti, startj)
            };
            needuse.Add(new Point(starti, startj));

            while (needuse.Count > 0)
            {
                var   min = double.PositiveInfinity;
                Point v   = new Point(-1, -1);
                for (var i = 0; i < Tiles.Length; i++)
                {
                    for (var j = 0; j < Tiles[0].Length; j++)
                    {
                        if (!used.Contains(new Point(i, j)) && dlini[i, j] < min)
                        {
                            min = dlini[i, j];
                            v   = new Point(i, j);
                        }
                    }
                }
                if (v.X == -1)
                {
                    break;
                }
                used.Add(v);
                needuse.Remove(v);
                foreach (var rebro in GetSmez(v, first, Opponent))
                {
                    if (!used.Contains(rebro))
                    {
                        if (Tiles[rebro.X][rebro.Y].UnitOnTile != null) //&& Tiles[rebro.X][rebro.Y].UnitOnTile.side == Side.PLAYER)
                        {
                            continue;
                        }
                        if (dlini[v.X, v.Y] + Tiles[rebro.X][rebro.Y].MovingPointsNeeded < dlini[rebro.X, rebro.Y] && dlini[v.X, v.Y] + Tiles[rebro.X][rebro.Y].MovingPointsNeeded <= MovePoints)
                        {
                            marked.Add(new Point(rebro.X, rebro.Y));
                            dlini[rebro.X, rebro.Y] = dlini[v.X, v.Y] + Tiles[rebro.X][rebro.Y].MovingPointsNeeded;
                            puti[rebro.X, rebro.Y]  = new List <Point>(puti[v.X, v.Y])
                            {
                                new Point(rebro.X, rebro.Y)
                            };
                            needuse.Add(rebro);
                        }
                    }
                }
                first = false;
            }
            PathLength = (int)dlini[stopi, stopj];
            Marked     = marked;
            return(puti[stopi, stopj]);
        }
Exemple #12
0
        public GameState(NetworkInterface NI, Game1 Parent, int ScreenWidth, int ScreenHeight, GraphicsDevice gr_Device)
        {
            this.Parent = Parent;
            this.NI     = NI;

            gr_Dev = gr_Device;

            int[][] mass = null;
            while (true)
            {
                var msg = NI.GetNextMsg();
                if (msg != null)
                {
                    var masss = (mass as object);
                    Serialization.DeSerialize(msg, ref masss, typeof(int[][]));
                    mass = masss as int[][];
                    break;
                }
            }

            var CP = new List <Point>();

            while (true)
            {
                var msg = NI.GetNextMsg();
                if (msg != null)
                {
                    string[] str;
                    var      masss = (mass as object);
                    Serialization.DeSerialize(msg, ref masss, typeof(string[]));
                    str = masss as string[];
                    foreach (var point in str)
                    {
                        var split = point.Split(' ');
                        CP.Add(new Point(Convert.ToInt32(split[0]), Convert.ToInt32(split[1])));
                    }
                    break;
                }
            }

            Log.SendMessage("Ожидание команды начала игры");

            var player1_name = "";
            var player2_name = "";
            var player_money = "";
            var player1_icon = 0;
            var player2_icon = 0;

            string[] tmpmsg = null;
            int[]    Cards  = null;
            while (true)
            {
                var msg = NI.GetNextMsg();
                if (msg != null)
                {
                    var masss = (tmpmsg as object);
                    Serialization.DeSerialize(msg, ref masss, typeof(string[]));
                    tmpmsg = masss as string[];

                    player1_name = tmpmsg[0];
                    player2_name = tmpmsg[1];
                    player_money = tmpmsg[2];
                    PlayerSide   = (tmpmsg[3] == "RIGHT") ? MapZones.RIGHT : MapZones.LEFT;
                    OpponentSide = (PlayerSide == MapZones.LEFT) ? MapZones.RIGHT : MapZones.LEFT;
                    player1_icon = Convert.ToInt32(tmpmsg[4]);
                    player2_icon = Convert.ToInt32(tmpmsg[5]);
                    Cards        = new int[tmpmsg.Length - 6];
                    for (var i = 6; i < tmpmsg.Length; i++)
                    {
                        Cards[i - 6] = Convert.ToInt32(tmpmsg[i]);
                    }
                    break;
                }
            }

            watch = new Stopwatch();//ДЫБГ
            var MapArr = new Tile[8][];
            var Rnd    = new Random();

            for (var i = 0; i < 8; i++)
            {
                MapArr[i] = new Tile[15];
                for (var j = 0; j < 15; j++)
                {
                    if (j % 2 == 0)
                    {
                        MapArr[i][j] = new Tile(new Vector2(j * 294, i * 339), GameContent.TileBorder, GameContent.TileBorder_HL, GameContent.TileTypes[mass[i][j]].Tile_Decoration, 392, 20, 0, new Animation(1, 1, true), 1, GameContent.TileTypes[mass[i][j]].SpeedNeeded, GameContent.TileTypes[mass[i][j]].Armor, GameContent.TileTypes[mass[i][j]].Name, LAYER_MAP);
                    }
                    else
                    if (i != MapArr.GetLength(0) - 1)
                    {
                        MapArr[i][j] = new Tile(new Vector2(j * 294, i * 339 + 169.5f), GameContent.TileBorder, GameContent.TileBorder_HL, GameContent.TileTypes[mass[i][j]].Tile_Decoration, 392, 20, 0, new Animation(1, 1, true), 1, GameContent.TileTypes[mass[i][j]].SpeedNeeded, GameContent.TileTypes[mass[i][j]].Armor, GameContent.TileTypes[mass[i][j]].Name, LAYER_MAP);
                    }
                    else
                    {
                        MapArr[i][j] = null;
                    }
                }
            }


            Map = new Map(MapArr, 0, 1, new Animation(1, 1, true), GameContent.ArrowSegment, GameContent.ArrowEnd, GameContent.UI_TileInfo, GameContent.Tile_ControlPoint_Neutral, GameContent.Tile_ControlPoint_Allied, GameContent.Tile_ControlPoint_Enemy, GameContent.Unit_AttackRadius, GameContent.UI_InfoFont, Color.White, CP.ToArray());
            //foreach (var Til in Map)
            //    if (Til != null)
            //    {
            //        Til.Scale = new Vector2(2, 2);
            //        Til.Position = new Vector2(Til.Position.X * Til.Scale.X, Til.Position.Y * Til.Scale.Y);
            //    }
            char a = Convert.ToChar(12);

            //var Arr = new Card[10];
            //Arr[0] = new Card(new Vector2(100, 300), Content.Load<Texture2D>(@"Textures\Card"), Content.Load<Texture2D>(@"Textures\Tiger"), new Vector2(16, 9), 200, 10, 0, 13, new Animation(0, 0, true), new Animation(2, 6, false), new Animation(7, 9, false), new Animation(1, 1, true), 0, Content.Load<SpriteFont>(@"Fonts\TileInfoFont"), Color.White, "Pz. VI H \"Tiger\"", "3", "1", "5", "5", "6", 141, 315, 4, 4, 37, false, Layer: LAYER_CARDS)
            //{
            //    Scale = new Vector2(0.5f, 0.5f)
            //};
            //for (var i = 1; i < Arr.Length; i++)
            //{
            //    Arr[i] = new Card(new Vector2(100 + i * 60, 300), Content.Load<Texture2D>(@"Textures\Card"), Content.Load<Texture2D>(@"Textures\Tiger"), new Vector2(16, 9), 200, 10, 0, 13, new Animation(0, 0, true), new Animation(2, 6, false), new Animation(7, 12, false), new Animation(1, 1, true), 0, Content.Load<SpriteFont>(@"Fonts\TileInfoFont"), Color.White, "Pz. VI H \"Tiger\"", "3", "1", "5", "5", "6", 141, 315, 4, 4, 37, true, Layer: LAYER_CARDS + 0.001f * i)
            //    {
            //        Scale = new Vector2(0.5f, 0.5f),
            //        AllowedZones = MapZones.RIGHT
            //    };
            //}
            Hand = new Hand(new Vector2(ScreenWidth / 2, ScreenHeight - 175), null, new Vector2(ScreenWidth, ScreenHeight), GameContent.ArrowSegment, GameContent.ArrowEnd, LAYER_CARDS);

            UI = new MainUI
                 (
                new Vector2(ScreenWidth, ScreenHeight), GameContent.UI_Main_Bottom,
                GameContent.UI_Main_Bottom_Left, GameContent.UI_Main_Up,
                GameContent.UI_Main_Up_Left, GameContent.UI_Main_Up_Right,
                GameContent.UI_Btn_NewTurn, GameContent.UI_Btn_Move,
                GameContent.UI_Btn_Attack, GameContent.UI_Btn_Menu,
                GameContent.UI_Btn_Chat, GameContent.UI_Btn_Stats,
                GameContent.UI_Player_Icons[player1_icon], GameContent.UI_Player_Icons[player2_icon],
                GameContent.UI_Flag_Player, GameContent.UI_Flag_Enemy,
                GameContent.UI_Money, GameContent.UI_HourGlass,
                GameContent.UI_Vs, GameContent.UI_AlliedPoint,
                GameContent.UI_EnemyPoint, GameContent.UI_NeutralPoint, GameContent.UI_EnemyTurn,
                GameContent.UI_VictoryImage, GameContent.UI_LoseImage,
                GameContent.UI_ButtonFont,
                GameContent.UI_MiniFont,
                GameContent.UI_NewTurnFont,
                gr_Device, this,
                player1_name, player2_name,
                0, 1, 0, 1, 50,
                Convert.ToInt32(player_money), 1,
                "1:30", new string[] { "A", "B", "C" },
                Cards, (Cards.Length == 3) ? true : false,
                LAYER_UI_FAR);
            // TODO: use this.Content to load your game content here
            cam       = new Camera(new Vector2(ScreenWidth, ScreenHeight));
            cam.Zoom  = 0.25f;
            laststate = 0;

            KeyBindings.Init();
            KeyBindings.RegisterKeyBind("KEY_MOVEUNIT", Keys.M);
            KeyBindings.RegisterKeyBind("KEY_ATTACKUNIT", Keys.F);
            KeyBindings.RegisterKeyBind("KEY_STATS", Keys.T);
            KeyBindings.RegisterKeyBind("KEY_CAMMOVE_UP", Keys.W);
            KeyBindings.RegisterKeyBind("KEY_CAMMOVE_DOWN", Keys.S);
            KeyBindings.RegisterKeyBind("KEY_CAMMOVE_LEFT", Keys.A);
            KeyBindings.RegisterKeyBind("KEY_CAMMOVE_RIGHT", Keys.D);

            UnitAttEngine = new Script("", "GameCursachProject", false);

            //TEST
            //Map.GetTile(4, 6).SpawnUnit(new Unit(Vector2.Zero, GameContent.UnitTextures[0], GameContent.UI_Info_Enemy, GameContent.UI_InfoFont, Color.White, 392, 20, 5, 3, 6, 1, 2, Side.OPPONENT, GameContent.UnitAttackScripts[0], UnitAttEngine, new Point(4, 6), new Animation(8, 17, false), 0.4f), MapZones.RIGHT, Map.UI_VisibleState);
            //TEST
            SetEnemyTurn();
        }