본문 바로가기

Languages/Java

자바 배열과 Random 라이브러리 활용 - 간단한 숫자야구 게임 만들어보기

너무나 간단하게 만들어본 숫자야구 게임입니다 ⚾🥎

 

실행되는 콘솔먼저 보고 가시죠 

 

 

 

너무나도 허접한 결과물이지만 

원하는 실행 결과가 나온다는 것에 초점을 맞췄습니다 😅

 

 

 

너무 유명한 게임이지만 숫자야구가 무엇인지 모르는 분들을 위한 짧은 설명글입니다.

 

 

 

숫자야구란 , 
3자리 또는 4자리 숫자를 가지고 상대가 생각한 숫자를 맞추는 게임이에요

 

 

기본 규칙

상대방의 숫자 3개를 추측하며 찾는다 .

먼저 다 맞추는 사람이 승리하는 게임

 

  • Strike(스트라이크)
    → 위치도 같고 숫자도 같으면 +1
  • Ball(볼)
    → 숫자는 같지만 위치가 다르면 +1
  • Out(아웃)
    → 숫자가 아예 없으면 카운트 없음

 

 

어떻게하면 숫자야구를 Java로 만들어볼 수 있을까 생각하며

큰 흐름만 보고 만든 플로우 차트입니다

 

전체적인 흐름 


① 난수 생성 → ② 사용자로부터 숫자를 입력받기 →  ③ 난수로 뽑은 숫자와 입력받은 수를 비교 
→ ④ STRIKE / BALL 체크해서 알려주기 → ⑤ 3STRIKE 승리 !

전체적인 플로우차트

 

 

 

하지만 이렇게만 코드를 짜게되면 오류 투성이겠죠 ..?

그래서

 

큰 흐름 별로 중요한 세부적인 내용도 같이 생각해봤습니다

 

 

 

세부적인 내용 

① 난수 생성

 

숫자야구는 1부터 9까지 중복이 없는 숫자들로만 이루어지는 규칙이 있다고 합니다.

(사실 저도 몰랐어요)

 

 

중복이 없는 숫자를 뽑아 값을 전달해줘야 하기 때문에 

저는 임의 변수를 만들어 뽑은 수를 저장하고

난수 값과 저장한 변수의 값을 비교하여 

중복되는 값이 나왔다면 반복문을 통해 새로운 값이 나올 때 까지 빙빙 돌려봤어요

 

분명 더 좋은 방법이 있겠죠 . . . ?

 

세부적인 내용을 작성한 코드 입니다.

 

   설명   

 

  • 난수를 사용하기 위한 Random 라이브러리 이용 (1~9) 
  • 뽑은 난수를 저장하기 위한 String 타입의 배열과 / 중복 검사를 위한 String 변수 num 선언
  • 이중 반복문을 이용하여 값을 저장
    • num 변수에 저장되어 있는 값 중에 난수 값인 값이 있는지 확인하는 contains 사용 (있으면 다시 반복문 최상단으로)
    • 중복되지 않는다면 num += n  난수를 저장하기 위한 String 타입 배열에 저장 (for문의 index를 이용하여 접근)
  • 반복문을 탈출하고 배열에 담긴 난수 값을 호출한 곳으로 리턴해준다

 

② 사용자로부터 숫자를 입력받기 (유효성검사)

 

 

입력 값은 3번에 걸쳐 입력 받아도 되지만

한 번에 띄어쓰기를 통해 입력하는 경우를 조건으로 하였습니다

 

 

 

   설명   

 

  • 입력을 받기위한 Scanner 라이브러리 사용
  • 입력 받은 값을 저장하기 위한 String 타입의 배열 선언
  • split() 이용하여 공백을 기준으로 총 3개의 배열에 각각 들어간다
  • 반복문을 탈출하고 배열에 담긴 난수 값을 호출한 곳으로 리턴해준다

입력 받은 값이 제대로 된 값인지

 

 

 

입력을 받을 때에는 너무나 많은 예외상황을 생각해야 되는 것 같은데

아직 중복이나 예외처리 방법을 자세히 몰라 아는 선에서 최대한 처리 해보았습니다..  

 

 

 

세부적인 내용을 작성한 코드 입니다.

 

   설명   

 

  • 사용자로부터 입력받은 값의 배열을 파라미터로 넘겨받는다.
  • 배열의 길이가 3이 아니라면 예외발생 !
  • 양 공백을 제거하였는데도 공백이라면 예외발생 !
  • 1~9 사이의 숫자가 아닌 다른 문자라면 예외발생 !
    • 예외 발생시 (boolean) true 를 리턴해준다
  • 이상 없으면 (boolean) false 를 리턴해준다.

 

유효성 검사까지 해주고 나면 

드디어 본 게임을 시작하는겁니다 ...

 

나머지는 올인원으로 끝내보겠습니다

 

 

 

③ 난수로 뽑은 숫자와 입력받은 수를 비교 

④ STRIKE / BALL 체크해서 알려주기

⑤ 3STRIKE 끝

 

 

비교가 끝나면 입력받기와 이어져서 한 번에 흐름도를 만들어보았습니다 ! 

 

 

 

   설명   

 

  • 랜덤으로 뽑은 값과 사용자로부터 입력받은 값의 배열을 파라미터로 넘겨받는다.
  • strike / ball 카운트를 하기위한 변수 선언
  • 위치는 틀려도 같은 값을 확인하기 위한 String 타입의 변수에 뽑은 값을 모두 합쳐서 넣어준다
    • 입력과 출력되는 글자(숫자)가 1~9 이기 때문에 가능한 조건이다
  • 파라미터로 받은 변수 각각 같은 인덱스 자리에 같은 값이 있다면 Strike !!
  • 그렇지 않으면 String 변수에 포함되어 있는지 확인 있다면 Ball !!
  • 반복이 끝나면 Strike와 Ball 의 값을 출력하며 boolean 을 리턴한다
    • Strike == 3 ? 승리 !!(true)  :  다시도전(false)

 

설명한 흐름 모두 합쳐서 본 플로우차트입니다

 

메인 메서드 

 

 

이렇게 간단한 숫자야구 게임 만들어보았습니다 

 

더 좋은 방법이 있겠지만 아직은 잘 몰라서

 

더 열심히 공부해야겠슴다