繁体   English   中英

有没有办法避免在C#中编写重复的代码?

[英]Is there a way to avoid writing duplicate code in C#?

我想在表格中插入更多的球。 但是,为了让它反弹,我必须为不同的球反复编码相同的算法。 我是否知道如果不一遍又一遍地写它,我有什么办法可以做到的? 我的代码如下。

int bBA1; //The x axis from the upper left corner
int bBA2; //The y axis from the upper left corner 
int spdBBA1; //The change of x
int spdBBA2; //The change of y

public StartGame()
{
    InitializeComponent();
}

private void StartGame_Load(object sender, EventArgs e)
{
    //Loads the ball on the screen at bottom of the window
    bBA1 = this.ClientSize.Width / 5; //The x axis the ball is loaded at
    bBA2 = this.ClientSize.Height - 10; //The y axis the ball is loaded at
    spdBBA1 = 1; //The speed of the ball of y
    spdBBA2 = 1; //The speed of the ball of x
}

private void StartGame_Paint_1(object sender, PaintEventArgs e)
{
    //This is the inner paint color of the circle that is 10 by 10
    e.Graphics.FillEllipse(Brushes.Blue, bBA1, bBA2, 10, 10);
    //This is the outline paint color of the circle that is 10 by 10
    e.Graphics.DrawEllipse(Pens.Blue, bBA1, bBA2, 10, 10); 
}

private void timer1_Tick(object sender, EventArgs e)
{
    bBA2 = bBA2 + spdBBA2;
    bBA1 = bBA1 + spdBBA1;

    if (bBA2 < 0)
    {
        spdBBA2 = -spdBBA2; //If y is less than 0 then it changes direction
    }
    else if (bBA1 < -5)
    {
        spdBBA1 = -spdBBA1;
    }
    else if (bBA2 + 10 > this.ClientSize.Height)
    {
        // If y + 10, the radius of the circle is greater than the
        // form width then we change direction
        spdBBA2 = -spdBBA2;
    }
    else if (bBA1 + 10 > this.ClientSize.Width)
    {
        spdBBA1 = -spdBBA1;
    }

    this.Invalidate(); 
}

谢谢。

是的你可以! 这是面向对象编程的许多很酷的功能之一。

创建一个Ball类。 当你开始游戏时,创建你需要的所有球并将它们存储在一个列表中。 从那里你可以使用foreach循环来修改每个Ball对象的属性。

public class Ball
{
    public int speedX { get; private set; }
    public int speedY { get; private set; }
    public int positionX { get; private set; }
    public int positionY { get; private set; }

    public Ball(int speedX, int speedY, int positionX, int positionY)
    {
        this.speedX = speedX;
        this.speedY = speedY;
        this.positionX = positionX;
        this.positionY = positionY;
    }

    public int setSpeedX(int newSpeed)
    {
        this.speedX = newSpeed;
    }

    //Add any other setters you need.
} 

现在你有了一个你需要创建的球的蓝图。 然后在你的游戏中你可以做这样的事情:

public class StartGame
{
    public List<Ball> ballList { get; private set; }

    public StartGame()
    {
        this.ballList = new List<Ball>();
        InitializeComponent();
    }

    private void StartGame_Load(object sender, EventArgs e)
    {
        //Add any balls you need here.
        ballList.add(new Ball(5, 10, 1, 1));
        ballList.add(new Ball(2, 17, 2, 9));
        ballList.add(new Ball(4, 12, 7, 5));
    }

    private void StartGame_Paint_1(object sender, PaintEventArgs e)
    {
        //This foreach loop will run through all the balls in ballList
        foreach(Ball ball in ballList)
        {
            e.Graphics.FillEllipse(Brushes.Blue, ball.positionX, ball.positionY, 10, 10);
            e.Graphics.DrawEllipse(Pens.Blue, ball.positionX, ball.positionY, 10, 10);
        }
    }
}

我不是100%确定你的游戏是如何工作的,所以我对变量做了一些猜测,但我希望你能得到这个想法。

我会看一下使用foreachlist来存储它们

首先创建一个ball ,然后在启动时创建你想要的所有球(至少你需要暂时)并将其保存到列表中,然后使用foreach循环来改变你想要的任何东西。球)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM