inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

(기초-3) 가위바위보 앱 만들기 / 코드에 대한 자세한 설명 (기초 앱 13강)

(기초-3)가위바위보 앱 만들기 - 기초 앱 강의 12강 질문입니다!

377

mcrkgus

작성한 질문수 2

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

강의 코드를 모두 동일하게 작성을 했는데 comChoice의 값이 랜덤으로 바뀌지를 않는 거 같아요.
myChoice는 select를 누를 때마다 변하는데, comChoice는 처음 값만 그대로 가고 변하지를 않습니다. 어떤 부분이 문제인가요??

 

 

//
//  ViewController.swift
//  RPSGame
//
//  Created by Gahyun Kim on 2023/07/12.
//

import UIKit

class ViewController: UIViewController {
    
    //변수 / 속성
    @IBOutlet var mainLabel: UILabel!
    
    @IBOutlet var comImageView: UIImageView!
    @IBOutlet var myImageView: UIImageView!
    
    @IBOutlet var comChoiceLabel: UILabel!
    @IBOutlet var myChoiceLabel: UILabel!
    
    var myChoice = Rps(rawValue: Int.random(in: 0...2))!
    var comChoice  = Rps(rawValue: Int.random(in: 0...2))!
    
    
    //함수 / 메서드
    //앱의 화면에 들어오면 처음 실행되는 함수
    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) {
        // 가위/바위/보(enum)를 선택해서 그 정보를 저장해야함

        //버튼의 문자를 가져옴
        guard let title = sender.currentTitle else { return }
        print(title)
        
        switch title {
        case "가위" :
            myChoice = Rps.scissors
        case "바위" :
            myChoice = Rps.rock
        case "보" :
            myChoice = Rps.paper
        default :
            break
        

        }
    }
    
    
    
    @IBAction func selectButtonTapped(_ sender: UIButton) {
        
        // 1) 컴퓨터가 랜덤으로 선택한 것을 이미지뷰에 표시
        // 2) 컴퓨터가 랜덤으로 선택한 것을 레이블에 문자열로 표시
        switch comChoice {
        case Rps.rock :
            comImageView.image = #imageLiteral(resourceName: "rock")
            comChoiceLabel.text = "바위"
        case Rps.paper :
            comImageView.image = #imageLiteral(resourceName: "paper")
            comChoiceLabel.text = "보"
        case Rps.scissors :
            comImageView.image = #imageLiteral(resourceName: "scissors")
            comChoiceLabel.text = "가위"
        }
        
        // 3) 내가 선택한 것을 이미지뷰에 표시
        // 4) 내가 선택한 것을 레이블에 문자열로 표시
        switch myChoice {
        case Rps.rock :
            myImageView.image = #imageLiteral(resourceName: "rock")
            myChoiceLabel.text = "바위"
        case Rps.paper :
            myImageView.image = #imageLiteral(resourceName: "paper")
            myChoiceLabel.text = "보"
        case Rps.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 = Rps(rawValue: Int.random(in: 0...2))!
        
    }
    
}


ios swift

답변 1

0

앨런(Allen)

네 안녕하세요!
mcrkgus 님! 작성하신 논리에 따라서는 제대로 값이 바뀔 것 같은데... 한번 print로 출력을 해서 값이 바뀌는지 안 바뀌는지 확인해보시겠어요?

@IBAction func resetButtonTapped(_ sender: UIButton) {
        
        //......
        
        // 6) 컴퓨터가 다시 랜덤 가위/바위/보를 선택하고 저장
        comChoice = Rps(rawValue: Int.random(in: 0...2))!
        print(comChoice)
        
}

resetButtonTapped함수 안에서..
컴퓨터가 다시 랜덤값을 가지게.. 리셋시킬때.. 실제로 변하는지 그 아래 출력해보시면,
실제 명확하게 확인이 가능하실 것 같아요!
(제 생각엔 바뀌는데.. 동일한 가위바위보값으로 바뀌어서.. 안 바뀌는 것처럼 보이는게 아닐까 싶긴 합니다.)

이것 확인해보시고, 이것도 안되면
일단 폴더를 압축해서 we.love.code.allen@gmail.com 로 보내주세요!

보내주시면 확인해드리겠습니다. :)

 

감사합니다 !

수강연장부탁드려도될까요..

0

44

2

Drawing Cycle 관련 질문

0

72

1

앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?

0

97

2

델리게이트 패턴 관련 질문

0

68

2

수강 기간 연장 부탁드릴 수 있을까요?

0

66

1

활용 앱 57강 질문입니다.

0

55

1

활용 앱 30강 에러 질문입니다

0

65

2

기초앱 17강 Contraints 설정 질문입니다.

0

67

2

기초 앱 4강 Type Any -> UIButton

0

68

2

34강 유용한 앱 추천에 나오는 UIKitViewer에 대해서 질문이 있습니다

0

80

1

깃에 코드는 올려도 된다고 하셨는데

0

111

1

수강기간 연장신청 드려도 될까요?

0

84

1

수강 기간 연장 부탁드려도 될까요?

0

120

2

수강 기간 연장 신청 요청드립니다.

0

131

2

playground에서 상단 실행?아이콘 회전 관련하여...

0

138

1

활용앱53강에서 질문있습니다.

0

166

2

Project 명칭 변경방법이 궁금합니다.

0

140

1

override 에 대해서 궁금한 것이 있습니다.

0

125

2

섹션8] 코드 리팩토링 문의

0

101

1

xcode 에서 ios 버전 선택 및 시뮬레이터 관련 질문

0

570

2

수강 기간 연장 부탁드려도 될까요?

0

132

2

뷰모델의 상태변화 와 didSet

0

98

1

@Sendable 키워드

0

95

1

클로저

0

108

2