Swiftで簡単にじゃんけんゲームを作った

# 完成形はこんな感じです
<img width="150" alt="61EEF171-451D-4027-A4A2-4FBB2FCB980F_1_201_a.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466343/99bbba33-af3b-525e-5e2b-425012aa621d.jpeg"> <img width="149" alt="D0113E19-DE5B-4DB3-90B5-65FA306D8688_1_201_a.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466343/ba5886b6-c9cf-803b-b848-5d9df2652cef.jpeg"> <img width="149.5" alt="66549D6A-ACF3-4173-8552-4A91B11454FC_1_201_a.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466343/fece4cf3-b0d5-ece4-ad6a-74ca8f7d6bc5.jpeg"> <img width="149" alt="8523DAF3-ABC4-4E7B-A47F-64FF91EBD21C_1_201_a.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466343/b3d6bd9b-666a-dc91-e664-020968f20ede.jpeg">

# 機能説明
* ジャンケンをして、勝ったら火のマークのゲージを減らします。負ければ自分のゲージが減ります。

# コードと簡単解説

* 相手側はランダムにグーとチョキとパーが出るようにする。
* 配列`["Rock","Scissor","Paper"]`からランダムで変数に入れる

```Swift:EnemyResultModel
import Foundation
import UIKit

class EnemyResultModel{
    
    let enemyMeansArray = ["Rock","Scissor","Paper"]
    
    var enemyMoveResult = String()
    
    func enemyMove(){
        
        enemyMoveResult = enemyMeansArray.randomElement()!
        print(enemyMoveResult)
    }   
}
```

## ViewController

* コードの横にコメントの形式で説明を入れてます
* `@IBAction func rock(_ sender: Any) {}`以下の`Button`の処理はほとんど同じなので、説明が必要な方はコメントまでお願いします。

