尝试制作一个简单的C#程序,其中一艘船通过几个“检查站”,当它受到界限时,它会增加玩家得分,然后当你到达最终检查点时游戏结束。无法弄清楚如何让分数上升并每次打印到标签。谢谢!
更新:我可以让我的盒子一次增加分数,但不是所有其他的图片盒。此外,当我点击最后的“太空港”图片框时,我陷入了消息框重定向循环。我该如何解决这两件事?在学校的导师没有帮助。
public partial class consoleForm : Form
{
public consoleForm()
{
InitializeComponent();
}
private void consoleForm_Load(object sender, EventArgs e)
{
}
private void outputBox_TextChanged(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
int score = (0);
if (ship.Bounds.IntersectsWith(wormhole1.Bounds))
{
score += (1);
userScore.Text = score.ToString();
this.Refresh();
}
else if (ship.Bounds.IntersectsWith(wormhole2.Bounds))
{
score += (1);
userScore.Text = score.ToString();
this.Refresh();
}
else if (ship.Bounds.IntersectsWith(wormhole3.Bounds))
{
score += (1);
userScore.Text = score.ToString();
this.Refresh();
}
else if (ship.Bounds.IntersectsWith(wormhole4.Bounds))
{
score += (1);
userScore.Text = score.ToString();
this.Refresh();
}
if (ship.Bounds.IntersectsWith(spaceport.Bounds))
{
MessageBox.Show("you win");
this.Refresh();
}
}
答案 0 :(得分:2)
你遇到的问题是,你只是在表单加载时进行一次检查,而不再是。
从consoleForm_Load
事件中删除逻辑,并将其放在您自己的方法中,称为CheckScore()
,或其他有意义的事情。
最好的方法是使用计时器检查每个交叉点,比方说100ms(0.1秒)。
创建计时器:
在consoleForm
的构造函数中,为它创建一个计时器和一个处理程序,然后Start
。 *您甚至可以将其放入已存在的consoleForm_Load
事件中 - 您的选择:)
像这样:
public consoleForm()
{
var timer = new System.Timers.Timer(100); // Create a timer that fires every 100ms (0.1s)
timer.Tick += OnTimer_Tick;
timer.Start();
}
为计时器的Tick
事件添加事件:
OnTimer_Tick
你可以从VS“自动创建”,或自己添加:
private void OnTimer_Tick(object sender, ElapsedEventArgs e)
{
CheckScore(); // Call your logic method to check the score
}
做逻辑:
如果您还没有,请确保使用原始逻辑(过去曾在CheckScore()
事件中)创建consoleForm_Load
方法。
最后说明:
我会认真考虑整理你的CheckScore()
(或任何你喜欢称之为)的方法,但那只是我:)
进一步的最终说明:还有许多其他创建计时器的方法;我只是很好并且在WinForms 中使用Timer
的最基本用法:)
希望这有帮助!
更多!!! 强>
目前,每次调用CheckScore()
方法时,您都会创建一个新的“分数”。
为了存储您的分数,请创建一个名为_score
或类似的私人字段:
private int _score = 0;
然后,每当您添加到用户的分数时,请引用_score
字段,然后使用该字段进行计算和显示:
_score++;
// or your own logic
_score += 20; // etc. etc.
// At the bottom of your logic,
// when you're ready to display the score:
userScore.Text = "Your score: " + _score;
然后,您可以在表单中的任何其他地方引用_score
。
比如重新设置它:
private void ResetScore()
{
_score = 0;
}
或检查分数是否达到某个值:
public void CheckScore()
{
...
// Your other logic to increment the score.
...
if (_score >= 10) // Check if the score has reached a certain value.
{
MessageBox.Show("You reached 10 points! YOU WIN!");
}
}
宾果! ;)
答案 1 :(得分:0)
好的,所以你的问题是你只需要调用一次代码 - 加载表单时。您需要设置更新事件,并使用上面的代码定期调用以使其正常工作。否则你的代码看起来很健全。查看c#计时器以获取调用的更新方法。