我的子弹射击算法有问题
本文关键字:有问题 算法 射击 子弹 我的 | 更新日期: 2023-09-27 18:25:58
我正在制作一个游戏,我有一个射击子弹的功能,一个玩家可以得到10发子弹。这就是现在的样子:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
bullets.Add(new Bullet(robot.RobotRec));
Bullet -= 1;// lose a life
lblBullet.Text = Bullet.ToString();// display number of lives
checkBullet();
}
}
private void pnlGame_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
bullets.Add(new Bullet(robot.RobotRec));
Bullet -= 1;// lose a life
lblBullet.Text = Bullet.ToString();// display number of lives
checkBullet();
}
}
private void checkBullet()
{
if (Bullet == 0)
{
tmrShoot.Enabled = false;
}
}
但在子弹数为零后,我仍然可以射杀他们,尽管他们不会影响任何事情。好的,他们刚刚通过的分数,但我想禁用子弹图像。所以我在想:你能禁用mousedown吗?做这件事的代码是什么?
您正在检查Bullet==0是否错误,它应该更像这样:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (Bullet == 0)
{
tmrShoot.Enabled = false;
return; //leaves the method and followup code doesnt run
}
if (e.Button == MouseButtons.Left)
{
bullets.Add(new Bullet(robot.RobotRec));
Bullet -= 1;// lose a life
lblBullet.Text = Bullet.ToString();// display number of lives
}
}
private void pnlGame_MouseDown(object sender, MouseEventArgs e)
{
if (Bullet == 0)
{
tmrShoot.Enabled = false;
return; //leaves the method and followup code doesnt run
}
if (e.Button == MouseButtons.Left)
{
bullets.Add(new Bullet(robot.RobotRec));
Bullet -= 1;// lose a life
lblBullet.Text = Bullet.ToString();// display number of lives
}
}
这将防止创建项目符号并计算addional-1。
你也可以在一个方法中减少MouseDown事件的整个代码,比如
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
FireBullet(e);
}
private void pnlGame_MouseDown(object sender, MouseEventArgs e)
{
FireBullet(e);
}
private void FireBullet(MouseEventArgs e)
{
if (Bullet == 0)
{
tmrShoot.Enabled = false;
return; //leaves the method and followup code doesnt run
}
if (e.Button == MouseButtons.Left)
{
bullets.Add(new Bullet(robot.RobotRec));
Bullet -= 1;// lose a life
lblBullet.Text = Bullet.ToString();// display number of lives
}
}
或者在Form1和你的pnlGame上注册相同的MouseDown事件:
//In FormLoad
Form1.MouseDown += FireBullet_MouseDown;
pnlGame.MouseDown += FireBullet_MouseDown;
private void FireBullet_MouseDown(object sender, MouseEventArgs e)
{
if (Bullet == 0)
{
tmrShoot.Enabled = false;
return; //leaves the method and followup code doesnt run
}
if (e.Button == MouseButtons.Left)
{
bullets.Add(new Bullet(robot.RobotRec));
Bullet -= 1;// lose a life
lblBullet.Text = Bullet.ToString();// display number of lives
}
}