그래도 나름 xcode를 배우는 입장이니 UIkit으로도 제작에 도전했다. 아예 내가 다 하는건 무리였고 구글링하며 작성해보는게 최선이었다.
확실히 직접 베이스부터 차근차근 해보니 감이 잡혀왔다.

import UIKit
class ViewController: UIViewController {
@IBOutlet weak var resultLabel: UILabel! // 결과
@IBOutlet weak var iOSChoiceLabel: UILabel! // iOS의 선택
let option = ["가위", "바위", "보"] // 게임 옵션
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func userChoiceSelected(_ sender: UIButton) {
guard let userChoice = sender.titleLabel?.text else { return }
let computerChoice = option.randomElement()!
iOSChoiceLabel.text = "iOS: \(computerChoice)"
let result = determineResult(userChoice: userChoice, computerChoice: computerChoice)
resultLabel.text = result // 승패 결과만 표시
}
func determineResult(userChoice: String, computerChoice: String) -> String {
if userChoice == computerChoice {
return "비기비기 야야"
} else if (userChoice == "가위" && computerChoice == "보") ||
(userChoice == "바위" && computerChoice == "가위") ||
(userChoice == "보" && computerChoice == "바위") {
return "이기셨,,네요"
} else {
return "당신이 졌네요^^"
}
}
}
@IBOutlet weak var resultLabel: UILabel!
resultLabel은 게임의 결과를 표시하기 위한 UILabel이다. IBOutlet으로 설정되어 있어 Storyboard에서 연결된 UILabel을 코드에서 참조할 수 있다.
@IBOutlet weak var computerChoiceLabel: UILabel!
computerChoiceLabel은 컴퓨터의 선택을 표시하기 위한 UILabel이다. IBOutlet으로 설정되어 있어 Storyboard에서 연결된 UILabel을 코드에서 참조할 수 있다.
let options = ["가위", "바위", "보"]
게임에서 사용할 선택지들을 배열로 정의한 것이다. "가위", "바위", "보"의 세 가지 옵션을 포함한다.
override func viewDidLoad()
viewDidLoad는 뷰 컨트롤러의 뷰가 메모리에 로드된 후 호출되는 메서드이다. 초기 설정이나 데이터 로딩을 이곳에서 할 수 있다. 이 코드에서는 기본적인 초기화만 수행한다.
@IBAction func userChoiceSelected(_ sender: UIButton)
이 메서드는 버튼이 눌렸을 때 호출된다. @IBAction으로 선언되어 있어 Storyboard에서 버튼의 액션을 이 메서드와 연결할 수 있다.
sender: 누른 버튼을 나타내는 UIButton 객체
guard let userChoice = sender.titleLabel?.text else { return }
sender.titleLabel?.text를 통해 눌린 버튼의 제목을 가져와 userChoice 상수에 저장한다. 버튼의 제목이 nil인 경우, 메서드 실행을 중지한다 (return).
let computerChoice = options.randomElement()!
options 배열에서 무작위로 하나의 요소를 선택하여 computerChoice 상수에 저장한다. randomElement() 메서드는 배열에서 무작위로 요소를 반환하며, !는 강제 언래핑으로 배열이 비어있지 않다는 가정을 한다.
iOSChoiceLabel.text = "iOS: \(computerChoice)"
iOSChoiceLabel의 텍스트를 "iOS: "와 함께 computerChoice 값을 설정하여 화면에 컴퓨터의 선택을 표시한다.
let result = determineResult(userChoice: userChoice, computerChoice: computerChoice)
determineResult 메서드를 호출하여 사용자의 선택(userChoice)과 컴퓨터의 선택(computerChoice)을 비교하고 결과를 계산한다. 결과는 result 상수에 저장된다.
resultLabel.text = result
resultLabel의 텍스트를 result 상수로 설정하여 화면에 승패 결과만 표시한다. 여기에는 사용자의 선택이 포함되지 않고, 결과만 나타난다.
func determineResult(userChoice: String, computerChoice: String) -> String
사용자의 선택과 컴퓨터의 선택을 비교하여 게임 결과를 결정하는 메서드이다. 결과에 따라 비기고 지고 이겼다는 문자열을 반환한다.
if userChoice == computerChoice {
return "비기비기 야야" }
if userChoice == computerChoice: 사용자의 선택이 컴퓨터의 선택과 같을 때를 의미한다.
예를 들어, 사용자가 "가위"를 선택하고, 컴퓨터도 "가위"를 선택했다면 이 조건이 참이 된다.
return "비기비기 야야": 두 선택이 같다면, "비기비기 야야"라는 문자열을 반환한다. 즉, 비긴 경우를 나타내는 메시지.
else if (userChoice == "가위" && computerChoice == "보") ||
(userChoice == "바위" && computerChoice == "가위") ||
(userChoice == "보" && computerChoice == "바위") {
return "이기셨,,네요"
}
else if: 첫 번째 조건이 거짓인 경우 (비기지 않은 경우) 이 조건을 검사한다. 이 부분에서는 사용자가 이길 수 있는 모든 경우를 나열하고 있다.
userChoice == "가위" && computerChoice == "보": 사용자가 "가위"를 선택하고, 컴퓨터가 "보"를 선택했을 때. 가위는 보를 이긴다.
userChoice == "바위" && computerChoice == "가위": 사용자가 "바위"를 선택하고, 컴퓨터가 "가위"를 선택했을 때. 바위는 가위를 이긴다.
userChoice == "보" && computerChoice == "바위": 사용자가 "보"를 선택하고, 컴퓨터가 "바위"를 선택했을 때. 보는 바위를 이긴다.
return "이기셨,,네요": 사용자가 이기는 경우에는 "이기셨,,네요"라는 메시지를 반환.
else {
return "당신이 졌네요^^"
}
위의 두 조건(비김, 사용자가 이김)에 모두 해당하지 않으면 이 부분이 실행된다. 즉, 사용자가 지는 경우를 나타내는 것.
return "당신이 졌네요^^": 이 경우에는 "당신이 졌네요^^"라는 메시지를 반환.


만들면서 아쉬웠던 부분은 각 버튼마다 오토레이아웃을 설정해주어 휴대폰의 해상도가 달라지더라도 비율을 맞춰주고 싶었는데 se로 내려가니 아예 맞지도 않게 나와서 오토레이아웃에 대한 이해도가 더 필요하다는 것을 느꼈다. 그리고 가위바위보를 하면서 위에 이미지또한 승패에 맞게 변경되는 작업도 추가로 하고 싶었다. 그 부분도 하게 되면 이 포스트에 수정날짜를 넣어서 추가해보도록 하려한다. 전체적으로 심심한 배경색도 그라데이션 느낌으로 주는 것도 해 볼 예정. 그리고 처음보는 논리연산자도 있었는데 && 라던지 | |가 생소했다. 논리연산자는 따로 글을 정리 해보려한다.
&& (AND), || (OR), ! (NOT)
< 24.09.18 >
오토레이아웃 설정까지 해서 아이폰 11사이즈로도 위치 벗어나지 않는 것 확인. 오토레이아웃을 많이 걸어봐야 이해가 되는 것 같다. 처음에 멋 모르고 엄청나게 많은 오토레이아웃을 걸어놔버려서 걸어도 걸지 않은 것 처럼 뒤죽박죽이었는데 차근차근 하나씩 눌러보고 검색해보고 알아냈다...!!
그리고 Xcode를 업그레이드 했더니 이제 아이폰 15사이즈가 나오지 않고 16사이즈가 나오더라 괜히 아쉬웠다.
마지막으로 뿌듯하게 채워가는 잔디를 보며 흐뭇한 미소를 짓고 마무리 해본다.