업무/기타

[과제] 볼링게임_ 설계

phyho 2024. 2. 18. 21:36

 

 

스페어 (/)
스페어 10점 + 다음프레임 1투구 점수

거터(G)
1투구 0점

미스(-)
2투구 0점

 

스트라이크 (2투구에 X기입)
이전프레임 점수 + 스트라이크 10점 + 다음프레임 점수 (1투구+2투구)

 

- 더블 (연속 스트라이크)

n+2번 프레임의 점수 합산

 

 


퍼펙트 게임
스트라이크 연속12번 _ 300점

 

 

 

(조건)

* 1투구 + 2투구 <= 10

* Score 총점 최대(가산 전) 30점

* n = 10 일 때 

* 가산점수 반영

   스트라이크 => n+2까지

   스페어 => n+1까지

 

** 10프레임 점수계산 **

firstNumber = 10 (strike)  => secondNumber & lastNumber 

firstNumber != 10  => secondNumber <= 10-firstNumber

 > firstNumber + secondNumber = 10 => lastNumber 필요

 > firstNumber + secondNumber != 10 => 게임끝


Frame (1<=n<=10 반복)

Score = 0

Frame =0

 

1. 1투구&2투구 랜덤점수 생성 ( randomNum(n) _ return )

 

  FrameNum1 & FrameNum2

  FrameNum1 <= 10    

  FrameNum2 <=  10 - num1 

 

return 배열?객체?  nFrameNum

 

 

2 현재프레임 합산(1투구+2투구)

 

Frame = FrameNum1 + FrameNum1

 


*** 

(2-1) 조건별로 가산 (다음 투구/프레임 점수) 

 

 - 스트라이크 _ n+2까지

   nFrameNum1  = 10 인경우

 

   (n+1)FrameNum1 + (n+1)FrameNum2 

     nScore = (n+1)Frame

 

 

 - 스페어 _ n+1까지

   nFrameNum1  + nFrameNum2 = 10  인경우

 

   (n+1)FrameNum1 + (n+1)FrameNum2

   nScore = (n+1)FrameNum1

 

 


 

3 이전 프레임 점수 합산  ( calculateScore(n) )

 

n = 1 인 경우

nScore  =+ nFrame

 

n >1 인 경우

nScore  =+ ( nFrame + (n-1)Frame )

 

=> 점수 표시

 


 

for (1~10)

randomNum(n)

     

    if(스트라이크)

        가산

 

     if(스페어)

        가산

 

Frame 값지정

calculateScore(n)

 


 

** 문제점

> 10프레임 점수계산 => 반복문 외부에서 따로 처리

> 더블인경우 점수계산 

 

 

Nums = [ firseNumber, secondNumber ];

frameNums = [ firseNumber + secondNumber ];

plusNums = [ plus ]

 

Nums [ i ] [ j ]  ( i < 10 , j = 0, 1)

 

if   Nums[0][0] + Nums[0][1] === 10

 

if     Nums[1][0] === 10      double

plusScores[0] = frameNums[1] + frameNums[2];

            = Nums[1][0] + Nums[1][1] + Nums[2][0] + Nums[2][1] 

else                                      strike

plusScores[0] = frameNums[1];

                       = Nums[1][0] + Nums[1][1];

 

else if  Nums[0][0] === 10      spare

plusScores[0] = Nums[1][0];