-
Notifications
You must be signed in to change notification settings - Fork 137
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
숫자 야구 [STEP1] Diana, Denny #204
base: ic_11_diana
Are you sure you want to change the base?
Changes from all commits
a13ce26
96d90f3
9dc5970
f9f4d33
9b7c730
3749cf8
ae8b2c2
9efef7d
2e8b49c
8291401
aea0052
b085c2b
b8fc2d5
9fc69d3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
// | ||
// CheckWinOrLose.swift | ||
// NumberBaseball | ||
// | ||
// Created by 김민제 on 1/4/24. | ||
// | ||
|
||
import Foundation | ||
|
||
extension NumberBaseBall { | ||
func compare(){ | ||
if repeatTime > 1 { | ||
let strike = checkStrike() | ||
let ball = checkIfBall() | ||
|
||
print("\(strike) 스트라이크, \(ball) 볼") | ||
|
||
if strike == 3 { | ||
print("사용자 승리..!") | ||
repeatTime = 9 | ||
} else { | ||
repeatTime -= 1 | ||
print("남은 기회는 \(repeatTime)") | ||
userInputNumber() | ||
} | ||
} else { | ||
print("컴퓨터 승리...!") | ||
repeatTime = 9 | ||
} | ||
} | ||
|
||
func checkStrike () -> Int { | ||
var numberOfStrike: Int = 0 | ||
|
||
for i in 0...(userNumList.count - 1) { | ||
if comNumList[i] == userNumList[i] { | ||
numberOfStrike += 1 | ||
} | ||
} | ||
return numberOfStrike | ||
} | ||
|
||
func checkIfBall() -> Int { | ||
var numberOfBall: Int = 0 | ||
|
||
for i in 0...(userNumList.count - 1) { | ||
var changedComNumList: [String] = comNumList | ||
changedComNumList[i] = "-1" | ||
|
||
if changedComNumList.contains(userNumList[i]) { | ||
numberOfBall += 1 | ||
} | ||
} | ||
return numberOfBall | ||
} | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// | ||
// ExcuteGame.swift | ||
// NumberBaseball | ||
// | ||
// Created by 김민제 on 1/4/24. | ||
// | ||
|
||
import Foundation | ||
|
||
extension NumberBaseBall { | ||
enum GameFunc: String { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. swift에선 약어보단 풀네이밍이 선호됩니다😆 |
||
case start = "1" | ||
case end = "2" | ||
} | ||
|
||
func execute() { | ||
var flag: Bool = true | ||
|
||
while flag { | ||
print("1. 게임시작") | ||
print("2. 게임종료") | ||
print("원하는 기능을 선택해주세요: ", terminator: "") | ||
|
||
guard let input = readLine(), !input.isEmpty else { | ||
print("입력이 잘못 되었습니다.") | ||
continue | ||
} | ||
Comment on lines
+24
to
+27
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 현재와 같이 에러처리를 하게되면 빈값 이외의 잘못된 입력에 대한 예외처리가 안될 거 같습니다! Step2의 조건인 |
||
|
||
guard let selected = GameFunc(rawValue: input) else { | ||
continue | ||
} | ||
|
||
switch selected { | ||
case .start: | ||
gameStart() | ||
case .end: | ||
flag = false | ||
} | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
// | ||
// GameEnd.swift | ||
// NumberBaseball | ||
// | ||
// Created by 김민제 on 1/4/24. | ||
// | ||
|
||
import Foundation | ||
|
||
extension NumberBaseBall { | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// | ||
// GameStart.swift | ||
// NumberBaseball | ||
// | ||
// Created by 김민제 on 1/4/24. | ||
// | ||
|
||
import Foundation | ||
|
||
extension NumberBaseBall { | ||
func gameStart(){ | ||
generateNumber() | ||
userInputNumber() | ||
} | ||
} | ||
|
||
Comment on lines
+10
to
+16
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 1️⃣ extension으로 하신 이유가 있을까요? 2️⃣ 별도의 파일로 분리한 이유가 있을까요? 코드는 결국 협업을 위한 것이기 때문에 파일분리, 객체 extension은 근거가 필요합니다! |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// | ||
// GenerateNumber.swift | ||
// NumberBaseball | ||
// | ||
// Created by 김민제 on 1/4/24. | ||
// | ||
|
||
import Foundation | ||
|
||
extension NumberBaseBall { | ||
func generateNumber() { | ||
comNumList = [] | ||
|
||
while comNumList.count < 3 { | ||
let randomNum = Int.random(in: 1...9) | ||
|
||
let randomNumStr = String(randomNum) | ||
|
||
if !comNumList.contains(randomNumStr) { | ||
comNumList.append(randomNumStr) | ||
} | ||
} | ||
print("comNumList - \(comNumList)") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 해당 부분은 확인을 위한 print 구문인 거 같습니다😊 |
||
} | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// | ||
// UserInputNumber.swift | ||
// NumberBaseball | ||
// | ||
// Created by 김민제 on 1/4/24. | ||
// | ||
|
||
import Foundation | ||
|
||
extension NumberBaseBall { | ||
func userInputNumber() { | ||
userNumList = [] | ||
|
||
print("입력해주세요 : ", terminator: "") | ||
|
||
guard let randomNum = readLine() else { | ||
return | ||
} | ||
|
||
let splitUserInput = randomNum.components(separatedBy: " ") | ||
|
||
guard splitUserInput.count == 3 else { | ||
print("숫자 3개를 띄어쓰기로 구분하여 입력해주세요.") | ||
userInputNumber() | ||
return | ||
} | ||
Comment on lines
+22
to
+26
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 잘못된 입력 시 스텝에서 제시하는 조건에 맞추어 print구문 수정이 필요할 거 같습니다! |
||
|
||
for i in 0...(splitUserInput.count - 1) { | ||
let duplicatedArr: Array<String> = splitUserInput.filter({$0 == splitUserInput[i]}) | ||
|
||
guard duplicatedArr.count == 1 else { | ||
print("중복 숫자는 허용하지 않습니다.") | ||
userInputNumber() | ||
return | ||
} | ||
} | ||
|
||
userNumList = splitUserInput | ||
compare() | ||
} | ||
} | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,21 @@ | ||
// | ||
// NumberBaseball - main.swift | ||
// Created by yagom. | ||
// Created by yagom. | ||
// Copyright © yagom academy. All rights reserved. | ||
// | ||
// | ||
|
||
import Foundation | ||
|
||
print("Hello, World!") | ||
class NumberBaseBall { | ||
var comNumList: Array<String> | ||
var userNumList: Array<String> | ||
var repeatTime: Int = 9 | ||
|
||
init(comNumList: Array<String>, userNumList: Array<String>) { | ||
self.comNumList = comNumList | ||
self.userNumList = userNumList | ||
} | ||
} | ||
Comment on lines
+9
to
+18
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 해당 객체도 별도의 파일로 구분하면 좋을 거 같습니다!😊 |
||
|
||
let numberBaseball = NumberBaseBall(comNumList: [], userNumList: []) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 해당 객체를 빈배열로 넣어주는 이유가 있을까요? |
||
numberBaseball.execute() |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,53 @@ | ||
## iOS 커리어 스타터 캠프 | ||
# iOS 커리어 스타터 캠프 11기 | ||
#### 제목: 숫자 야구 | ||
#### 구성원 | ||
- Diana: https://github.com/Diana-yjh | ||
- Danny: https://github.com/dannykim1215 | ||
|
||
### 숫자야구 프로젝트 저장소 | ||
</br> | ||
|
||
- 이 저장소를 자신의 저장소로 fork하여 프로젝트를 진행합니다 | ||
## ✍️ FlowChart | ||
![Screenshot 2024-01-05 at 9 15 55 PM](https://github.com/Diana-yjh/ios-number-baseball/assets/57698939/11f4ccbb-8f66-4259-aac5-3161db6b8869) | ||
|
||
|
||
## 🗓️ 타임라인 | ||
### 1월 3일 | ||
기본 큰 기능 구현 (프로그램 실행 함수, 게임 시작 함수, 사용자 입력 함수 와 검증 기능)</br></br> | ||
|
||
### 1월 4일 | ||
컴퓨터 랜덤 숫자 생성 함수, 스트라이크 체크 기능, 볼 체크 기능 구현 후 각 함수들을 파일로 분리</br> | ||
FlowChart 이미지 추가, Readme에 추가</br> | ||
이미 구현 한 스트라이크 체크 기능과 볼 체크 기능 을 사용하여 체크 함수 구현</br> | ||
체크 함수 내 게임 시작 함수(execute()) 호출 제거</br></br> | ||
|
||
### 1월 5일 | ||
사용자 입력 함수 ```filter``` 를 활용하여 로직 변경</br></br> | ||
변경 전 | ||
``` | ||
if splitUserInput[0] != splitUserInput[1] && splitUserInput[0] != splitUserInput[2] && splitUserInput[1] != splitUserInput[2] { | ||
~ | ||
} | ||
``` | ||
</br> | ||
변경 후 | ||
</br> | ||
|
||
``` | ||
for i in 0...2 { | ||
let deleteSameNumber = splitUserInput.filter({$0 == splitUserInput[i]}) | ||
} | ||
``` | ||
|
||
</br> | ||
게임 9회 종료 후에도 게임이 종료되지 않고 반복되는 오류 수정 </br> | ||
게임이 실행되지 않고 사용자 입력이 반복되는 오류 수정</br> | ||
|
||
## 👍 실행 결과 | ||
![Screenshot 2024-01-05 at 9 14 15 PM](https://github.com/Diana-yjh/ios-number-baseball/assets/57698939/82b9742d-b148-46c5-83b1-8215bce5917f) | ||
|
||
## 🧐 학습 내용 | ||
짝프로그래밍 방식으로 프로젝트 진행</br> | ||
Swift 기본 문법 및 고차함수 ```filter``` 등 을 처음 사용</br> | ||
Class 구현 및 사용</br> | ||
Guard let, If let 등 을 사용한 Optional 바인딩</br> | ||
Git push, pull, remote 설정 등 학습 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extension으로 하신 이유가 있을까요?