인프런 커뮤니티 질문&답변

mcrkgus님의 프로필 이미지
mcrkgus

작성한 질문수

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

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

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

작성

·

326

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))!
        
    }
    
}


답변 1

0

앨런(Allen)님의 프로필 이미지
앨런(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 로 보내주세요!

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

 

감사합니다 !

mcrkgus님의 프로필 이미지
mcrkgus

작성한 질문수

질문하기