2009-06-05 36 views
1

我在编写一个简单的C#控制台应用程序。C#控制台应用程序 - OO数学/思想问题

该规范是:

一个游戏由十帧,与十针全机架开始的。在每一帧中,你有两次交付你的球,你可以尽可能多地击倒十个球。如果你击倒了第一个球上的所有别针,这就是所谓的罢工。该分数不会立即添加,因为对于一次罢工,您将获得下两个球的价值作为奖励。例如,如果在第一帧中得分为1,第二帧为7和1,则第一帧的得分为18(10 + 7 + 1),第二帧的得分为8,总共为26两帧后。如果你击倒第一球上的一些针,并击倒第二球中的其余针,它就被称为备用。此外,该分数不会立即添加,因为对于备用球员来说,您将获得下一球的价值作为奖励。例如,如果您在第一帧中得分为6,然后在第二帧中得到8和1,则第一帧可以得到18(6 + 4 + 8),并且9对于第二帧,在两帧之后总共为27。

我明白如何编写代码等。 但是,我只是无法让我的脑袋做这个评分系统的最佳方式,我需要一些建议。 很显然,每个玩家都会创建一个新的对象,但是我不确定如何绕过最初看起来像一个简单的编程问题。

任何帮助将不胜感激。

问候

+8

Smokey,这不是'Nam。这是保龄球。有规则。 – jason 2009-06-05 14:47:28

+0

+1:我刚才意识到你描述的保龄球没有实际说“保龄球”。对我来说,这很有趣,很棒。 – Eric 2009-06-05 20:11:42

回答

5

在保龄球中,罢工和备用被称为“标记”。用这个!

enum Marks { Open, Spare, Strike }; 

这样,您可以确定每个帧具有哪种类型的标记。投球后,检查最后两帧,并更新他们的分数。然后加分。

另一个注意事项:如果您显示的是逐帧评分,请不要在一串罢工中显示框架分数(例如,连续四次罢工不应导致框架1中显示“30” )。等待备用或打开以显示总数。这是不正确的得分来做任何不同的事情,而当视频游戏不承认这一点时,它会让我失望。

0

当处理这些问题时,我发现使用标志是有用的。通过标志,我的意思是小布尔值或整型变量,它们只是告诉你某些事情是真还是假。如在:

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 

然后你更新你的分数保持变量来反映这些碗后的这些。

注意:我不知道如何保持比分保龄球的作品,但我认为这里的信息足够普遍。