c# - 执行 BUTTON 操作时使用已初始化的对象
问题描述
我正在制作这个简单的回合制“真人快打”游戏。有 2 个组合框,您可以从中选择一些字符。当点击攻击按钮时,会产生一个半随机的攻击值,对手的生命值会随着该攻击值而减少。先达到 0 HP 的人失去。
我正在制作类 Character 的 2 个实例(从组合框检索)。单击攻击按钮时会生成 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 都不会被重置)
2个实例是:
Character P1 = (Character)comboBox_CharacterSelectionP1.SelectedItem;
Character P2 = (Character)comboBox_CharacterSelectionP2.SelectedItem;
这是 Windows 窗体应用程序的图片
解决方案
“你的问题不是由实例引起的,你没有在你的方法中创建它们。你只是没有将新的 HP 值存储在玩家实例中。HP_1 和 HP_2 变量是本地的。- dymanoid”
这条评论帮助了我,谢谢。
我的错误是我为 HP 做了一个局部变量,我想它没有更新。一旦我用类 Character 的属性 HealthPoints 替换了它们,它就可以正常工作。新代码如下所示:
private void button_Attack_Click(object sender, EventArgs e)
{
button_Play.Enabled = false;
Character P1 = (Character)comboBox_CharacterSelectionP1.SelectedItem;
Character P2 = (Character)comboBox_CharacterSelectionP2.SelectedItem;
if (P1.Counter % 2 == 0)
{
double DMG_1 = P1.Attack();
label_Player1_HP.Text = P1.HealthPoints.ToString("F3");
label_AttackValueP1.Text = $"Damage inflicted: {DMG_1.ToString("F3")}";
label_Message.Text = $"{P1.Name} throws a punch";
P2.HealthPoints -= DMG_1;
label_Player2_HP.Text = P2.HealthPoints.ToString("F3");
P1.Counter++;
}
else...
推荐阅读
- c++ - 将c ++与mysql连接时出现损坏的文件错误
- sql - 在 SQL Server 中的打开查询视图 Oracle 中传递日期列
- for-loop - Azure DevOps 循环遍历文本文件
- reactjs - React,如何通过重新选择停止重新渲染应用程序?
- java - 文件中的 Rserve 错误(文件名,“r”,编码 = 编码):无法打开连接
- javascript - 如何根据 laravel 中的选择选项动态地完成输入?
- aframe - 为什么这个 A-frame 代码在 Glitch.com 中有效,但在我的网站上无效?
- javascript - 如何测试具有特定名称的组件是否在 Composition API (Vue 3) 中注册
- python - 在正则表达式中组合括号和单词边界
- xcode - ld: 找不到 -lSystem 的库,试图编译telldus源