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