📌 게임의 기본 규칙
1에서 9까지의 서로 다른 임의의 수 3개를 정하고 맞추는 게임
같은 자리에 같은 숫자가 있는 경우 스트라이크, 다른 자리에 숫자가 있는 경우 볼입니다.
- 정답 : 456 인 경우
- 435를 입력한 경우 → 1스트라이크 1볼
- 357를 입력한 경우 → 1스트라이크
- 678를 입력한 경우 → 1볼
- 123를 입력한 경우 → Nothing
일단 나의 정답을 만드는 코드
func makeAnswer() -> String {
var numbers: [Int] = []
var stringNumbers: [String] = []
var answers: [String] = []
for number in 102...987 {
numbers.append(number)
}
stringNumbers = numbers.map({ number in
String(number)
})
for str in stringNumbers {
if str[str.startIndex] != str[str.index(after: str.startIndex)] &&
str[str.index(after: str.startIndex)] != str[str.index(before: str.endIndex)] &&
str[str.startIndex] != str[str.index(before: str.endIndex)] &&
!str.contains("0") {
answers.append(str)
}
}
return answers.randomElement() ?? "잘못된 숫자입니다."
}
}
나는 makeAnswer의 리턴값을 String으로 만들었다. 이유는... 그냥 그럴 생각은 없었는데 마지막에 String으로 만든 배열을 굳이 Int로 바꾸어야 하나? 라는 아주 작은 쓸모없는 생각..으로..😓
나는 숫자를 일단 배열에 다 넣은 뒤 거기서 조건에 맞는 숫자만 배열에 추가하는 식으로 진행했는데, 간단하게 Int로 만들 수 있는 방법이 있었다.
다음 단계를 봤을 때, 과제의 의도도 이게 아닌 것 같긴하다.
그래도 이렇게 만든 덕분에 String에 대해 공부를 할 수 있었다.
그래서 다음에는 간단하게 Int로 만들 수 있는 방법을 사용해서 다시 Int 버전으로 만들어 보려고 한다.
아무튼 그 다음! 이제 게임을 시작하고, 게임을 진행해나가는 과정이다.
func start() {
let answer = makeAnswer()
print("⚾️ 안녕하세요! 야구 게임을 시작합니다 ⚾️")
print("1에서 9까지의 서로 다른 임의의 수 3개를 정하고 맞추는 게임입니다")
print("0도 포함되면 안 됩니다!")
print("숫자를 입력해주세요!")
var correctNumber: Bool = true
var answerNumbers = Array(answer)
while correctNumber {
var input = readLine()!
var inputNumbers = Array(input)
var strike = 0
var ball = 0
if (Int(input) == nil) {
print("문자열 말고, 숫자를 입력해주세요.")
} else if Int(input) ?? -1 < 0 {
print("음수입니다. 양수를 입력해주세요.")
} else if input.count != 3 {
print("세 자리 숫자를 입력해주세요.")
} else if input[input.startIndex] == input[input.index(after: input.startIndex)] ||
input[input.index(after: input.startIndex)] == input[input.index(before: input.endIndex)] ||
input[input.startIndex] == input[input.index(before: input.endIndex)] ||
input.contains("0") {
print("1-9까지의 서로 다른 임의의 수 3개를 입력해주세요. 0이 들어가도 안 됩니다.")
} else if input.count == 3 {
for index in 0...2 {
if inputNumbers[index] == answerNumbers[index] {
strike += 1
} else if answerNumbers.contains(inputNumbers[index]) {
ball += 1
}
}
if strike == 3 {
print("정답입니다! 게임이 끝났습니다.")
correctNumber = false
} else if strike == 0 && ball == 0 {
print("스트라이크와 볼 중 아무것도 해당되지 않습니다.")
} else {
print("\(strike) 스트라이크, \(ball) 볼")
}
}
}
}
과제를 제출하는 시점에 고쳐야 할 곳 들이 많이 보였는데,
일단 과제 제출을 하고 싶었고, 너무 String에 시달려서 그만 보고 싶었다...🥲
그래서 그냥 제출해버렸다..!
다음엔 Int에 시달리겠지?
Int로 만들면서 고쳐보려고 한다.
사용자의 입력을 받아오는 부분도 그냥 처음부터 배열로 만들어도 될 것 같고..🤔
배열이 아닌 다른 방법이 있을텐데 그 방법을 사용해보고 싶기도 하다.
문자열인지 아닌지 알아보는 방법도 여러가지가 있겠지?
제일 맘에 안 드는 부분은 서로 다른 임의의 수를 구별해내는 부분.
다른 방법이 생각이 났었는데 지금은 또 생각이 안 난다. 생각이 날듯 말듯한...