我正在编写一个简单的C#控制台应用程序。
规范是:
游戏由十个框架组成,以十个引脚的全机架开始。在每个框架中,您有两个球的交付,在其中可以尽可能多地击倒十个引脚。如果你击倒第一个球上的所有别针,它就被称为罢工。分数不会立即增加,因为对于一次攻击,你可以获得下两个球的值作为奖励。例如,如果您在第一帧中获得一次攻击,然后在第二帧中获得7和1,则第一帧的得分为18(10 + 7 + 1),第二帧的得分为8,总计为26帧后两帧。如果你击倒第一个球上的一些针脚,并击倒第二个球中的其余针脚,它就被称为备用球。同样,得分不会立即增加,因为对于一个备用,您将获得下一个球的值作为奖励。例如,如果你在第一帧中得到一个备用,比如一个6和一个4,那么在第二帧得到一个8和一个1,那么第一帧得分为18(6 + 4 + 8),而9对于第二帧,在两帧之后总共制作27个。
我理解如何编写代码等。 但是,我无法理解这个评分系统的最佳方式,我需要一些建议。 显然会为每个玩家创建一个新对象,但是我不知道如何绕过最初看似简单的编程问题。
非常感谢任何帮助。
此致
答案 0 :(得分:5)
在保龄球,罢工和备件被称为“标记”。用这个!
enum Marks { Open, Spare, Strike };
这样,您可以确定每帧的标记类型。投球后,检查最后两帧,并更新他们的分数。然后将分数加起来。
另一个注意事项:如果你显示逐帧评分,不要在一串打击中显示帧得分(例如,连续四次打击不应导致第1帧显示“30”) 。等待备用或打开以显示总计。做任何不同的事情是不正确的得分,当视频游戏不认识时,它会让我感到很难过。
答案 1 :(得分:4)
好吧,如果你想要一个真正的深入讨论来处理保龄球游戏的OOP和TDD,我建议你阅读整篇文章:
http://www.objectmentor.com/resources/articles/xpepisode.htm
否则,您只需滚动到底部,看看它们是如何实现的。
答案 2 :(得分:0)
在处理这些问题时,我发现使用标志很有用。通过标志,我的意思是小布尔或int变量,只是告诉你某些事情是真是假。如:
bool isStrike;
bool isSpare;
将这些变量放在你的对象中,当这个人获得一次攻击时,设置isStrike为true。
当计算得分时,您可以通过检查这些标志来更改计算系统。
if(isStrike)
// do not calculate the score until the other two bowls are made.
if(isSpare)
// do not calculate the score until one more bowl is made
然后你更新你的得分保持变量,以便在这些碗之后反映这些。
注意:我不知道保龄球如何保持得分,但我认为这里的信息足够普遍。