Я пишу игру, похожую на BattleCity. Я сделал свой танк способным стрелять ракетами, используя Picturebox. Однако, когда я проверяю это на Вражеском танке, он не будет работать, продолжая проходить сквозь друг друга. Как я могу это исправить?
public void MissileCollision()
{
foreach (var EnemyTank in EnemyTankArray)
{
foreach(var Missile in missilesArray)
{
if (EnemyTank.Bounds.IntersectsWith(Missile.Bounds))
{
EnemyTank.Location = new Point(EnemyTank.Location.X + Position);
}
}
}
}
Этот код объясняет, что когда я ударю по Вражескому танку, он будет go возвращаться к вершине, и его позиция будет случайным образом появляться в координате X.
На самом деле это полный код.
Boolean moveLeft = false;
Boolean moveRight = false;
List<PictureBox> missilesArray = new List<PictureBox>();
List<PictureBox> EnemyTankArray = new List<PictureBox>();
Boolean shoots = true;
Random rand = new Random();
int Position = 0;
public Game()
{
InitializeComponent();
}
public void enemyTank()
{
var EnemyTank = new PictureBox();
this.Controls.Add(EnemyTank);
EnemyTank.Width = 24;
EnemyTank.Height = 31;
Position = rand.Next(0, 286);
EnemyTank.Location = new Point(EnemyTank.Location.X + Position);
EnemyTank.BackgroundImage = Properties.Resources.EnemyTank_DOWN_v_1;
EnemyTank.BackgroundImageLayout = ImageLayout.Stretch;
EnemyTankArray.Add(EnemyTank);
EnemyTank.BringToFront();
}
public void createMissile()
{
var Missile = new PictureBox();
this.Controls.Add(Missile);
Missile.Width = 10;
Missile.Height = 10;
Missile.Top = MainTank.Top + MainTank.Height / 2 - Missile.Height / 2;
Missile.Left = MainTank.Left + MainTank.Width / 2 - Missile.Width / 2;
Missile.BackColor = Color.Black;
missilesArray.Add(Missile);
Missile.BringToFront();
}
public void MissileCollision()
{
foreach (var EnemyTank in EnemyTankArray)
{
foreach(var Missile in missilesArray)
{
if (EnemyTank.Bounds.IntersectsWith(Missile.Bounds))
{
EnemyTank.Location = new Point(EnemyTank.Location.X + Position);
}
}
}
}
private void MoveMainTank(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Space)
{
if (shoots == true)
{
createMissile();
}
}
if(e.KeyData == Keys.Left)
{
moveLeft = true;
}
if(e.KeyData == Keys.Right)
{
moveRight = true;
}
}
private void MoveSide(object sender, EventArgs e)
{
if(moveLeft == true)
{
shoots = false;
MainTank.Left -= 10;
MainTank.BackgroundImage = Properties.Resources.Tank_LEFT_v_1;
}
if (moveRight == true)
{
shoots = false;
MainTank.Left += 10;
MainTank.BackgroundImage = Properties.Resources.Tank_RIGHT_v_2;
}
}
private void StopMainTank(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Left)
{
shoots = true;
moveLeft = false;
MainTank.BackgroundImage = Properties.Resources.Tank_TOP_v_1;
}
if (e.KeyData == Keys.Right)
{
shoots = true;
moveRight = false;
MainTank.BackgroundImage = Properties.Resources.Tank_TOP_v_1;
}
}
private void Game_Load(object sender, EventArgs e)
{
enemyTank();
MainTankMoveLeftRight.Start();
shoot.Start();
MoveEnemyTank.Start();
MissileCollision();
}
private void ShootMissile(object sender, EventArgs e)
{
foreach(var Missile in missilesArray)
{
Missile.Top -= 10;
}
}
private void EnemyTankForward(object sender, EventArgs e)
{
foreach(var EnemyTank in EnemyTankArray)
{
EnemyTank.Top += 10;
}
}
}
}
Для foreach
На самом деле я делаю это, чтобы вызывать больше EnemyTank с задержками, поэтому я разбираюсь с этим позже, что Я хочу сосредоточиться на том, что ничего не происходит, когда я так кодирую, пожалуйста, помогите мне исправить это.