Skip to content

Commit

Permalink
[Refactoring] Long Method of run()
Browse files Browse the repository at this point in the history
  • Loading branch information
inrir committed May 30, 2023
1 parent 3c445ec commit ad336d1
Show file tree
Hide file tree
Showing 6 changed files with 169 additions and 84 deletions.
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions BallingManagementSystem_refactoring.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
214 changes: 130 additions & 84 deletions Lane.java
Original file line number Diff line number Diff line change
Expand Up @@ -188,100 +188,146 @@ public Lane() {
* entry point for execution of this lane
*/
public void run() {

// Long Method Refactoring
while (true) {
if (partyAssigned && !gameFinished) { // we have a party on this lane,
// so next bower can take a throw

while (gameIsHalted) {
try {
sleep(10);
} catch (Exception e) {}
if(partyAssigned){ // we have a party on this lane,
// 동일한 적용인 점에서 분리
if(!gameFinished){ // so next bower can take a throw
handleGamePlay(); // 게임 시작을 핸들링하는 메소드
} else{
handleEndOfGame(); // 게임 종료를 핸들링하는 메소드
}
}

doSleep(10);
}
}

if (bowlerIterator.hasNext()) {
currentThrower = (Bowler)bowlerIterator.next();
private void doSleep(int millis){ // 중복된 sleep()을 메소드로 변경
try{
sleep(millis);
} catch (Exception e) {}
}

canThrowAgain = true;
tenthFrameStrike = false;
ball = 0;
while (canThrowAgain) {
setter.ballThrown(); // simulate the thrower's ball hiting
ball++;
}

if (frameNumber == 9){
finalScores[bowlIndex][gameNumber] = cumulScores[bowlIndex][9];
try{
Date date = new Date();
String dateString = "" + date.getHours() + ":" + date.getMinutes() + " " + date.getMonth() + "/" + date.getDay() + "/" + (date.getYear() + 1900);
ScoreHistoryFile.addScore(currentThrower.getNick(), dateString, new Integer(cumulScores[bowlIndex][9]).toString());
} catch (Exception e) {System.err.println("Exception in addScore. "+ e );}
}
private void handleGamePlay(){ // 게임 시작에 대한 메소드
gameDoSleep();


setter.reset();
bowlIndex++;

} else {
frameNumber++;
resetBowlerIterator();
bowlIndex = 0;
if (frameNumber > 9) {
gameFinished = true;
gameNumber++;
}
}
} else if (partyAssigned && gameFinished) {
EndGamePrompt egp = new EndGamePrompt( ((Bowler) party.getMembers().get(0)).getNickName() + "'s Party" );
int result = egp.getResult();
egp.distroy();
egp = null;


System.out.println("result was: " + result);

// TODO: send record of scores to control desk
if (result == 1) { // yes, want to play again
resetScores();
resetBowlerIterator();

} else if (result == 2) {// no, dont want to play another game
Vector printVector;
EndGameReport egr = new EndGameReport( ((Bowler)party.getMembers().get(0)).getNickName() + "'s Party", party);
printVector = egr.getResult();
partyAssigned = false;
Iterator scoreIt = party.getMembers().iterator();
party = null;
partyAssigned = false;

publish(lanePublish());

int myIndex = 0;
while (scoreIt.hasNext()){
Bowler thisBowler = (Bowler)scoreIt.next();
ScoreReport sr = new ScoreReport( thisBowler, finalScores[myIndex++], gameNumber );
sr.sendEmail(thisBowler.getEmail());
Iterator printIt = printVector.iterator();
while (printIt.hasNext()){
if (thisBowler.getNick() == (String)printIt.next()){
System.out.println("Printing " + thisBowler.getNick());
sr.sendPrintout();
}
}
if (bowlerIterator.hasNext()) {
prepareNextThrow();
recordFinalScore();
resetThrow();
} else {
proceedToNextFrame();
}
}

}
}
private void gameDoSleep(){ // 게임 정지에 대한 sleep() 메소드
while(gameIsHalted){
doSleep(10);
}
}


private void prepareNextThrow(){ // 다음 볼이 던지도록 반복
currentThrower = (Bowler)bowlerIterator.next();
canThrowAgain = true;
tenthFrameStrike = false;
ball = 0;
while (canThrowAgain) {
setter.ballThrown(); // simulate the thrower's ball hiting
ball++;
}
}

private void recordFinalScore(){ // 마지막 점수 저장
if (frameNumber == 9) {
finalScores[bowlIndex][gameNumber] = cumulScores[bowlIndex][9];
saveScore();
}
}

private void saveScore(){ // 현재 점수 저장
try{
Date date = new Date();
String dateString = "" + date.getHours() + ":" + date.getMinutes() + " " + date.getMonth() + "/" + date.getDay() + "/" + (date.getYear() + 1900);
ScoreHistoryFile.addScore(currentThrower.getNick(), dateString, new Integer(cumulScores[bowlIndex][9]).toString());
} catch (Exception e) {System.err.println("Exception in addScore. "+ e );}
}

private void resetThrow(){ // 다음 throw를 위해 모든 상태 초기화
setter.reset();
bowlIndex++;
}

private void proceedToNextFrame(){ // 다음 프레임을 위한 동작처리
frameNumber++;
resetBowlerIterator();
bowlIndex = 0;
if (frameNumber > 9) {
gameFinished = true;
gameNumber++;
}
}

private void handleEndOfGame(){ // 게임 종료에 대한 핸들링
int result = promptEndGame();
processEndGameResult(result);
// TODO: send record of scores to control desk
}


private int promptEndGame(){ // 게임 종료를 위한 응답 반영
EndGamePrompt egp = new EndGamePrompt( ((Bowler) party.getMembers().get(0)).getNickName() + "'s Party" );
int result = egp.getResult();
egp.distroy();
egp = null;
System.out.println("result was: " + result);
return result;
}
private void processEndGameResult(int result){ // 재시작 혹은 체크 아웃 응답에 대한 분기
if (result == 1) { // yes, want to play again
resetScores();
resetBowlerIterator();

} else if (result == 2) {// no, dont want to play another game
printEndGameReportAndNotifyMembers();
}
}

private void printEndGameReportAndNotifyMembers(){ // 점수 보고서 생성 및 출력
Vector printVector;
EndGameReport egr = new EndGameReport( ((Bowler)party.getMembers().get(0)).getNickName() + "'s Party", party);
printVector = egr.getResult();
partyAssigned = false;
Iterator scoreIt = party.getMembers().iterator();
party = null;
partyAssigned = false;
publish(lanePublish());

sendScoreReports(printVector, scoreIt);
}

private void sendScoreReports(Vector printVector, Iterator scoreIt){ // 최종 점수 보고서 이메일 보내기와 출력
int myIndex = 0;
while (scoreIt.hasNext()){
Bowler thisBowler = (Bowler)scoreIt.next();
ScoreReport sr = new ScoreReport( thisBowler, finalScores[myIndex++], gameNumber );
sr.sendEmail(thisBowler.getEmail());
printScoreReportForMembers(printVector, thisBowler, sr);

}
}

private void printScoreReportForMembers(Vector printVector, Bowler thisBowler, ScoreReport sr){ // 각 멤버 점수 보고서 출력
Iterator printIt = printVector.iterator();
while (printIt.hasNext()){
if (thisBowler.getNick() == (String)printIt.next()){
System.out.println("Printing " + thisBowler.getNick());
sr.sendPrintout();
}


try {
sleep(10);
} catch (Exception e) {}
}
}

/** recievePinsetterEvent()
*
* recieves the thrown event from the pinsetter
Expand Down

0 comments on commit ad336d1

Please sign in to comment.