示例#1
0
 /// <summary>
 /// Инициализация использования графэлемента в качестве анимационной иконки.
 /// </summary>
 /// <param name="graphItem">графэлемент</param>
 /// <param name="parent">окно рисования</param>
 void InitGraphItem(ref GraphItem graphItem, Control parent)
 {
     graphItem                = new GraphItem(parent);
     graphItem.Visible        = true;
     graphItem.Color          = Color.Red;
     graphItem.Active         = true;
     graphItem.CellCoordinate = new Rectangle(-1, -1, parent.Width, parent.Height);
 }
示例#2
0
 private void FormPlayerName_Load(object sender, EventArgs e)
 {
     textBoxName.Text             = PlayerName;                    // Имя текущего игрока
     graphItemIcon                = new GraphItem(this);           // Графэлемент в качестве иконки
     graphItemIcon.Visible        = true;                          // Геометрическая фигура видимая
     graphItemIcon.Color          = Color.Blue;                    // Цвет фигуры
     graphItemIcon.Active         = true;                          // Фигура пульсирует
     graphItemIcon.CellCoordinate = new Rectangle(10, 10, 80, 80); // положение и размеры ячейки графэлемента
 }
示例#3
0
 void InitGraphItem(ref GraphItem ball, Control parent)
 {
     ball = new GraphItem(parent);
     GraphItem.CurrentTypeGraphItem = CurrentGraphItem;
     ball.Visible = true;
     ball.Color = Color.Red;
     ball.Active = true;
     ball.CellCoordinate = new Rectangle(-1, -1, parent.Width, parent.Height);
 }
示例#4
0
        public FormMain()
        {
            InitializeComponent();

            // Перед загрузкой формы выделим память для всех графических элементов.
            GItems = new GraphItem[Global.NumGraphItems];
            for (int i = 0; i < Global.NumGraphItems; i++)
            {
                GItems[i] = new GraphItem(this);
            }
        }
示例#5
0
        /// <summary>
        /// Проверкана возможность перемещения графэлемента на указанное
        /// игроком место
        /// </summary>
        /// <param name="activeBall">активный графэлемент</param>
        /// <param name="placeBall">предполагаемое новое место размещения</param>
        /// <returns>false - нельзя, true - можно</returns>
        bool CheckCanMoveGraphItem(GraphItem activeGraphItem, GraphItem placeGraphItem)
        {
            int x = activeGraphItem.CellCoordinate.X;
            int y = activeGraphItem.CellCoordinate.Y;



            // Перемещать фигуру можно только по горизонтали или вертикали,
            // по диагонали нельзя.
            if (x != placeGraphItem.CellCoordinate.X && y != placeGraphItem.CellCoordinate.Y)
            {
                return(false);
            }

            // Если если есть исчезающие графэлементы, перемещеть активный тоже нельзя,
            // это может произойти когда игрок попробует переместить графэлемент во время исчезания
            // последовательности, в итоге исчезающие графэлементы изменят цвет еще оставаясь видимыми.
            for (int vanish = 0; vanish < GItems.Length; vanish++)
            {
                if (GItems[vanish].Vanish == true)
                {
                    return(false);
                }
            }

            // Вычислим по какой координате будем проверять свободность пути
            // перемещения активного шара.
            // Проверка по оси Y
            if (x == placeGraphItem.CellCoordinate.X)
            {
                // Y координата нового места размещения
                int yPlaceGraphItem = placeGraphItem.CellCoordinate.Y;
                for (int i = 0; i < 100; i++)
                {
                    // Если хоть один исследуемый графический элемент расположенный оси Y видим,
                    // и находится на пути между новым указанным пользователем местом
                    // и самим активным элементом перемещать активный графэлемент нельзя.
                    if (GItems[i].CellCoordinate.X == x && GItems[i].Visible == true &&
                        GItems[i].CellCoordinate.Y > Math.Min(y, yPlaceGraphItem) &&
                        GItems[i].CellCoordinate.Y < Math.Max(y, yPlaceGraphItem))
                    {
                        return(false);
                    }
                }

                // Если на пути нет ни одного графэлемента перемещать активный можно.
                //if (listCheck.Count == 0) return true;
            }
            // Проверка по оси Х
            else if (y == placeGraphItem.CellCoordinate.Y)
            {
                int xPlaceGraphItem = placeGraphItem.CellCoordinate.X;
                for (int i = 0; i < 100; i++)
                {
                    if (GItems[i].CellCoordinate.Y == y && GItems[i].Visible == true &&
                        GItems[i].CellCoordinate.X > Math.Min(x, xPlaceGraphItem) &&
                        GItems[i].CellCoordinate.X < Math.Max(x, xPlaceGraphItem))
                    {
                        //listCheck.Add(GItems[i]);
                        return(false);
                    }
                }
            }



            // В остальных случаях перемещать активный графэлемент нельзя.
            return(true);
        }