Exemple #1
0
        public int burstX, burstY, burstDX, burstDY; //координаты и размеры взрыва

        public Bullet(int x, int y, int dx, int dy, moveDirectionEnum dir)
        {
            this.x   = x;
            this.y   = y;
            this.dx  = dx;
            this.dy  = dy;
            this.dir = dir;
            BBIT     = bullBit;
            #region выбор картинки
            switch (dir)
            {
            case moveDirectionEnum.Left:
                BBIT.RotateFlip(RotateFlipType.Rotate270FlipNone);
                break;

            case moveDirectionEnum.Right:
                BBIT.RotateFlip(RotateFlipType.Rotate90FlipNone);
                break;

            case moveDirectionEnum.Down:
                BBIT.RotateFlip(RotateFlipType.RotateNoneFlipY);
                break;
            }
            #endregion
            removed  = false;
            checkVar = checkVarEnum.barNo;
            burstX   = 0; burstY = 0; burstDX = 16; burstDY = 16;
        }
Exemple #2
0
 public Tank(int x, int y, int dx, int dy, moveDirectionEnum dir, tankTeam team)
 {
     this.x      = x;
     this.y      = y;
     this.dx     = dx;
     this.dy     = dy;
     ice         = false;
     this.dir    = dir;
     changeDir   = false;
     previousDir = dir;
     this.team   = team;
     removed     = false;
     checkVar    = checkVarEnum.barNo;
 }
