numSet > userNumSet : 어떤 숫자집합인지 한눈에 알아보기가 어려웠던 것을 유저숫자 집합임을 좀 더 명확히 명시해 줌
clcStrikeAndBall > checkStrikeBall로 변경
class GameManage {
var records = [Int]() // 각 게임의 시도 횟수를 저장하는 배열
let baseballGame = BaseballGame() // BaseballGame 인스턴스 생성
func gameStart() { // 게임 시작 시 정답 숫자 생성
baseballGame.startNewGame()
print("< 게임을 시작합니다 >")
gameLoop: while true {
print("숫자를 입력하세요 : ", terminator: "")
if let input = readLine(), let userNum = Int(input) {
//생략
}
func recordView() { // 게임 기록 보기 함수
if records.isEmpty {
//생략
}
func exitGame() {
print("< 숫자 야구 게임을 종료합니다 >")
}
func mainMenu() {
while true {
print("환영합니다, 원하는 번호를 선택하세요!")
print("1. 게임 시작 2. 기록 보기 3. 게임 종료")
//생략
}
}
class BaseballGame {
var tries = 0 // 현재 게임의 시도 횟수를 기록할 변수
var answerNum: [Int] = [] // 정답 숫자를 저장할 배열
// 게임 시작 시 정답 숫자를 생성하는 메서드
func startNewGame() {
answerNum = makeAnswerNum()
// print("정답 숫자: \(answerNum)") 정답 디버깅
}
// 정답 숫자 생성 메서드
private func makeAnswerNum() -> [Int] {
var numbers = [Int]()
// 첫 번째 숫자는 1에서 9 사이의 값으로 선택
numbers.append(Int.random(in: 1...9))
while numbers.count < 3 {
let randomNum = Int.random(in: 0...9)
if !numbers.contains(randomNum) {
numbers.append(randomNum)
}
}
return numbers
}
func isValidNumber(userNum: Int) -> Bool {
let userNumStr = String(userNum)
// 세 자리 숫자를 입력했는지 확인
guard userNumStr.count == 3 else {
print("세 자리 수를 입력해주세요.")
tries += 1
return false
}
let userNumSet = Set(userNumStr)
guard userNumSet.count == 3 else {
print("특정 숫자가 반복 사용되었습니다. 다시 입력해주세요.")
tries += 1
return false
}
return true
}
//스트라이크 볼 체크 함수
func checkStrikeBall(userNum: Int) -> (strike: Int, ball: Int)? {
guard isValidNumber(userNum: userNum) else {
return nil
}
let userNumArray = Array(String(userNum)).compactMap { Int(String($0)) }
var strike = 0
var ball = 0
//숫자 자리 일치 > strike, 숫자만 일치 > ball
for (index, digit) in userNumArray.enumerated() {
if answerNum[index] == digit {
strike += 1
} else if answerNum.contains(digit) {
ball += 1
}
}
tries += 1
return (strike, ball)
}
}
중복숫자 또는 잘못된 입력값을 넣은 횟수는 시도 횟수에 포함하지 않는 오류
func isValidNumber(userNum: Int) -> Bool {
let userNumStr = String(userNum)
// 세 자리 숫자를 입력했는지 확인
guard userNumStr.count == 3 else {
print("세 자리 수를 입력해주세요.")
tries += 1
return false
}
let userNumSet = Set(userNumStr)
guard userNumSet.count == 3 else {
print("특정 숫자가 반복 사용되었습니다. 다시 입력해주세요.")
tries += 1
return false
}
return true
}
잘못된 입력값 조건문에도 tries += 1를 추가하여 시도횟수에 추가되도록 수정함