본문 바로가기

iOS 앱 개발자 프로젝트/개인 프로젝트

[Project] 숫자 야구 게임 만들기 (Lv1)

전체 프로젝트 레벨 중, 레벨 1부터 도전 ..  ♡


 

Level 1

 

import Foundation

// 정답 생성 함수
func makeAnswers() -> [Int] {
    var numbers = [Int]()
    
    while numbers.count < 3 {
        let randomNum = Int.random(in: 1...9)
        if !numbers.contains(randomNum) {
            numbers.append(randomNum)
        }
    }
    
    return numbers
}

// 게임 플레이 함수
func playGame() {
    let targetNumbers = makeAnswers() // 정답 생성
    var attempts = 0 // 시도 횟수를 저장하는 변수
    
    print("1에서 9까지의 서로 다른 숫자 3개를 맞춰보세요!")
    
    while true {
        print("세 숫자를 입력하세요 (예: 1 2 3):")
        if let input = readLine() { // 사용자로부터 입력 받기
            let guessedNumbers = input.split(separator: " ").compactMap { Int($0) } // 입력 받은 숫자를 배열로 변환
            
            if guessedNumbers.count == 3 { // 입력된 숫자가 3개인 경우
                attempts += 1 // 시도 횟수 증가
                
                var correctCount = 0 // 맞은 숫자 개수를 저장하는 변수
                for (index, number) in guessedNumbers.enumerated() { // 입력한 숫자와 정답을 비교하여 맞은 숫자 개수 계산
                    if targetNumbers.contains(number) {
                        if targetNumbers[index] == number {
                            correctCount += 1
                        }
                    }
                }
                
                if correctCount == 3 { // 모든 숫자를 맞춘 경우
                    print("축하합니다! 세 숫자를 모두 맞추셨습니다.")
                    print("시도한 횟수: \(attempts)")
                    break // 게임 종료
                } else {
                    print("맞은 숫자: \(correctCount)") // 맞은 숫자 개수 출력
                }
            } else {
                print("잘못된 입력입니다. 세 숫자를 공백으로 구분하여 입력해주세요.")
            }
        }
    }
}

// 게임 실행
playGame()

 

#1.

1에서 9까지의 서로 다른 숫자 3개를 무작위로 생성하여 배열로 반환하는 makeAnswers 함수를 정의했다. numbers라는 빈 배열을 생성하여 게임에서 생성할 숫자를 담을 공간으로 활용하고, while 반복문을 사용하여 numbers 배열의 길이가 3이 될 때까지 다음의 작업을 반복한다. numbers 배열에 randomNum이 포함되어 있지 않다면, 새로운 숫자이므로 append를 통해 numbers 배열에 randomNum을 추가했다.  ( → numbers.append(randomNum) )

이렇게 서로 다른 숫자 3개가 numbers 배열에 모이면 while을 종료하고 numbers 배열을 반환한다.

 

#2.

게임을 실행하는 playGame이라는 함수를 정의했다. 숫자를 맞추도록 안내하고 문자열로 입력 받도록 한다. 그리고 이때 입력받는 숫자를 공백을 기준으로 분리하기 위해 split을 사용했다. input.split(separator: " ")은 사용자의 입력을 공백을 기준으로 분리하여 문자열 배열로 반환한다. 예를 들어, 사용자가 "1 2 3"과 같이 숫자를 공백으로 구분하여 입력하면, 이를 ["1", "2", "3"]과 같이 분리하여 배열로 만든다. 이렇게 입력받은 문자열을 정수 배열로 변환하기 위해 클로저, compactMap { Int($0) } 사용했다. 각 문자열을 Int($0)으로 변환하여 정수로 만들고, 이렇게 변환된 숫자 배열은 guessedNumbers라는 변수에 저장한다.

 

#3.

if 조건문을 통해 변환된 숫자가 3개인지 확인한 후, 사용자가 입력한 숫자와 정답인 targetNumbers 배열을 비교하여 맞은 숫자의 개수를 계산한다. 맞은 숫자의 개수가 3이면 게임을 종료하고 시도한 횟수를 출력한다. 그렇지 않으면 맞은 숫자의 개수를 출력한다.

 


 

 

아래 뼈대 코드는 참고용 힌트

// main.swift 파일
// 프로젝트 생성시 자동 생성됨

let game = BaseballGame()
game.start() // BaseballGame 인스턴스를 만들고 start 함수를 구현하기


// BaseballGame.swift 파일 생성
class 혹은 struct {
	func start() {
		let answer = makeAnswer() // 정답을 만드는 함수
	}
	
	func makeAnswer() -> Int {
		// 함수 내부를 구현하기
	}
}