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 }
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)); //} }