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