반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코드트리
- 알고리즘 자바
- 싸피 12기
- 개발자
- 자바 알고리즘
- 싸피 대전캠퍼스
- 자바스크립트 자료구조
- 자바 코딩테스트
- 프로그래머스
- ssafy
- 인프런
- 비동기
- 싸피 기자단
- 자바스크립트
- 프론트엔드
- 싸피11기
- 자료구조
- SSAFYcial
- 싸피
- swea
- 알고리즘
- 싸피 10기
- 싸피10기
- jpa
- 코딩테스트
- 리액트
- 싸피셜
- 싸피 11기
- 백준
- 코딩테스트 자바
Archives
- Today
- Total
병아리의 코딩 일기
[UIKit] Storyboard로 간단한 앱 만들기 (3) - 가위바위보 게임 본문
이번에는 가위바위보 게임을 만들어보자
3개 정도 만들어보니 이제 Storyboard 사용법은 어느 정도 익숙해졌다!
배운 것들
Enum에 익숙하지 않았는데 사용법을 알게 되었다.
SwiftFile을 선택한 뒤 RpsEnum 이라는 이름으로 다음과 같이 만들어주자.
타입으로 Int를 준 이유는 원시값(raw value)을 주기 위함이다.
컴퓨터가 랜덤으로 가위, 바위, 보를 선택할 때 RspEnum(rawValue: Int.random(in: 0...2))! 이런 식으로 사용할 수 있다.
끝에 !를 붙이는 이유는 이게 옵셔널 타입으로 감싸져있기 때문에 풀어줘야 한다.
지금은 값이 안들어 가는 상황은 나오지 않으므로 !로 옵셔널을 벗겨줘도 괜찮다.
import Foundation
// 원시값(raw value)
enum RpsEnum: Int {
case rock
case scissors
case paper
}
전체 코드
초보 대상 강의이기 때문에 깔끔한 코드보단 구현에 집중한 코드다.
import UIKit
class ViewController: UIViewController {
// 변수 / 속성
@IBOutlet weak var mainLabel: UILabel!
@IBOutlet weak var comImageView: UIImageView!
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var comChoiceLabel: UILabel!
@IBOutlet weak var myChoiceLabel: UILabel!
var comChoice: RpsEnum = RpsEnum(rawValue: Int.random(in: 0...2))!
var myChoice: RpsEnum = RpsEnum.rock
// 함수 / 메서드
override func viewDidLoad() {
super.viewDidLoad()
// 1) 첫번째/두번째 이미지 뷰에 준비(묵) 이미지를 띄워야 함
comImageView.image = #imageLiteral(resourceName: "ready")
myImageView.image = UIImage(named: "ready.png")
// 2) 첫번째/두번째 레이블에 "준비"라고 문자열을 띄워야 함
comChoiceLabel.text = "준비"
myChoiceLabel.text = "준비"
}
@IBAction func rpsButtonTapped(_ sender: UIButton) {
// 가위/바위/보를 선택해서 그 정보를 저장해야 함
comChoice = RpsEnum(rawValue: Int.random(in: 0...2))!
guard let title = sender.currentTitle else { return }
print(title)
switch title {
case "가위":
// 가위 열거형을 만들어서 저장
myChoice = RpsEnum.scissors
case "바위":
// 바위 열거형을 만들어서 저장
myChoice = RpsEnum.rock
case "보":
// 보 열거형을 만들어서 저장
myChoice = RpsEnum.paper
default:
break
}
}
@IBAction func selectButtonTapped(_ sender: UIButton) {
// 1) 컴퓨터가 랜덤 선택한 이미지 표시
// 2) 컴퓨터가 랜덤 선택한 것을 레이블에 표시
switch comChoice {
case RpsEnum.rock:
comImageView.image = #imageLiteral(resourceName: "rock")
comChoiceLabel.text = "바위"
case RpsEnum.paper:
comImageView.image = #imageLiteral(resourceName: "paper")
comChoiceLabel.text = "보"
case RpsEnum.scissors:
comImageView.image = #imageLiteral(resourceName: "scissors")
comChoiceLabel.text = "가위"
}
// 3) 내가 선택한 것을 이미지 뷰에 표시
// 4) 내가 선택한 것을 레이블에 표시
switch myChoice {
case RpsEnum.rock:
myImageView.image = #imageLiteral(resourceName: "rock")
myChoiceLabel.text = "바위"
case RpsEnum.paper:
myImageView.image = #imageLiteral(resourceName: "paper")
myChoiceLabel.text = "보"
case RpsEnum.scissors:
myImageView.image = #imageLiteral(resourceName: "scissors")
myChoiceLabel.text = "가위"
}
// 5) 컴퓨터가 선택한 것, 내가 선택한 것을 비교 이겼는지/비겼는지/졌는지 판단/표시
if comChoice == myChoice {
mainLabel.text = "비겼다"
} else if comChoice == .rock && myChoice == .paper {
mainLabel.text = "이겼다"
} else if comChoice == .paper && myChoice == .scissors {
mainLabel.text = "이겼다"
} else if comChoice == .scissors && myChoice == .rock {
mainLabel.text = "이겼다"
} else {
mainLabel.text = "졌다"
}
}
@IBAction func resetButtonTapped(_ sender: UIButton) {
// 1) 컴퓨터가 다시 준비 이미지뷰에 표시
// 2) 컴퓨터가 다시 준비 레이블에 표시
comImageView.image = #imageLiteral(resourceName: "ready")
comChoiceLabel.text = "준비"
// 3) 내 선택 이미지뷰에도 준비 이미지 표시
// 4) 내 선택 레이브렝도 준비 문자열 표시
myImageView.image = #imageLiteral(resourceName: "ready")
myChoiceLabel.text = "준비"
// 5) 메인레이블 "선택하세요" 표시
mainLabel.text = "선택하세요"
// 6) 컴퓨터가 다시 랜덤 가위바위보 선택하고 저장
comChoice = RpsEnum(rawValue: Int.random(in: 0...2))!
}
}
728x90
반응형
LIST