从标签中减去一个数字

时间:2015-01-03 15:29:43

标签: c# label subtraction

我是C#的新手,我有一个关于如何从标签中减去数字的问题?

我正在尝试申请。情况如下:

我有一个说“攻击”的按钮,并且有一个名为“lblTotalEnemyLifes”的标签。现在,当我按下按钮时,我想从标签所具有的总hp中减去1“损坏”,并且在按下按钮后标签会自动更新。我尝试了很多不同的东西,似乎什么都没有用。目前我尝试过这样的事情:

int damage = -1;

int life = Convert.ToInt32(lblTotalEnemyLifes.Text);

life = life - damage;

我尝试了很多这个。如果有人可以帮助我从标签中减去一个数字,那就太棒了。

提前致谢!

4 个答案:

答案 0 :(得分:3)

您正在减去数字,但不要将其写回:

lblTotalEnemyLifes.Text = life.ToString();

更改life的值不会影响您的标签。您应该更新标签的Text属性。

此外,您还要减去-1而不是1,表达式变为life = life + 1。您只需使用decrement运算符从变量中减去1

int life = Convert.ToInt32(lblTotalEnemyLifes.Text);
life--; // equivelant to life = life - 1;

lblTotalEnemyLifes.Text = life.ToString();

答案 1 :(得分:2)

另一种方法,可能更优雅,更不容易出错,是这样的:

将你的价值包装在一个类中:

public class GameState
{
    public int TotalEnemyLifes { get; set; }
}

接下来,实例化该类并将其绑定到UI:

var ctx = new GameState { TotalEnemyLifes = LIFE_VALUE };
this.DataContext = ctx;

接下来,更新按钮事件处理程序中的值:

private void event_Handler(object sender, RoutedEventArgs e)
{
    ctx.TotalEnemyLifes--;
    BindingOperations.GetBindingExpression(lblTotalEnemyLifes, Label.ContentProperty).UpdateTarget();
}

答案 2 :(得分:1)

尝试将伤害设置为1,而不是-1。 然后在最后添加:

lblTotalEnemyLifes.Text = life.ToString();

答案 3 :(得分:1)

将数据存储在标签中是个坏主意。标签和文本框只应用于用户交互(输入和输出/显示)。将数据存储在变量,字段或属性中。最好为游戏逻辑使用单独的类,而不是在表单中执行逻辑

public class Game
{
    private const int InitialLifesCount = 100;

    public Game()
    {
         EnemyLifes = InitialLifesCount;
    }

    public int EnemyLifes { get; set; }

    public AttackEnemy()
    {
        EnemyLifes--;
    }
}

在表格中你可以写

private _game = new Game();

在按钮中单击:

_game.AttackEnemy();
lblTotalEnemyLifes.Text = _game.EnemyLifes.ToString();

查看data binding也是一个好主意。如果在游戏类中实现INotifyPropertyChanged接口并将类属性绑定到标签,则标签将自动更新。

除了提高清晰度之外,逻辑和I / O的分离允许您为游戏逻辑编写unit tests。在单元测试中,您可以编写

[TestMethod]
public void AttackingEnemyReducesHisLifes()
{
    var game = new Game();
    int lifesBefore = game.EnemyLifes;
    game.AttackEnemy();
    Assert.AreEqual(lifesBefore - 1, game.EnemyLifes);
}