Exemple #3
0
        public void CheckMap(int[,] arr) //проверка карты на наличие препятствий
        {
            checkVar = checkVarEnum.barNo;
            int iterX = x / 16;
            int iterY = y / 16;

            #region движение влево
            if (dir == moveDirectionEnum.Left)
            {
                if (iterX >= 0 && (arr[iterY, iterX] >= 4 || arr[iterY + 1, iterX] >= 4)) //если пулька сразу находится внутри препятствия
                {
                    checkVar = checkVarEnum.barLeft; burstX = iterX * 16; burstY = y - (burstDY - dy) / 2;
                    //разрушение кирпича
                    if (arr[iterY, iterX] == 4)
                    {
                        arr[iterY, iterX] = 0;
                    }
                    if (arr[iterY + 1, iterX] == 4)
                    {
                        arr[iterY + 1, iterX] = 0;
                    }
                }
                else if (x % 16 <= 10 && iterX > 0 && (arr[iterY, iterX - 1] >= 4 || arr[iterY + 1, iterX - 1] >= 4)) //если пулька приближается к препятствию (10 - шаг пульки)
                {
                    checkVar = checkVarEnum.barLeft; burstX = iterX * 16; burstY = y - (burstDY - dy) / 2;
                    //разрушение кирпича
                    if (arr[iterY, iterX - 1] == 4)
                    {
                        arr[iterY, iterX - 1] = 0; burstX = (iterX - 1) * 16; burstY = y - (burstDY - dy) / 2;
                    }
                    if (arr[iterY + 1, iterX - 1] == 4)
                    {
                        arr[iterY + 1, iterX - 1] = 0; burstX = (iterX - 1) * 16; burstY = y - (burstDY - dy) / 2;
                    }
                }
            }
            #endregion

            #region движение вправо
            if (dir == moveDirectionEnum.Right)
            {
                iterX = Convert.ToInt32(Math.Floor((double)(x + 8) / 16));
                if (iterX <= 39 && (arr[iterY, iterX] >= 4 || arr[iterY + 1, iterX] >= 4)) //если пулька сразу находится внутри препятствия
                {
                    checkVar = checkVarEnum.barRight; burstX = (iterX + 1) * 16 - burstDX; burstY = y - (burstDY - dy) / 2;
                    //разрушение кирпича
                    if (arr[iterY, iterX] == 4)
                    {
                        arr[iterY, iterX] = 0;
                    }
                    if (arr[iterY + 1, iterX] == 4)
                    {
                        arr[iterY + 1, iterX] = 0;
                    }
                }
                else if ((x + 8) % 16 >= 6 && iterX < 39 && (arr[iterY, iterX + 1] >= 4 || arr[iterY + 1, iterX + 1] >= 4)) //если пулька приближается к препятствию (6 - длина клетки минус шаг пульки)
                {
                    checkVar = checkVarEnum.barRight; burstX = (iterX + 1) * 16 - burstDX; burstY = y - (burstDY - dy) / 2;
                    //разрушение кирпича
                    if (arr[iterY, iterX + 1] == 4)
                    {
                        arr[iterY, iterX + 1] = 0; burstX = (iterX + 2) * 16 - burstDX; burstY = y - (burstDY - dy) / 2;
                    }
                    if (arr[iterY + 1, iterX + 1] == 4)
                    {
                        arr[iterY + 1, iterX + 1] = 0; burstX = (iterX + 2) * 16 - burstDX; burstY = y - (burstDY - dy) / 2;
                    }
                }
            }
            #endregion

            #region движение вверх

            if (dir == moveDirectionEnum.Up)
            {
                if (iterY >= 0 && (arr[iterY, iterX] >= 4 || arr[iterY, iterX + 1] >= 4)) //если пулька сразу находится внутри препятствия
                {
                    checkVar = checkVarEnum.barUp; burstX = x - (burstDX - dx) / 2; burstY = iterY * 16;
                    //разрушение кирпича
                    if (arr[iterY, iterX] == 4)
                    {
                        arr[iterY, iterX] = 0;
                    }
                    if (arr[iterY, iterX + 1] == 4)
                    {
                        arr[iterY, iterX + 1] = 0;
                    }
                }
                else if (y % 16 <= 10 && iterY > 0 && (arr[iterY - 1, iterX] >= 4 || arr[iterY - 1, iterX + 1] >= 4)) //если пулька приближается к препятствию (10 - шаг пульки)
                {
                    checkVar = checkVarEnum.barUp; burstX = x - (burstDX - dx) / 2; burstY = iterY * 16;
                    //разрушение кирпича
                    if (arr[iterY - 1, iterX] == 4)
                    {
                        arr[iterY - 1, iterX] = 0; burstX = x - (burstDX - dx) / 2; burstY = (iterY - 1) * 16;
                    }
                    if (arr[iterY - 1, iterX + 1] == 4)
                    {
                        arr[iterY - 1, iterX + 1] = 0; burstX = x - (burstDX - dx) / 2; burstY = (iterY - 1) * 16;
                    }
                }
            }
            #endregion

            #region движение вниз
            if (dir == moveDirectionEnum.Down)
            {
                iterY = Convert.ToInt32(Math.Floor((double)(y + 8) / 16));
                if (iterY <= 39 && (arr[iterY, iterX] >= 4 || arr[iterY, iterX + 1] >= 4)) //если пулька сразу находится внутри препятствия
                {
                    checkVar = checkVarEnum.barUp; burstX = x - (burstDX - dx) / 2; burstY = (iterY + 1) * 16 - burstDY;
                    //разрушение кирпича
                    if (arr[iterY, iterX] == 4)
                    {
                        arr[iterY, iterX] = 0;
                    }
                    if (arr[iterY, iterX + 1] == 4)
                    {
                        arr[iterY, iterX + 1] = 0;
                    }
                }
                else if ((y + 8) % 16 >= 6 && iterY < 39 && (arr[iterY + 1, iterX] >= 4 || arr[iterY + 1, iterX + 1] >= 4)) //если пулька приближается к препятствию (6 - длина клетки минус шаг пульки)
                {
                    checkVar = checkVarEnum.barDown; burstX = x - (burstDX - dx) / 2; burstY = (iterY + 1) * 16 - burstDY;
                    //разрушение кирпича
                    if (arr[iterY + 1, iterX] == 4)
                    {
                        arr[iterY + 1, iterX] = 0; burstX = x - (burstDX - dx) / 2; burstY = (iterY + 2) * 16 - burstDY;
                    }
                    if (arr[iterY + 1, iterX + 1] == 4)
                    {
                        arr[iterY + 1, iterX + 1] = 0; burstX = x - (burstDX - dx) / 2; burstY = (iterY + 2) * 16 - burstDY;
                    }
                }
            }
            #endregion
        }
