の複数のインスタンスを削除する傾向がありますBowl
。このような状況に陥った場合は、自問してみてくださいBowl
。Frame
ゲームの存続期間中に作成および維持する必要があるの 10 個のインスタンスを考えてみてください。ビジネス ロジックに複数のインスタンスが必要でない限り、複数のインスタンスを保持することはお勧めできません。
public class Bowl {
private int bowlScore;
// Use a no-argument constructor
public Bowl() {
this.bowlScore = 0;
}
public void setBowlScore( int score ) {
this.bowlScore = score;
}
public int getBowlScore() {
return this.bowlScore;
}
}
Frame
クラスについては、
public class Frame {
private int frameScore;
private Bowl bowlArray[];
public Frame() {
this.frameScore = 0;
this.bowlArray = new Bowl[2];
}
public void setScoreForFirstBowl( int score ) {
this.bowlArray[0] = score;
this.frameScore += score;
}
public void setScoreForSecondBowl( int score ) {
this.bowlArray[1] = score;
this.frameScore += score;
}
public void setFrameScore( int score ) {
this.frameScore = score;
}
public int getFrameScore() {
return this.frameScore;
}
// this should not be used, left in for completeness
public Bowl[] getBowlArray() {
return this.bowlArray;
}
}
そして、Game
public class Game {
private int gameScore;
private ArrayList<Frame> gameFrames;
public Game() {
this.gameScore = 0;
this.gameFrames = new ArrayList<Frame>();
}
/* There are many ways of implementing the game logic. Here is an example.
You will have to complete the rest :) */
// @frame frame object with bowl data that is appended to list
public void frameCompleted(Frame frame) {
this.gameScore += frame.getFrameScore; // I assume this is what you want to do. Change if not
this.gameFrames.add(frame);
}
/* The method written above can also be implemented by passing integer values
for the score, bowl number and frame number. However, this would not be very
OOP friendly. Essentially, this is 'Encapsulation' of the Frame data into the
Frame object. */
// Add getters and setters for gameScore and gameFrames
}
さらに使用する例については、 ArrayListのドキュメントを参照してください。使用したくない場合は、配列に置き換えることができます。リスト機能を紹介するためだけに含めました。
カプセル化 の詳細については、こちらとこちらをご覧ください。
Bowl
またはFrame
クラスで「ストライク」を考慮していないことに気付くでしょう。これは、ケータリングが必要な特殊なケースであるため、実装するために残しました。私の理解では、最初のボウルでストライクをロールしても、2 番目のボウルは得られません。