```Swift:ViewController
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var enemyView: UIView!
    @IBOutlet weak var enemyProgressView: UIProgressView!
    @IBOutlet weak var enemyImageView: UIImageView!
    @IBOutlet weak var enemyMoveLabel: UILabel!
    
    @IBOutlet weak var gameResultLabel: UILabel!
    
    @IBOutlet weak var myView: UIView!
    @IBOutlet weak var myLogLabel: UILabel!
    @IBOutlet weak var myprogreeView: UIProgressView!
    @IBOutlet weak var rockButton: UIButton!
    @IBOutlet weak var scissorButton: UIButton!
    @IBOutlet weak var paperButton: UIButton!
    
    let enemyResultModel = EnemyResultModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()      
        
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        enemyView.layer.cornerRadius = 15.0
        enemyProgressView.progress = 1 //最初はゲージがいっぱいの状態で始めるので、1を入れてます
        enemyProgressView.transform = CGAffineTransform(scaleX: 1.0, y: 3.0) //ProgressViewの太さを調整してます
        enemyProgressView.progressViewStyle = .bar
        enemyProgressView.backgroundColor = .white
        enemyProgressView.progressTintColor = .systemGreen
        
        myView.layer.cornerRadius = 15.0
        myprogreeView.progress = 1　//最初はゲージがいっぱいの状態で始めるので、1を入れてます
        myprogreeView.transform = CGAffineTransform(scaleX: 1.0, y: 3.0) //ProgressViewの太さを調整してます
        myprogreeView.progressViewStyle = .bar
        myprogreeView.backgroundColor = .white
        myprogreeView.progressTintColor = .systemGreen
    
        gameResultLabel.text = ""
    }
    
    @IBAction func rock(_ sender: Any) { //自分がグーを出したと仮定
        
        rockButton.isEnabled = false
        scissorButton.isEnabled = false
        paperButton.isEnabled = false  //どれかのButtonを押したら処理が終わるまで、他のButtonの処理をさせたく無いので
        
        enemyResultModel.enemyMove() //相手が出す手の型を取得
        
        if enemyResultModel.enemyMoveResult == "Scissor"{ //相手がチョキ(自分の勝ち)
            
            enemyMoveLabel.text = "Scissor" //相手が出した手の型を表示
            
            gameResultLabel.text = "Win" 
            
            enemyProgressView.setProgress(enemyProgressView.progress - 0.2, animated: true) //相手のゲージを減らす
            
            myLogLabel.text = "相手にダメージを与えました"
            
            if enemyProgressView.progress <= 0.3{ //ゲージの減り方によって、ゲージの色を変える
                
                enemyProgressView.progressTintColor = .red
                
            }else if enemyProgressView.progress <= 0.6{
                
                enemyProgressView.progressTintColor = .orange
                
            }
            
            if enemyProgressView.progress == 0{ //相手のゲージが0になったらアラート表示
       
                gameResultLabel.text = "Winner"
                CheckAlert()
                
            }
            
        }else if enemyResultModel.enemyMoveResult == "Paper"{ //相手がパーを出したとき(自分の負け)
            
            enemyMoveLabel.text = "Paper"
            
            gameResultLabel.text = "Lose"
            
            myprogreeView.setProgress(myprogreeView.progress - 0.2, animated: true) ///負けたので自分のゲージを減らす
            
            myLogLabel.text = "ダメージを受けました"
            
            if myprogreeView.progress <= 0.3{ 
                
                myprogreeView.progressTintColor = .red
                
            }else if myprogreeView.progress <= 0.6{
                
                myprogreeView.progressTintColor = .orange
                
            }
            
            if myprogreeView.progress == 0{
                
                gameResultLabel.text = "Loser"
                CheckAlert()
                
            }
            
        }else if enemyResultModel.enemyMoveResult == "Rock"{ //相手もグーを出した時(あいこの時)
            
            enemyMoveLabel.text = "Rock"
            gameResultLabel.text = "Same"
            myLogLabel.text = "お互い0ダメージ"
            
        }
        
        rockButton.isEnabled = true
        scissorButton.isEnabled = true
        paperButton.isEnabled = true //1回のじゃんけんの処理が終わったら、Buttonを有効にする
        
        
    } 
    
    @IBAction func scissor(_ sender: Any) {
        
        rockButton.isEnabled = false
        scissorButton.isEnabled = false
        paperButton.isEnabled = false
        
        enemyResultModel.enemyMove()
        
        if enemyResultModel.enemyMoveResult == "Paper"{
            
            enemyMoveLabel.text = "Paper"
            
            gameResultLabel.text = "Win"
            
            enemyProgressView.setProgress(enemyProgressView.progress - 0.2, animated: true)
            
            myLogLabel.text = "相手にダメージを与えました"
            
            if enemyProgressView.progress <= 0.3{
                
                enemyProgressView.progressTintColor = .red
                
            }else if enemyProgressView.progress <= 0.6{
                
                enemyProgressView.progressTintColor = .orange
                
            }
            
            if enemyProgressView.progress == 0{
                
                gameResultLabel.text = "Winner"
                CheckAlert()
                
            }
            
        }else if enemyResultModel.enemyMoveResult == "Rock"{
            
            enemyMoveLabel.text = "Rock"
            
            gameResultLabel.text = "Lose"
            
            myprogreeView.setProgress(myprogreeView.progress - 0.2, animated: true)
            
            myLogLabel.text = "ダメージを受けました"
            
            if myprogreeView.progress <= 0.3{
                
                myprogreeView.progressTintColor = .red
                
            }else if myprogreeView.progress <= 0.6{
                
                myprogreeView.progressTintColor = .orange
                
            }
            
            if myprogreeView.progress == 0{
                
                gameResultLabel.text = "Loser"
                CheckAlert()
                
            }
            
        }else if enemyResultModel.enemyMoveResult == "Scissor"{
            
            enemyMoveLabel.text = "Scissor"
            gameResultLabel.text = "Same"
            myLogLabel.text = "お互い0ダメージ"
            
        }
        
        rockButton.isEnabled = true
        scissorButton.isEnabled = true
        paperButton.isEnabled = true
        
    }
    
    @IBAction func paper(_ sender: Any) {
        
        rockButton.isEnabled = false
        scissorButton.isEnabled = false
        paperButton.isEnabled = false
        
        enemyResultModel.enemyMove()
        
        if enemyResultModel.enemyMoveResult == "Rock"{
            
            enemyMoveLabel.text = "Rock"
            
            gameResultLabel.text = "Win"
            
            enemyProgressView.setProgress(enemyProgressView.progress - 0.2, animated: true)
            
            myLogLabel.text = "相手にダメージを与えました"
            
            if enemyProgressView.progress <= 0.3{
                
                enemyProgressView.progressTintColor = .red
                
            }else if enemyProgressView.progress <= 0.6{
                
                enemyProgressView.progressTintColor = .orange
                
            }
            
            if enemyProgressView.progress == 0{
                
                gameResultLabel.text = "Winner"
                CheckAlert()
                
            }
            
        }else if enemyResultModel.enemyMoveResult == "Scissor"{
            
            enemyMoveLabel.text = "Scissor"
            
            gameResultLabel.text = "Lose"
            
            myprogreeView.setProgress(myprogreeView.progress - 0.2, animated: true)
            
            myLogLabel.text = "ダメージを受けました"
            
            if myprogreeView.progress <= 0.3{
                
                myprogreeView.progressTintColor = .red
                
            }else if myprogreeView.progress <= 0.6{
                
                myprogreeView.progressTintColor = .orange
                
            }
            
            if myprogreeView.progress == 0{
                
                gameResultLabel.text = "Loser"
                CheckAlert()
                
            }
            
        }else if enemyResultModel.enemyMoveResult == "Paper"{
            
            enemyMoveLabel.text = "Paper"
            gameResultLabel.text = "Same"
            myLogLabel.text = "お互い0ダメージ"
            
        }

        rockButton.isEnabled = true
        scissorButton.isEnabled = true
        paperButton.isEnabled = true
       
    }    
}

extension ViewController{
    
    func CheckAlert(){
        
        let alert = UIAlertController(title: "確認", message: "もう一度遊びますか？", preferredStyle: .alert)
        
        alert.addAction(UIAlertAction(title: "もう一度", style: .default, handler: { [self] _ in
            
            enemyProgressView.progress = 1.0
            enemyProgressView.progressTintColor = .systemGreen
            myprogreeView.progress = 1.0
            myprogreeView.progressTintColor = .systemGreen
            
            myLogLabel.text = "もう一度遊びます"
            gameResultLabel.text = "ReStart"
            enemyMoveLabel.text = ""
            
        }))
        
        alert.addAction(UIAlertAction(title: "やめる", style: .cancel, handler: nil))
        
        present(alert, animated: true, completion: nil)
        
    }   
}
```

# 終わり
とても読みにくい書き方をして、すいません
かなり思いつきでViewControllerに書きましたので、休憩時間にでも綺麗にまとめてから更新したいと思います。