예제 #1
0
파일: Map.cs 프로젝트: rio900/voins
        public void CreateRandomMap(bool noBlock)
        {
            Calls = new List <Map_Cell>();
            MapCanvas.Children.Clear();
            _players          = new List <Player>();
            _deadPlayers      = new List <Player>();
            _killsDeath       = new List <Point>();
            _gameObjectInCall = new List <Game_Object_In_Call>();

            for (int i = 0; i < Width / 50; i++)
            {
                for (int j = 0; j < Height / 50; j++)
                {
                    Map_Cell map_Call = new Map_Cell()
                    {
                        IndexLeft = i,
                        IndexTop  = j
                    };

                    ///Это для размещения блока стены(не пробиваймые блоки)
                    if (i % 2 != 0 && j % 2 != 0)
                    {
                        if (!noBlock)
                        {
                            Unit unit = new Unit()
                            {
                                PositionX = i,
                                PositionY = j
                            };

                            UC_Block uc_Block = new UC_Block()
                            {
                                Width  = 50,
                                Height = 50
                            };
                            Canvas.SetLeft(uc_Block, i * 50);
                            Canvas.SetTop(uc_Block, j * 50);

                            ///Непроходимый блок
                            Game_Object_In_Call block = new Game_Object_In_Call()
                            {
                                EnumCallType = EnumCallType.Block,
                                View         = uc_Block
                            };
                            unit.GameObject = block;

                            map_Call.Block = true;
                            ///В этой ячейке находится непроходимый блок
                            map_Call.IUnits.Add(unit);
                            ///И его же добавим в масив всех объектов
                            GameObjectInCall.Add(block);
                            ///Отображение
                            MapCanvas.Children.Add(block.View);
                        }
                    }
                    Calls.Add(map_Call);
                }
            }
        }
예제 #2
0
파일: Map.cs 프로젝트: rio900/voins
 public void CreateObjectUnitInCall(Map_Cell item, Unit unit)
 {
     unit.CurrentMap = this;
     ///И его же добавим в масив всех объектов
     GameObjectInCall.Add(unit.GameObject);
     ///Добавляем в список всех юнитов
     item.IUnits.Add(unit);
     item.Used = true;
     ///Отображение
     MapCanvas.Children.Add(unit.GameObject.View);
 }
예제 #3
0
        void _respaumTimer_Tick(object sender, object e)
        {
            List <Map_Cell> calls = CurrentMap.Calls.Where(p => !p.Used && !p.Using && !p.Block).ToList();

            _respaumTimer.Completed -= _respaumTimer_Tick;
            _respaumTimer            = null;

            if (calls.Count != 0)
            {
                Dead = false;
                CurrentMap.DeadPlayers.Remove(this);
                Health = MaxHealth;
                Mana   = MaxMana;
                StartRegenerationTimer();

                Random   rand        = new Random((int)DateTime.Now.Ticks);
                Map_Cell respaumCall = calls[rand.Next(0, calls.Count - 1)];
                this.PositionX = respaumCall.IndexLeft;
                this.PositionY = respaumCall.IndexTop;

                CurrentMap.CreateObject(this, respaumCall.IndexLeft, respaumCall.IndexTop);
                ///Отображение
                CurrentMap.MapCanvas.Children.Add(this.GameObject.View);


                Invulnerability = true;
                ///Таймер временной неуязвимости после спаума
                _inviInvulnerabilityTimer = new Storyboard()
                {
                    Duration = TimeSpan.FromSeconds(StaticVaribl.InvulnerabilityTime)
                };
                _inviInvulnerabilityTimer.Completed += _inviInvulnerabilityTimer_Tick;
                if (!Paused)
                {
                    _inviInvulnerabilityTimer.Begin();
                }
            }
            else
            {   ///Если на карте не было места где можно воскреснуть
                ///Таймер воскрешения
                _respaumTimer = new Storyboard()
                {
                    Duration = TimeSpan.FromSeconds(RespaumTime)
                };
                _respaumTimer.Completed += _respaumTimer_Tick;
                _respaumTimer.Begin();
            }
            UpdateView();
        }
예제 #4
0
        public bool DropItem(ItemClass item)
        {
            ///Ячейка куда будет дропнут итем
            Map_Cell dropCall = null;

            ///Выбираем ячейку куда дропнуть итем
            List <Point> poin = UnitGenerator.RoundNumber(this.PositionX, this.PositionY);

            for (int i = 0; i < poin.Count; i++)
            {
                if (CurrentMap.Calls.Any(p => p.IndexLeft == poin[i].X && p.IndexTop == poin[i].Y))
                {
                    Map_Cell call = CurrentMap.Calls.Single(p => p.IndexLeft == poin[i].X && p.IndexTop == poin[i].Y);
                    ///Проверим или можно в колонку кинуть итем
                    if (!call.Used &&
                        !call.Using &&
                        !call.Block &&
                        call.Item.Count == 0)
                    {
                        dropCall = call;
                        break;
                    }
                }
            }

            if (dropCall != null)
            {
                RemoveItem(item, false);
                dropCall.Item.Add(item);
                item.PositionX   = dropCall.IndexLeft;
                item.PositionY   = dropCall.IndexTop;
                item.View.Width  = 50;
                item.View.Height = 50;
                item.ItemPosition();
                item.View.ApplayMargin(new Thickness(8));
                CurrentMap.MapCanvas.Children.Add(item.View);
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #5
0
파일: Map.cs 프로젝트: rio900/voins
        public void CreatePlayer(Player player)
        {
            Players.Add(player);
            Canvas.SetZIndex(player.GameObject.View, 1000);
            ///Если один игрок
            ///Левый верхний угол спаума
            if (Players.Count == 1)
            {
                CreateObject(player, 0, 0);
            }
            else if (Players.Count == 2)
            {
                player.PositionX = Calls.Last().IndexLeft;
                player.PositionY = Calls.Last().IndexTop;
                CreateObject(player, Calls.Last().IndexLeft, Calls.Last().IndexTop);
                //player.PositionX = Calls[2].IndexLeft;
                //player.PositionY = Calls[2].IndexTop;
                //CreateObject(player, Calls[2].IndexLeft, Calls[2].IndexTop);
            }
            else if (Players.Count == 3)
            {
                Map_Cell call = Calls[208];
                player.PositionX = call.IndexLeft;
                player.PositionY = call.IndexTop;
                CreateObject(player, call.IndexLeft, call.IndexTop);
            }
            else if (Players.Count == 4)
            {
                Map_Cell call = Calls[12];
                player.PositionX = call.IndexLeft;
                player.PositionY = call.IndexTop;
                CreateObject(player, call.IndexLeft, call.IndexTop);
            }

            #region Добавление игрока
            ///И его же добавим в масив всех объектов
            GameObjectInCall.Add(player.GameObject);
            ///Отображение
            MapCanvas.Children.Add(player.GameObject.View);
            #endregion
        }