diff --git a/README.md b/README.md index 3b24489..446ecab 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,72 @@ -# 숫자 야구 게임 과제 (Week 2) -숫자 야구 게임은 1에서 9까지의 서로 다른 3개의 숫자를 맞추는 게임입니다.
-각 레벨마다 기능이 확장되며, 팀원들이 협업하여 매주 주어진 과제를 해결해 나갑니다. +# ⚾️ 숫자 야구 게임 +## 개요 +- 숫자 야구 게임은 컴퓨터가 생성한 임의의 숫자 세 개를 맞추는 게임입니다. 사용자가 입력한 숫자와 자리 수를 비교하여 정답 여부를 판별합니다. +- 개발 도구 : Xcode 16 +- 개발 기간 : 2024년 11월 4일 ~ 11월 8일 +- 개발 인원 : Jeff -# 📝 협업 규칙 -### 레포지토리 설정 및 브랜치 관리 -**1** **Fork로 가져오기**: 각 팀원은 레포지토리를 Fork하여 자신의 개인 레포지토리로 가져옵니다.
-**2** **브랜치 생성**: Fork한 개인 레포지토리에서 각자의 이름을 딴 브랜치를 생성합니다.
-**3** **Pull Request**: 과제를 마친 후, 각자의 브랜치로 Pull Request를 생성하여 코드 리뷰를 요청합니다. 모든 팀원이 Pull Request에 코멘트를 달고 피드백을 제공합니다.
-**4** **수정 및 Merge**: 피드백을 반영하여 수정하고, 팀원들의 동의를 얻은 후 merge를 진행합니다.
+# 코드 파일 구조 +* base.swift: 게임의 전반적인 흐름을 구현하는 클래스 +* checkAnswer.swift: 유저의 값과 정답 값을 비교하는 클래스 +* ErrorHandling.swift: 에러를 처리하를 정의한 enum +* GameRecord.swift: 게임 기록을 보여주기 위한 클래스 +* GetAnswer.swift: 랜덤으로 정답 값을 생성하는 클래스 +* GetUserValue.swift: 유저의 입력 값을 받아오고 에러를 정의하는 클래스 +* StartGame.swift: 앱의 전반적인 흐름을 구현하는 클래스 +* main.swift: 앱의 메인 진입점 -이 과정을 통해 서로의 코드에 대해 이해를 높이고, “왜 이렇게 작성했는지”에 대한 질문과 답변을 주고받으며 과제를 진행합니다. -# 📂 코드 파일 구조 -* main.swift: 게임의 메인 진입점으로, 레벨을 선택하고 시작할 수 있도록 구성되어 있습니다. startGame() 함수가 게임의 시작을 담당합니다. -* Lv_1.swift ~ Lv_6.swift: 각 레벨별 요구사항에 맞게 구현된 파일입니다. 각 파일에는 해당 레벨의 기능을 구현하는 함수가 포함되어 있습니다. +--- -⠀📜 구현 가이드 +## 게임 레벨별 구성 +### Lv.1 + **1 ~ 9 까지의 서로 다른 임의의 수를 3개 생성** +- **Point & 개발 과정** + - `random` 메서드를 이용하여 범위를 설정해서 임의의 수 생성 + - **Set**을 이용해 중복값이 없는 3자리 수를 만든 뒤 배열에 저장하여 관리 -### main.swift -Command Line Tool 프로젝트에서는 하나의 `main.swift` 파일에서만 프로그램을 시작할 수 있습니다. 따라서 각 레벨별 기능을 별도의 파일로 구현한 후, `main.swift` 파일에서 해당 레벨의 함수를 호출하여 실행하도록 구성합니다. +### Lv.2 + **유저 입력을 받아 정답과 비교하여 스트라이크/볼 판별** +- **Point & 개발 과정** + - **유저의 입력 받기**: `readLine`으로 값을 받아 배열에 저장 + - **에러 처리**: `do-try-catch`와 `enum`을 활용한 커스텀 에러 처리 + - **정답과 비교**: 두 배열의 같은 자리 수는 **strike**, 위치만 다른 경우 **ball**로 판별 + - **게임 종료 조건**: 3 스트라이크로 맞췄을 때 종료 -```swift -import Foundation +### Lv.3 + **0 ~ 9 까지의 서로 다른 3자리 수, 맨 앞에 0 금지** +- **Point & 개발 과정** + - Lv.1에서 사용한 정답 생성 메서드 수정 + - 랜덤 값이 첫 번째 자리일 때 0이 올 수 없도록 조건 추가 -func startGame() { - print("레벨을 선택하세요 (1, 2, 3, 4, 5, 6):") - - if let input = readLine(), let level = Int(input) { - switch level { - case 1: - levelOne() - case 2: - levelTwo() - case 3: - levelThree() - case 4: - levelFour() - case 5: - levelFive() - case 6: - levelSix() - default: - print("유효하지 않은 레벨입니다. 1~6까지를 선택해주세요.") - } - } else { - print("잘못된 입력입니다.") - } -} -// 게임 시작 -startGame() -``` -* startGame() 함수에서 게임의 레벨을 선택하여 시작할 수 있도록 구성합니다. -* 사용자가 입력한 레벨 번호에 따라 해당 레벨의 함수를 호출하여 게임을 진행합니다. +### Lv.4 + **초기 안내문구와 메뉴 선택 기능 추가** +- **Point & 개발 과정** + - **초기 화면 구성**: 프로그램 시작 시 안내문구 출력하여 1, 2, 3번 기능 제공 + - **게임 종료 후 초기화면 이동**: 정답을 맞췄을 때 초기화면으로 돌아가도록 수정 + - `while` 문과 `switch` 문으로 옵션 선택 가능하게 구현 -### 각 레벨 파일 (Lv_1.swift ~ Lv_6.swift) - 구현 파일 +### Lv.5 + **게임 기록 기능 추가** +- **Point & 개발 과정** + - **게임 횟수와 시도 횟수 기록**: 게임 횟수와 한 게임당 시도 횟수를 기록해 출력 + - **게임 기록 배열**: 게임 종료 후 시도 횟수를 배열에 추가하여 기록 유지 -**Lv_1.swift** +### Lv.6 + **종료하기와 옵션 범위 외 입력 처리 추가** +- **Point & 개발 과정** + - **종료 기능 구현**: 3번 선택 시 앱 종료 + - **입력 범위 검증**: `readLine`으로 받은 값을 옵셔널 바인딩해 1~3 사이 값이 아닐 경우 오류 메시지 출력 + +--- -```swift -import Foundation +## 주요 기능 -func levelOne() { - // 1. 정답을 생성하는 로직을 추가합니다. - // 2. 유저가 정답을 맞출 때까지 반복해서 입력을 받습니다. - // 3. 입력값이 유효한지 검사하고 힌트를 제공하는 기능을 구현합니다. -} -``` +- **랜덤 숫자 생성**: 중복되지 않는 세 자리 수를 랜덤으로 생성 +- **숫자 비교 및 판별**: 입력한 숫자와 정답을 비교하여 스트라이크와 볼의 개수를 판단 +- **기록 관리**: 시도 횟수와 게임 횟수를 기록하여, 기록 보기 기능을 구현 +- **에러 처리**: 입력한 갑이 올바르지 않은 경우 에러를 처리하여 사용자가 이해하도록 개선 -각 레벨별로 구현하시면 됩니다. +## 🎯 트러블슈팅 +[트러블 슈팅과 자세한 과정](https://velog.io/@jeffapd_/swiftproject%EC%95%BC%EA%B5%AC%EA%B2%8C%EC%9E%84#-lv1) diff --git a/Week2-BaseballGame/Week2-BaseballGame/Base.swift b/Week2-BaseballGame/Week2-BaseballGame/Base.swift new file mode 100644 index 0000000..dcde686 --- /dev/null +++ b/Week2-BaseballGame/Week2-BaseballGame/Base.swift @@ -0,0 +1,52 @@ + + +class BaseBallGame { + let answer = GetAnswer() + let userValue = GetUserValue() + lazy var checkAnswer = CheckAnswer(getAnswer: answer, getUserValue: userValue) + static var endPoint = 0 + + + // 게임 초기화 + func settingGame() { + // 정답 배열 초기화 + answer.answerArray.removeAll() + checkAnswer.strike = 0 + // 정답 생성 + answer.getAnswser() + print("< ⚾️ 게임을 시작합니다. >") + } + + + // 게임 시작 + func startGame() { + // 게임 횟수를 카운트, 도전 횟수 초기화 + GameRecord.gameCount += 1 + GameRecord.tryCount = 0 + + // User입력값 초기화, 값 입력 받기(정답이 맞을때 까지 반복) + while checkAnswer.strike != answer.answerArray.count { + userValue.initUserValue() + // do catch를 이용한 에러처리 + do { + try userValue.inputUserValue() + checkAnswer.checkAnswer() + checkAnswer.printResult() + GameRecord.tryCount += 1 // try 횟수 카운트 + } catch ErrorHandling.emptyInput { + print(" 🚫 값을 입력해주세요.") + } catch ErrorHandling.wrongInput { + print(" 🚫 숫자 이외의 값을 입력하셨습니다.") + } catch ErrorHandling.duplicateNumber { + print(" 🚫 중복된 값을 입력하셨습니다.") + } catch ErrorHandling.outOfRange { + print(" 🚫 3자릿수를 입력해주세요") + } catch { + print(" 🚫 알 수 없는 오류") + } + } + GameRecord.tryRecordArray.append(GameRecord.tryCount) // 게임 종료 후 try횟수 배열에 추가 + BaseBallGame.endPoint = 0 // 게임이 종료를 표시 + } +} + diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/CheckAnswer.swift" b/Week2-BaseballGame/Week2-BaseballGame/CheckAnswer.swift similarity index 88% rename from "Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/CheckAnswer.swift" rename to Week2-BaseballGame/Week2-BaseballGame/CheckAnswer.swift index 1654a77..431099e 100644 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/CheckAnswer.swift" +++ b/Week2-BaseballGame/Week2-BaseballGame/CheckAnswer.swift @@ -13,8 +13,8 @@ class CheckAnswer { func checkAnswer() { // 유저와 정답 배열을 셋으로 다시 생성(같은 수(ball)가 몇개인지 체크하기 위해) - let userArrayToSet:Set = Set(getUserValue.userArray) - let answerArrayToSet:Set = Set(getAnswer.answerArray) + let userArrayToSet:Set = Set(getUserValue.userArray) + let answerArrayToSet:Set = Set(getAnswer.answerArray) // 입력한 유저 값이 정답에 몇개가 중복되는지를 체크 후 set의 갯수를 ball의 수로 지정, strike수 초기화(중복되는걸 방지) @@ -34,10 +34,10 @@ class CheckAnswer { func printResult() { if ball == 0 && strike == 0 { // ball과 strike 수가 없는 경우 아웃 - print("OUT") + print("[ OUT ]") } else if strike == getAnswer.answerArray.count { // strike 수가 정답의 갯수와 같은 경우 - print("정답입니다.") + print(" 🏆 정답입니다. ") } else { print("[ \(strike) S, \(ball) B ]") } diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/ErrorHandling.swift" b/Week2-BaseballGame/Week2-BaseballGame/ErrorHandling.swift similarity index 88% rename from "Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/ErrorHandling.swift" rename to Week2-BaseballGame/Week2-BaseballGame/ErrorHandling.swift index cbc1c58..7001538 100644 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/ErrorHandling.swift" +++ b/Week2-BaseballGame/Week2-BaseballGame/ErrorHandling.swift @@ -3,7 +3,6 @@ enum ErrorHandling: Error { case wrongInput case duplicateNumber - case inputZero case outOfRange case emptyInput } diff --git a/Week2-BaseballGame/Week2-BaseballGame/GameRecord.swift b/Week2-BaseballGame/Week2-BaseballGame/GameRecord.swift new file mode 100644 index 0000000..f2c16fa --- /dev/null +++ b/Week2-BaseballGame/Week2-BaseballGame/GameRecord.swift @@ -0,0 +1,15 @@ + +// 게임 기록을 위한 클래스 +class GameRecord { + static var gameCount = 0 + static var tryCount = 0 + static var tryRecordArray:[Int] = [] + + // 기록한 값을 출력 + func showRecord () { + for i in 0.. Int { + return Int.random(in: 0...9) + } + + // 정답 생성 메서드 + func getAnswser() { + // 중복 값을 제거해주고 3개의 임의의 수를 저장(첫번째 자리에 "0"이 오면 제거) + while answerArray.count < 3 { + let randomValue = getRandomValue() + if !answerArray.contains(randomValue) { + answerArray.append(randomValue) + } + if answerArray[0] == 0 { + answerArray.removeFirst() + } + } + } +} diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/GetUserValue.swift" b/Week2-BaseballGame/Week2-BaseballGame/GetUserValue.swift similarity index 89% rename from "Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/GetUserValue.swift" rename to Week2-BaseballGame/Week2-BaseballGame/GetUserValue.swift index e01f606..9442f19 100644 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/GetUserValue.swift" +++ b/Week2-BaseballGame/Week2-BaseballGame/GetUserValue.swift @@ -19,18 +19,14 @@ class GetUserValue { guard (Int(input) != nil) else { throw ErrorHandling.wrongInput } - guard !input.contains("0") else { - throw ErrorHandling.inputZero - } guard let intValue = Int(input), (100...999).contains(intValue) else { throw ErrorHandling.outOfRange } guard Set(input).count == 3 else { throw ErrorHandling.duplicateNumber } + // 유저 입력 값을 배열에 추가 let result = input.map { Int(String($0))! } userArray.append(contentsOf: result) - - print(userArray) } } diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_1(\355\225\204\354\210\230\352\265\254\355\230\204)/Lv_1(\355\225\204\354\210\230\352\265\254\355\230\204).swift" "b/Week2-BaseballGame/Week2-BaseballGame/Lv_1(\355\225\204\354\210\230\352\265\254\355\230\204)/Lv_1(\355\225\204\354\210\230\352\265\254\355\230\204).swift" deleted file mode 100644 index e21f043..0000000 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_1(\355\225\204\354\210\230\352\265\254\355\230\204)/Lv_1(\355\225\204\354\210\230\352\265\254\355\230\204).swift" +++ /dev/null @@ -1,34 +0,0 @@ -// Lv 1 (11/04 까지) -// 1에서 9까지의 서로 다른 임의의 수 3개를 정하고 맞추는 게임입니다 -// 정답은 랜덤으로 만듭니다.(1에서 9까지의 서로 다른 임의의 수 3자리) - -import Foundation - -func levelOne() { - - struct GetAnswer { - var setRandomValue:Set = [] - var answerArray:[Int] = [] - - // 랜덤 값을 생성하는 함수 - func getRandomValue() -> Int { - return Int.random(in: 1...9) - } - } - - var answer = GetAnswer() - - // 중복 값을 제거해주고 3개의 임의의 수를 저장 - while answer.setRandomValue.count != 3 { - answer.setRandomValue.insert(answer.getRandomValue()) - } - // set에 저장된 랜덤 값을 배열에 다시 추가 - for i in answer.setRandomValue { - answer.answerArray.append(i) - } - print(answer.answerArray) -} - - - - diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/Base.swift" "b/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/Base.swift" deleted file mode 100644 index 378538c..0000000 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/Base.swift" +++ /dev/null @@ -1,38 +0,0 @@ - -class BaseBallGame { - let answer = GetAnswer() - let userValue = GetUserValue() - lazy var checkAnswer = CheckAnswer(getAnswer: answer, getUserValue: userValue) - - // 게임시작 -> 정답 생성 - func initGame() { - print("< 게임 시작 >") - answer.getAnswser() - } - - // 값을 입력 받기 -> User입력값 초기화, 값 입력 받기(정답이 맞을때 까지) - func startGame() { - // while문 do 위치 고민해보기 - while checkAnswer.strike != answer.answerArray.count { - userValue.initUserValue() - do { // do catch를 이용한 에러처리 - try userValue.inputUserValue() - checkAnswer.checkAnswer() - checkAnswer.printResult() - } catch ErrorHandling.emptyInput { - print("값을 입력해주세요.") - } catch ErrorHandling.wrongInput { - print("숫자 이외의 값을 입력하셨습니다.") - } catch ErrorHandling.duplicateNumber { - print("중복된 값을 입력하셨습니다.") - } catch ErrorHandling.inputZero { - print("숫자 0을 입력하셨습니다.") - } catch ErrorHandling.outOfRange { - print("3자릿수를 입력해주세요") - } catch { - print("알 수 없는 오류") - } - } - } -} - diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/GetAnswer.swift" "b/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/GetAnswer.swift" deleted file mode 100644 index 9831c28..0000000 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/GetAnswer.swift" +++ /dev/null @@ -1,32 +0,0 @@ - -// 정답 값을 생성하기 위한 클래스 -class GetAnswer { - // 정답 값을 넣을 배열 생성 - var setRandomValue:Set = [] - var answerArray:[Int] = [] - - // 랜덤값 생성 메서드 - func getRandomValue() -> Int { - return Int.random(in: 1...9) - } - - // 정답 생성 메서드 - func getAnswser() { - - // 정답 리셋(나중에 추가 - 다른 새로운 게임 시작시) - // setRandomValue = [] - // answerArray = [] - - // 중복 값을 제거해주고 3개의 임의의 수를 저장 - while setRandomValue.count != 3 { - setRandomValue.insert(getRandomValue()) - } - - // set에 저장된 랜덤 값을 배열에 추가(인덱스 자리를 위해) - for i in setRandomValue { - answerArray.append(i) - } - print(answerArray) // - 테스트를 위한 프린트문 - } - -} diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204).swift" "b/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204).swift" deleted file mode 100644 index 2518bbf..0000000 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204)/Lv_2(\355\225\204\354\210\230\352\265\254\355\230\204).swift" +++ /dev/null @@ -1,24 +0,0 @@ -// Lv 2 (11/06 까지) - -/* - - 정답을 맞추기 위해 3자리수를 입력하고 힌트를 받습니다 - - 힌트는 야구용어인 **볼**과 **스트라이크**입니다. - - 같은 자리에 같은 숫자가 있는 경우 **스트라이크**, 다른 자리에 숫자가 있는 경우 **볼**입니다 - - ex) 정답 : 456 인 경우 - - 435를 입력한 경우 → 1스트라이크 1볼 - - 357를 입력한 경우 → 1스트라이크 - - 678를 입력한 경우 → 1볼 - - 123를 입력한 경우 → out - - 만약 올바르지 않은 입력값에 대해서는 오류 문구를 보여주세요 - - 3자리 숫자가 정답과 같은 경우 게임이 종료됩니다 - - 실행 예시(정답 : 456)13123213 - */ - -import Foundation - -// 실행을 위한 함수 -func levelTwo() { - let playGame = BaseBallGame() - playGame.initGame() - playGame.startGame() -} diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_3(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_3(\353\217\204\354\240\204\352\265\254\355\230\204).swift" "b/Week2-BaseballGame/Week2-BaseballGame/Lv_3(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_3(\353\217\204\354\240\204\352\265\254\355\230\204).swift" deleted file mode 100644 index d5df17e..0000000 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_3(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_3(\353\217\204\354\240\204\352\265\254\355\230\204).swift" +++ /dev/null @@ -1,15 +0,0 @@ -// Lv 3 (11/06 까지) - -/* - - 정답이 되는 숫자를 0에서 9까지의 서로 다른 3자리의 숫자로 바꿔주세요 - - 맨 앞자리에 0이 오는 것은 불가능합니다 - - 092 → 불가능 - - 870 → 가능 - - 300 → 불가능 - */ - -import Foundation - -func levelThree() { - -} diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_4(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_4(\353\217\204\354\240\204\352\265\254\355\230\204).swift" "b/Week2-BaseballGame/Week2-BaseballGame/Lv_4(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_4(\353\217\204\354\240\204\352\265\254\355\230\204).swift" deleted file mode 100644 index f529e37..0000000 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_4(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_4(\353\217\204\354\240\204\352\265\254\355\230\204).swift" +++ /dev/null @@ -1,24 +0,0 @@ -// Lv 4 (11/07 까지) - -/* - 프로그램을 시작할 때 안내문구를 보여주세요 - // 예시 - 환영합니다! 원하시는 번호를 입력해주세요 - 1. 게임 시작하기 2. 게임 기록 보기 3. 종료하기 - ​ - 1번 게임 시작하기의 경우 “필수 구현 기능” 의 예시처럼 게임이 진행됩니다 - 정답을 맞혀 게임이 종료된 경우 위 안내문구를 다시 보여주세요 - // 예시 - 환영합니다! 원하시는 번호를 입력해주세요 - 1. 게임 시작하기 2. 게임 기록 보기 3. 종료하기 - 1 // 1번 게임 시작하기 입력 - - < 게임을 시작합니다 > - 숫자를 입력하세요 - */ - -import Foundation - -func levelFour() { - -} diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_5(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_5(\353\217\204\354\240\204\352\265\254\355\230\204).swift" "b/Week2-BaseballGame/Week2-BaseballGame/Lv_5(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_5(\353\217\204\354\240\204\352\265\254\355\230\204).swift" deleted file mode 100644 index f9e0d17..0000000 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_5(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_5(\353\217\204\354\240\204\352\265\254\355\230\204).swift" +++ /dev/null @@ -1,20 +0,0 @@ -// Lv 5 (11/07 까지) - -/* - 2번 게임 기록 보기의 경우 완료한 게임들에 대해 시도 횟수를 보여줍니다 - // 예시 - 환영합니다! 원하시는 번호를 입력해주세요 - 1. 게임 시작하기 2. 게임 기록 보기 3. 종료하기 - 2 // 2번 게임 기록 보기 입력 - - < 게임 기록 보기 > - 1번째 게임 : 시도 횟수 - 14 - 2번째 게임 : 시도 횟수 - 9 - 3번째 게임 : 시도 횟수 - 12 -*/ - -import Foundation - -func levelFive() { - -} diff --git "a/Week2-BaseballGame/Week2-BaseballGame/Lv_6(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_6(\353\217\204\354\240\204\352\265\254\355\230\204).swift" "b/Week2-BaseballGame/Week2-BaseballGame/Lv_6(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_6(\353\217\204\354\240\204\352\265\254\355\230\204).swift" deleted file mode 100644 index 848f2d1..0000000 --- "a/Week2-BaseballGame/Week2-BaseballGame/Lv_6(\353\217\204\354\240\204\352\265\254\355\230\204)/Lv_6(\353\217\204\354\240\204\352\265\254\355\230\204).swift" +++ /dev/null @@ -1,26 +0,0 @@ -// Lv 6 (11/07 까지) - -/* - 3번 종료하기의 경우 프로그램이 종료됩니다 - 이전의 게임 기록들도 초기화됩니다 - // 예시 - 환영합니다! 원하시는 번호를 입력해주세요 - 1. 게임 시작하기 2. 게임 기록 보기 3. 종료하기 - 3 // 3번 종료하기 입력 - - < 숫자 야구 게임을 종료합니다 > - ​ - 1, 2, 3 이외의 입력값에 대해서는 오류 메시지를 보여주세요 - // 예시 - 환영합니다! 원하시는 번호를 입력해주세요 - 1. 게임 시작하기 2. 게임 기록 보기 3. 종료하기 - 4 - - 올바른 숫자를 입력해주세요! -*/ - -import Foundation - -func levelSix() { - -} diff --git a/Week2-BaseballGame/Week2-BaseballGame/StartGame.swift b/Week2-BaseballGame/Week2-BaseballGame/StartGame.swift new file mode 100644 index 0000000..0a84bc7 --- /dev/null +++ b/Week2-BaseballGame/Week2-BaseballGame/StartGame.swift @@ -0,0 +1,45 @@ + +// 게임 시작을 위한 클래스 +class StartGame { + let baseBallGame = BaseBallGame() + let gameRecord = GameRecord() + + // 게임의 시작(반복)과 끝을 정하는 메서드 + func roof() { + if BaseBallGame.endPoint == 0 { + initGame() + } + } + + // 초기 게임 시작시 화면 출력과 각 모드에 진입 + func initGame() { + let range = 1...3 + var select = 0 + print(" 🙌🏻 환영합니다! 원하시는 번호를 입력해주세요") + + // 보기 선택이 이루어지도록 구현 + while !range.contains(select) { + print("< 1. 게임 시작하기 2. 게임 기록 보기 3. 종료하기 >") + if let input = readLine() { + select = Int(input) ?? 0 + switch select { + case 1 : // 게임 시작 + baseBallGame.settingGame() + baseBallGame.startGame() + case 2 : // 기록 보기 + print("< 🧾 게임 기록 보기 >") + gameRecord.showRecord() + case 3 : // 종료하기 + print("< 👋🏻 숫자 야구 게임을 종료합니다. >") + // roof 메서드안의 if문에서 탈출 + BaseBallGame.endPoint = 1 + GameRecord.tryRecordArray.removeAll() // 기록 초기화 + default : // 정해진 숫자 외의 값을 입력 받았을 때 + print(" # 보기에 있는 숫자를 입력해주세요. # ") + + } + } + } + roof() + } +} diff --git a/Week2-BaseballGame/Week2-BaseballGame/main.swift b/Week2-BaseballGame/Week2-BaseballGame/main.swift index a3a9ae1..4e204c8 100644 --- a/Week2-BaseballGame/Week2-BaseballGame/main.swift +++ b/Week2-BaseballGame/Week2-BaseballGame/main.swift @@ -1,31 +1,5 @@ import Foundation -func startGame() { - print("레벨을 선택하세요 (1, 2, 4, 5, 6):") - - if let input = readLine(), let level = Int(input) { - switch level { - case 1: - levelOne() - case 2: - levelTwo() - case 3: - levelThree() - case 4: - levelFour() - case 5: - levelFive() - case 6: - levelSix() - default: - print("유효하지 않은 레벨입니다. 1~6까지를 선택해주세요.") - } - } else { - print("잘못된 입력입니다.") - } -} - // 게임 시작 -startGame() +StartGame().initGame() -// branch 생성