在《敏捷软件开发》中有一个保龄球的例子。作者的实现方法不是一味强调模式对象之类的东西。从中我们可以学习到大师开发软件的灵活性和务实态度。为了表达我对大师的有如滔滔江水,连绵不绝的敬意,自己也按照自己的想法写了一个。
package demo;
import java.util.Vector;
import java.util.Iterator;

public class Main
{

/** *//**
* @param args
*/
public static void main(String[] args)
{
// TODO 自动生成方法存根
Test tg = new Test();
tg.testGame();
//tg.testFour();
//tg.testPerfectGame();
//tg.testEndOfArray();
//tg.testHeartBreadk();
//tg.testTenthFrameSpare();
}
}

class Test

{
Game g;
Test()
{
g = new Game();
}
void testFour()
{
g.add(5);
g.add(4);
g.add(7);
g.add(2);
show();//18
show(0);//9
show(1);//18
}
void testPerfectGame()
{
for (int i = 0; i < 12; i++)
{
g.add(10);
}
show();//300
}
void testEndOfArray()
{
for (int i=0; i<9;i++)
{
g.add(0);
g.add(0);
}
g.add(2);
g.add(8);
g.add(10);
show();//20
}
void testHeartBreadk()
{
for (int i = 0; i < 11; i++)
{
g.add(10);
}
g.add(9);
show();//299
}
void testTenthFrameSpare()
{
for(int i = 0;i<9; i++)
g.add(10);
g.add(9);
g.add(1);
g.add(1);
show();
}
void show()
{
System.out.println( "Game score: " + g.score() );//270
}
void show(int index)
{
System.out.println("Frame " + index + " score: " + g.frameScore(index));
}
void testGame()
{
g.add( 1 );
g.add( 4 );//5
g.add(4);
g.add(5);//14
g.add(6);
g.add(4);
g.add(5);//29
g.add(5);
g.add(10);//59
g.add(0);
g.add(1);//70 71
g.add(7);
g.add(3);
g.add(6);
g.add(4);
g.add(10);
g.add(2);
g.add(8);
g.add(6);
if (g.getFrameCount() >= 10)
{
show();//133
}
for (int i = 0; i < g.getFrameCount(); ++i)
{
show(i);
}
}
}
class Game

{
int score()
{
//返回最后的分数
return frameScore(frames.size() - 1);
}
int getFrameCount()
{
return frames.size();
}
int frameScore(int index)
{
int count = 0;
for (int i = 0; i <= index; ++i)
{
count += frames.get(i).score();
}
return count;
}
Vector<Frame> frames = new Vector<Frame>();
Vector<Frame> frameTemps = new Vector<Frame>();
int jg = 1; //间隔,非全中要两次才创建一个frame
void add(int pinsCount)
{
//更新临时队列
for(Frame f :frameTemps)
{
本文通过一个保龄球计分系统的实例,展示了如何使用Java实现一个灵活且实用的软件解决方案。文中提供了完整的代码示例,包括不同游戏场景下的计分逻辑实现。
1414

被折叠的 条评论
为什么被折叠?