Exemple #4
0
        public void CheckMap(int[,] arr, List <EnemyTank> enemyList, MyTank myTank) //проверка карты на наличие препятствий
        {
            checkVar = checkVarEnum.barNo;
            int iterX = x / 16;
            int iterY = y / 16;

            switch (dir)
            {
                #region движение влево
            case moveDirectionEnum.Left:
                foreach (Tank enemy in enemyList)      //проверка пересечения с вражескими танками
                {
                    if (enemy.x + dx > x - Speed && enemy.x + dx <= x && enemy.y < y + dy && enemy.y > y - dy)
                    {
                        checkVar = checkVarEnum.barLeft;
                        break;
                    }
                }
                if (checkVar != checkVarEnum.barNo)
                {
                    break;
                }
                //проверка пересечения с моим танком
                if (myTank.x + dx >= x - Speed && myTank.x + dx <= x && myTank.y < y + dy && myTank.y > y - dy)
                {
                    checkVar = checkVarEnum.barLeft;
                    break;
                }

                if (x % 16 == 0)     //если танк подъехал к краю клетки
                {
                    if (x <= 0)
                    {
                        checkVar = checkVarEnum.barLeft;
                    }                                                    //если танк подъехал к краю карты
                    else if (y / 16.0 - iterY > iterY + 1 - y / 16.0)    //проверка двух нижних клеток
                    {
                        if ((arr[iterY + 1, x / 16 - 1] >= 3) || (arr[iterY + 2, x / 16 - 1] >= 3))
                        {
                            checkVar = checkVarEnum.barLeft;
                        }
                        if (arr[iterY + 1, x / 16 - 1] == 1 || arr[iterY + 2, x / 16 - 1] == 1)
                        {
                            ice = true;                                                                         //заезд на лед
                        }
                        if (ice == true && arr[iterY + 1, x / 16 - 1] != 1 && arr[iterY + 2, x / 16 - 1] != 1)
                        {
                            ice = false;                                                                                        //съезд со льда
                        }
                    }
                    else if (y / 16.0 - iterY <= iterY + 1 - y / 16.0)     //проверка двух верхних клеток
                    {
                        if ((arr[iterY, x / 16 - 1] >= 3) || (arr[iterY + 1, x / 16 - 1] >= 3))
                        {
                            checkVar = checkVarEnum.barLeft;
                        }
                        if (arr[iterY, x / 16 - 1] == 1 || arr[iterY + 1, x / 16 - 1] == 1)
                        {
                            ice = true;                                                                     //заезд на лед
                        }
                        if (ice == true && arr[iterY, x / 16 - 1] != 1 && arr[iterY + 1, x / 16 - 1] != 1)
                        {
                            ice = false;                                                                                    //съезд со льда
                        }
                    }
                }
                break;
                #endregion

                #region движение вправо
            case moveDirectionEnum.Right:
                foreach (Tank enemy in enemyList)      //проверка пересечения с вражескими танками
                {
                    if (enemy.x < x + dx + Speed && enemy.x >= x + dx && enemy.y < y + dy && enemy.y > y - dy)
                    {
                        checkVar = checkVarEnum.barRight;
                        break;
                    }
                }
                if (checkVar != checkVarEnum.barNo)
                {
                    break;
                }
                //проверка пересечения с моим танком
                if (myTank.x <= x + dx + Speed && myTank.x >= x + dx && myTank.y < y + dy && myTank.y > y - dy)
                {
                    checkVar = checkVarEnum.barRight;
                    break;
                }

                if (x % 16 == 0)     //если танк подъехал к краю клетки
                {
                    if (x >= 640 - dx)
                    {
                        checkVar = checkVarEnum.barRight;
                    }                                                     //если танк подъехал к краю карты
                    else if (y / 16.0 - iterY > iterY + 1 - y / 16.0)     //проверка двух нижних клеток
                    {
                        if ((arr[iterY + 1, x / 16 + 2] >= 3) || (arr[iterY + 2, x / 16 + 2] >= 3))
                        {
                            checkVar = checkVarEnum.barRight;
                        }
                        if (arr[iterY + 1, x / 16 + 2] == 1 || arr[iterY + 2, x / 16 + 2] == 1)
                        {
                            ice = true;                                                                         //заезд на лед
                        }
                        if (ice == true && arr[iterY + 1, x / 16 + 2] != 1 && arr[iterY + 2, x / 16 + 2] != 1)
                        {
                            ice = false;                                                                                        //съезд со льда
                        }
                    }
                    else if (y / 16.0 - iterY <= iterY + 1 - y / 16.0)     //проверка двух верхних клеток
                    {
                        if ((arr[iterY, x / 16 + 2] >= 3) || (arr[iterY + 1, x / 16 + 2] >= 3))
                        {
                            checkVar = checkVarEnum.barRight;
                        }
                        if (arr[iterY, x / 16 + 2] == 1 || arr[iterY + 1, x / 16 + 2] == 1)
                        {
                            ice = true;                                                                     //заезд на лед
                        }
                        if (ice == true && arr[iterY, x / 16 + 2] != 1 && arr[iterY + 1, x / 16 + 2] != 1)
                        {
                            ice = false;                                                                                    //съезд со льда
                        }
                    }
                }
                break;
                #endregion

                #region движение вверх
            case moveDirectionEnum.Up:
                foreach (Tank enemy in enemyList)      //проверка пересечения с вражескими танками
                {
                    if ((enemy.y + dy > y - Speed && enemy.y + dy <= y && enemy.x < x + dx && enemy.x > x - dx) ||
                        (enemy.x + 32 == x && enemy.y - 5 <= y && enemy.y + 5 >= y))
                    {
                        //x = (x / 16 + 1) * 16;
                        checkVar = checkVarEnum.barUp;
                        break;
                    }
                }
                if (checkVar != checkVarEnum.barNo)
                {
                    break;
                }
                //проверка пересечения с моим танком
                if (myTank.y + dy >= y - Speed && myTank.y + dy <= y && myTank.x < x + dx && myTank.x > x - dx)
                {
                    checkVar = checkVarEnum.barUp;
                    break;
                }

                if (y % 16 == 0)     //если танк подъехал к краю клетки
                {
                    if (y <= 0)
                    {
                        checkVar = checkVarEnum.barUp;
                    }                                                  //если танк подъехал к краю карты
                    else if (x / 16.0 - iterX > iterX + 1 - x / 16.0)  //проверка двух правых клеток
                    {
                        if ((arr[y / 16 - 1, iterX + 1] >= 3) || (arr[y / 16 - 1, iterX + 2] >= 3))
                        {
                            checkVar = checkVarEnum.barUp;
                        }
                        if (arr[y / 16 - 1, iterX + 1] == 1 || arr[y / 16 - 1, iterX + 2] == 1)
                        {
                            ice = true;                                                                         //заезд на лед
                        }
                        if (ice == true && arr[y / 16 - 1, iterX + 1] != 1 && arr[y / 16 - 1, iterX + 2] != 1)
                        {
                            ice = false;                                                                                        //съезд со льда
                        }
                    }
                    else if (x / 16.0 - iterX <= iterX + 1 - x / 16.0)     //проверка двух левых клеток
                    {
                        if ((arr[y / 16 - 1, iterX] >= 3) || (arr[y / 16 - 1, iterX + 1] >= 3))
                        {
                            checkVar = checkVarEnum.barUp;
                        }
                        if (arr[y / 16 - 1, iterX] == 1 || arr[y / 16 - 1, iterX + 1] == 1)
                        {
                            ice = true;                                                                     //заезд на лед
                        }
                        if (ice == true && arr[y / 16 - 1, iterX] != 1 && arr[y / 16 - 1, iterX + 1] != 1)
                        {
                            ice = false;                                                                                    //съезд со льда
                        }
                    }
                }
                break;
                #endregion

                #region движение вниз
            case moveDirectionEnum.Down:
                foreach (Tank enemy in enemyList)      //проверка пересечения с вражескими танками
                {
                    if (enemy.y < y + dy + Speed && enemy.y >= y + dy && enemy.x < x + dx && enemy.x > x - dx)
                    {
                        checkVar = checkVarEnum.barDown;
                        break;
                    }
                }
                if (checkVar != checkVarEnum.barNo)
                {
                    break;
                }
                //проверка пересечения с моим танком
                if (myTank.y <= y + dy + Speed && myTank.y >= y + dy && myTank.x < x + dx && myTank.x > x - dx)
                {
                    checkVar = checkVarEnum.barDown;
                    break;
                }

                if (y % 16 == 0)     //если танк подъехал к краю клетки
                {
                    if (y >= 640 - dy)
                    {
                        checkVar = checkVarEnum.barDown;
                    }                                                     //если танк подъехал к краю карты
                    else if (x / 16.0 - iterX > iterX + 1 - x / 16.0)     //проверка двух правых клеток
                    {
                        if ((arr[y / 16 + 2, iterX + 1] >= 3) || (arr[y / 16 + 2, iterX + 2] >= 3))
                        {
                            checkVar = checkVarEnum.barDown;
                        }
                        if (arr[y / 16 + 2, iterX + 1] == 1 || arr[y / 16 + 2, iterX + 2] == 1)
                        {
                            ice = true;                                                                         //заезд на лед
                        }
                        if (ice == true && arr[y / 16 + 2, iterX + 1] != 1 && arr[y / 16 + 2, iterX + 2] != 1)
                        {
                            ice = false;                                                                                        //съезд со льда
                        }
                    }
                    else if (x / 16.0 - iterX <= iterX + 1 - x / 16.0)     //проверка двух левых клеток
                    {
                        if ((arr[y / 16 + 2, iterX] >= 3) || (arr[y / 16 + 2, iterX + 1] >= 3))
                        {
                            checkVar = checkVarEnum.barDown;
                        }
                        if (arr[y / 16 + 2, iterX] == 1 || arr[y / 16 + 2, iterX + 1] == 1)
                        {
                            ice = true;                                                                     //заезд на лед
                        }
                        if (ice == true && arr[y / 16 + 2, iterX] != 1 && arr[y / 16 + 2, iterX + 1] != 1)
                        {
                            ice = false;                                                                                    //съезд со льда
                        }
                    }
                }
                break;
                #endregion
            }
        }