【发布时间】:2018-10-16 02:37:30
【问题描述】:
我正在制作这款简单的回合制“真人快打”游戏。有 2 个组合框,您可以从中选择一些字符。当点击攻击按钮时,会产生一个半随机的攻击值,对手的生命值会随着该攻击值而减少。先达到 0 HP 的人失去。
我正在制作 2 个 Character 类的实例(从组合框检索)。单击攻击按钮时会生成 2 个实例。问题是每次用户点击 ATTACK 时,都会再次创建 2 个实例,因此 HP 会重置为默认值。角色由姓名、生命值、伤害组成。
private void button_Attack_Click(object sender, EventArgs e)
{
Character P1 = (Character)comboBox_CharacterSelectionP1.SelectedItem;
Character P2 = (Character)comboBox_CharacterSelectionP2.SelectedItem;
double HP_1;
double HP_2;
double DMG_1 = P1.Attack();
double DMG_2 = P2.Attack();
if (P1.Counter % 2 == 0)
{
HP_1 = P1.HealthPoints;
HP_2 = P2.HealthPoints;
label_Player1_HP.Text = HP_1.ToString();
label_AttackValueP1.Text = DMG_1.ToString();
label_Message.Text = $"{P1.Name} throws a punch";
HP_2 -= DMG_1;
label_Player2_HP.Text = HP_2.ToString();
P1.Counter++;
}
else { //... }
}
我必须在攻击按钮空间之外创建 2 个实例。我在哪里声明和初始化它们以便在攻击函数中使用它们? (=> 这样每次用户点击攻击按钮时,HP 都不会被重置)
这两个实例是:
Character P1 = (Character)comboBox_CharacterSelectionP1.SelectedItem;
Character P2 = (Character)comboBox_CharacterSelectionP2.SelectedItem;
这是 Windows 窗体应用程序的图片
【问题讨论】:
-
Where do I declare and initialize them in order to use them inside the attack-function?在你的班级里 -
我从您的问题标题中删除了强制标签。阅读here为什么。
-
您的问题不是由实例引起的,您不是在您的方法中创建它们。您只是不将新的 HP 值存储在播放器实例中。
HP_1和HP_2变量是本地变量。