Пример #1
0
 internal void ChangePicture(MyTank myTank) //изменение картинки респауна своего танка
 {
     SelectPicture();
     if (IterIncr == 8 && Iter == 8) //появление своего танка незадолго до окончания пульсации
     {
         myTank.immob     = false;
         myTank.dir       = moveDirectionEnum.Up;
         myTank.changeDir = true;
         myTank.MoveTank();
         myTank.y += 2;
     }
     if (IterIncr == 9) //удаление респауна
     {
         removed = true;
     }
     //пульсация
     if (IterIncr % 2 == 0)
     {
         Iter--;
     }
     else
     {
         Iter++;
     }
 }
Пример #2
0
        public void NewGame()
        {
            collectedApples = 0;
            step            = -25;
            bullet          = new Bullet();
            myTank          = new MyTank(sizeField);
            tanks           = new List <Tank>();
            apples          = new List <Apple>();

            CreateTanks();
            CreateApples();
            wall = new Wall();

            gameStatus = GameStatus.stoping;
        }
Пример #3
0
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            #region начало игры, отрисовка карты
            if (e.KeyCode == Keys.Space)
            {
                GO = false;
                //создание своего танка
                myTank = new MyTank(Battleground.Width * 14 / 40, Battleground.Height - 32 - 2, 32, 32, moveDirectionEnum.Up, tankTeam.my)
                {
                    immob = true                                                                  //танк неподвижен первые несколько секунд
                };
                myResp      = new Respawn(tankTeam.my, myTank.x - 4, myTank.y - 8, 40, 40, 0, 2); //создание респауна своего танка
                label2.Text = myTank.hp.ToString();                                               //жизни моего танка
                label1.Text = Tank.TankQuantity().ToString();                                     //количество оставшихся вражеских танков
                //включение таймеров
                renderTimer.Enabled    = true;
                moveTankTimer.Enabled  = true;
                moveEnemyTimer.Enabled = true;
                moveBulTimer.Enabled   = true;
                //включение фоновой музыки
                if (Sound == true)
                {
                    mciSendString("play soundBack from 0", null, 0, IntPtr.Zero);
                }
            }
            #endregion

            #region стрельба
            if (e.KeyCode == Keys.Enter)
            {
                if (myTank.shot == true && myTank.immob == false)
                {
                    //расчет начальных координат пульки в зависимости от положения танка
                    int locX = 0, locY = 0;
                    if (myTank.dir == moveDirectionEnum.Left)
                    {
                        locX = myTank.x - 8; locY = myTank.y + myTank.dy / 2 - 4;
                    }
                    if (myTank.dir == moveDirectionEnum.Right)
                    {
                        locX = myTank.x + myTank.dx + 0; locY = myTank.y + myTank.dy / 2 - 4;
                    }
                    if (myTank.dir == moveDirectionEnum.Up)
                    {
                        locX = myTank.x + myTank.dx / 2 - 4; locY = myTank.y - 8;
                    }
                    if (myTank.dir == moveDirectionEnum.Down)
                    {
                        locX = myTank.x + myTank.dx / 2 - 4; locY = myTank.y + myTank.dy + 0;
                    }
                    //создание новой пульки и добавление ее в массив
                    bulList.Add(new Bullet(locX, locY, 8, 8, myTank.dir));
                    //звук выстрела
                    if (Sound == true)
                    {
                        mciSendString("play soundShoot from 0", null, 0, IntPtr.Zero);
                    }
                    myTank.shot = false; //чтобы мой танк не мог стрелять очередью, при зажатии кнопки
                }
            }
            #endregion

            #region передвижение своего танка
            if (e.KeyCode == Keys.A) //движение своего танка влево
            {
                moveDirection[0] = true; moveDirection[1] = false; moveDirection[2] = false; moveDirection[3] = false;
                if (skidding == true)
                {
                    skidding = false; skidIter = 0;
                }
                ;                                                          //прекращение проскальзывания на льду, если оно есть
                myTank.dir = moveDirectionEnum.Left;
                if (myTank.changeDir == false)
                {
                    myTank.changeDir = true;
                }
            }
            if (e.KeyCode == Keys.D) //движение своего танка вправо
            {
                moveDirection[0] = false; moveDirection[1] = true; moveDirection[2] = false; moveDirection[3] = false;
                if (skidding == true)
                {
                    skidding = false; skidIter = 0;
                }
                ;                                                          //прекращение проскальзывания на льду, если оно есть
                myTank.dir = moveDirectionEnum.Right;
                if (myTank.changeDir == false)
                {
                    myTank.changeDir = true;
                }
            }
            if (e.KeyCode == Keys.W) //движение своего танка вверх
            {
                moveDirection[0] = false; moveDirection[1] = false; moveDirection[2] = true; moveDirection[3] = false;
                if (skidding == true)
                {
                    skidding = false; skidIter = 0;
                }
                ;                                                          //прекращение проскальзывания на льду, если оно есть
                myTank.dir = moveDirectionEnum.Up;
                if (myTank.changeDir == false)
                {
                    myTank.changeDir = true;
                }
            }
            if (e.KeyCode == Keys.S) //движение своего танка вниз
            {
                moveDirection[0] = false; moveDirection[1] = false; moveDirection[2] = false; moveDirection[3] = true;
                if (skidding == true)
                {
                    skidding = false; skidIter = 0;
                }
                ;                                                          //прекращение проскальзывания на льду, если оно есть
                myTank.dir = moveDirectionEnum.Down;
                if (myTank.changeDir == false)
                {
                    myTank.changeDir = true;
                }
            }
            #endregion

            //включение-отключение звука
            if (e.KeyCode == Keys.M)
            {
                Sound = !Sound;
                if (Sound == true)
                {
                    mciSendString("play soundBack", null, 0, IntPtr.Zero);
                }
                if (Sound == false)
                {
                    mciSendString("pause soundBack", null, 0, IntPtr.Zero);
                }
                moveEnemyTimer.Enabled = false;
            }

            //if (e.KeyCode == Keys.Q)
            //{
            //    bufGraf.Graphics.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, Battleground.Width, Battleground.Height));
            //    bufGraf.Graphics.DrawString("Press Space", new Font("Arial", 32), new SolidBrush(Color.Black), new PointF(0, 0));
            //}
        }
Пример #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
            }
        }