-4

ゲームを作っていて、弾丸を発射する機能があり、プレイヤーは 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;

    }
}

しかし、弾数がゼロになった後でも、何の影響もありませんが、撃つことができます。彼らが通過するスコアはわかりましたが、弾丸の画像を無効にしたいと思います。だから私は考えていました:マウスダウンを無効にできますか?そして、それを行うコードは何ですか?

4

1 に答える 1

0

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

これにより、Bullet が作成され、追加の -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
        }
}
于 2013-08-03T08:54:50.087 に答える