我的C#Bowling游戏存在问题,我会提供一些帮助,我将尽力解释代码。我已经尝试解决这个问题很长时间了,但是还没有成功。
计算工作正常,但唯一的问题是我的罢工,罢工应算10 +接下来的2个罚球。
所以我的程序做什么:
如果您收到罢工,则将第一个值设置为10,然后输入另一个罢工,将值设置为21,但应将其设置为20。第二个框中的值应为30。
所以首先我有3个数组来保存所有文本框
summa = new TextBox[] { textBox14, textBox15, textBox16, textBox17, textBox18, textBox19 };
slag1 = new TextBox[] { textBox1, textBox3, textBox5, textBox7, textBox9, textBox11 };
slag2 = new TextBox[] { textBox2, textBox4, textBox6, textBox8, textBox10, textBox12 };
所以我有2种方法,
Slag1()
和Slag2()
罢工在Slag1()
方法中运行。这是我用来计算罢工的部分
if (strike == true)
{
GotStrike[omgang] = true;
}
//strike = false;
//Kollar ifall textbox är lika med 10
if (slag1[omgang].Text == "10")
{
//Om text box är lika med 10 ändra värdet till X
//Lägg till 10 poäng på total
//Skriv ut värdet på summa (textbox)
Arbetar = true;
slag1[omgang].Text = "X";
total += 9;
summa[omgang].Text = total.ToString();
omgang++;
if (omgang == 6)
{
omgang--;
}
strike = true;
}
else if (slag1[omgang].Text == "X")
{
return;
}
else
{
checkSlag1 = Convert.ToInt32(slag1[omgang].Text);
total += checkSlag1;
summa[omgang].Text = total.ToString();
if (strike == true)
{
if (omgang != 0)
{
total += 10;
slag1[omgang - 1].Text = total.ToString();
if (omgang != 1)
{
slag1[omgang - 2].Text = total.ToString();
}
else
{
}
}
else
{
}
}
}
}
这有点难以解释,但我希望您能理解,如果您听不懂,请告诉我,这样我会写出更好的解释。
我希望您知道保龄球比赛的工作原理,一次罢工=第一次罢工,以及接下来的2次罢工的价值。因此,如果我命中了罢工,我得到的价值是10,罢工2的价值是10,罢工3的价值是10。这就是索引0的总和。
最佳答案
由于您在计算保龄球比赛的正确分数时遇到了麻烦,我建议您去了解一下保龄球比赛的机制,编写测试以检查不同的掷球是否正确(例如,正常,备用和罢工)。然后,您可以修改代码,并在所有测试通过后,您的评分就会生效。之后,您可以创建使用保龄球游戏的任何UI。
还要检查我在评论中提供的链接。该代码使用Java编写,但与C#足够相似,并提供了一个保龄球游戏API的示例,并说明了它们如何到达其特定设计。
您的保龄球游戏可能如下所示:
(我真的不知道保龄球规则)
public class Bowling
{
public void Throw(int count) // How do you call these things that you need to knock over...
{
Debug.Assert(count >= 0);
Debug.Assert(count <= 12);
// ... Lots of interesting code.
}
public int GetScore()
{
return 16;
}
}
此代码显然不起作用。诀窍是编写运行“红色”(=失败)的测试,然后编写代码,直到测试运行“绿色”(=通过)。
对于这些测试,您可以使用NUnit之类的框架,...
[TestClass]
public class BowlingTests
{
[Test]
public void ThrowNormal_NormalScore()
{
var b = new Bowling();
b.Throw(5);
b.Throw(6);
Assert.That(b.GetScore(), Is.EqualTo(11));
}
public void ThrowSpare_SpecialScore()
{
var b = new Bowling();
b.Throw(1);
b.Throw(11); // = spare
b.Throw(5); // score counts for double?
b.Throw(3); // No double score
Assert.That(b.GetScore(), Is.EqualTo(1 + 11 + (5 * 2) + 3));
}
// More tests for all the edge cases (strike, special end of game rules etc)
}
关于c# - C#保龄球比赛计算问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23755132/