Example #1
0
        private void moveBulTimer_Tick(object sender, EventArgs e) //таймер для передвижения пулек
        {
            //координаты курицы
            int ChickenX0 = Battleground.Width * 18 / 40;
            int ChickenY0 = Battleground.Height - Chicken.Height;

            //передвижение всех пулек из массивов

            #region свои пульки
            foreach (Bullet bul in bulList)
            {
                bul.CheckMap(mapArr);
                bul.MoveBullet();
                //при попадании пульки в препятствие
                if (bul.checkVar != checkVarEnum.barNo)
                {
                    if (Sound == true)
                    {
                        mciSendString("play soundWall from 0", null, 0, IntPtr.Zero);                                //звук попадания в стену
                    }
                    BurstList.Add(new Burst(new Rectangle(bul.burstX, bul.burstY, bul.burstDX, bul.burstDY), 1, 1)); //создание нового взрыва и добавление его в массив
                }
                foreach (Tank enemy in enemyList)
                {
                    //при попадании пульки во вражеский танк
                    if (((bul.x + bul.dx) > enemy.x) && (bul.x < (enemy.x + enemy.dx)) && ((bul.y + bul.dy) > enemy.y) && (bul.y < (enemy.y + enemy.dy)))
                    {
                        bul.removed = true;                                                                      //удаление пульки
                        enemy.hp--;                                                                              //уменьшение количества жизней
                        if (enemy.hp == 0)                                                                       //если танк убит
                        {
                            enemy.removed = true;                                                                //удаление вражеского танка
                            BurstList.Add(new Burst(new Rectangle(enemy.x, enemy.y, enemy.dx, enemy.dy), 1, 1)); //создание нового взрыва и добавление его в массив
                            if (Sound == true)
                            {
                                mciSendString("play soundKill from 0", null, 0, IntPtr.Zero);                //звук убийства танка
                            }
                        }
                        else //если танк ранен
                        {
                            BurstList.Add(new Burst(new Rectangle(enemy.x, enemy.y, enemy.dx, enemy.dy), 1, 2)); //создание нового кровавого взрыва и добавление его в массив
                            if (Sound == true)
                            {
                                mciSendString("play soundWall from 0", null, 0, IntPtr.Zero);                //звук ранения танка
                            }
                        }
                    }
                }

                //при попадании пульки в курицу
                if (((bul.x + bul.dx) > ChickenX0) && (bul.x < (ChickenX0 + Chicken.Width / 2)) && ((bul.y + bul.dy) > ChickenY0) && (bul.y < (ChickenY0 + Chicken.Height)))
                {
                    if (Sound == true)
                    {
                        mciSendString("play soundKill from 0", null, 0, IntPtr.Zero);                                       //звук убийства танка
                    }
                    bul.removed = true;                                                                                     //удаление пульки
                    BurstList.Add(new Burst(new Rectangle(ChickenX0, ChickenY0, Chicken.Width / 2, Chicken.Height), 1, 1)); //создание нового взрыва и добавление его в массив
                    EndGame();                                                                                              //конец игры
                }
            }
            #endregion

            #region вражеские пульки
            foreach (Bullet bul in enemyBulList)
            {
                bul.CheckMap(mapArr);
                bul.MoveBullet();
                //при попадании пульки в препятствие
                if (bul.checkVar != checkVarEnum.barNo)
                {
                    if (Sound == true)
                    {
                        mciSendString("play soundWall from 0", null, 0, IntPtr.Zero);                                //звук попадания в стену
                    }
                    BurstList.Add(new Burst(new Rectangle(bul.burstX, bul.burstY, bul.burstDX, bul.burstDY), 1, 1)); //создание нового взрыва и добавление его в массив
                }
                //при попадании пульки в свой танк
                if (((bul.x + bul.dx) > myTank.x) && (bul.x < (myTank.x + myTank.dx)) && ((bul.y + bul.dy) > myTank.y) && (bul.y < (myTank.y + myTank.dy)))
                {
                    if (Sound == true)
                    {
                        mciSendString("play soundKill from 0", null, 0, IntPtr.Zero);                        //звук убийства танка
                    }
                    bul.removed = true;                                                                      //удаление пульки
                    BurstList.Add(new Burst(new Rectangle(myTank.x, myTank.y, myTank.dx, myTank.dy), 1, 1)); //создание нового взрыва и добавление его в массив
                    myTank.hp--;                                                                             //уменьшение количества жизней
                    label2.Text = myTank.hp.ToString();
                    if (myTank.hp == 0)                                                                      //если мой танк убит
                    {
                        EndGame();                                                                           //конец игры
                    }
                    else //если мой танк еще жив
                    {
                        //перемещение в точку респауна
                        myTank.x     = Battleground.Width * 14 / 40;
                        myTank.y     = Battleground.Height - 32 - 2;
                        myTank.immob = true;                                                               //танк неподвижен первые несколько секунд
                        myResp       = new Respawn(tankTeam.my, myTank.x - 4, myTank.y - 8, 40, 40, 0, 2); //создание респауна своего танка
                    }
                }

                //при попадании пульки в курицу
                if (((bul.x + bul.dx) > ChickenX0) && (bul.x < (ChickenX0 + Chicken.Width / 2)) && ((bul.y + bul.dy) > ChickenY0) && (bul.y < (ChickenY0 + Chicken.Height)))
                {
                    if (Sound == true)
                    {
                        mciSendString("play soundKill from 0", null, 0, IntPtr.Zero);                                       //звук убийства танка
                    }
                    bul.removed = true;                                                                                     //удаление пульки
                    BurstList.Add(new Burst(new Rectangle(ChickenX0, ChickenY0, Chicken.Width / 2, Chicken.Height), 1, 1)); //создание нового взрыва и добавление его в массив
                    EndGame();                                                                                              //конец игры
                }
            }
            #endregion
        }
Example #2
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));
            //}
        }