작성
·
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
네 안녕하세요!
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 로 보내주세요!
보내주시면 확인해드리겠습니다. :)
감사합니다 !