[Swift]30言ったら負けのゲームを、iOSアプリ開発で作ってみた。


こんにちはMottyです。

![ 2020-07-02 16.02.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302420/56f1cbbd-3630-71ad-9622-c7440e803590.png)
##概要
SwiftはiOSアプリ開発用のプログラミング言語でして、非常に成長分野であると言えます。以下のようなメリットが一般的に挙げられますSwiftの特徴としては・・・
・Webフレームワークが充実している
・処理速度が速い
・Apple製品のアプリを一貫して開発できる
・コーディングがシンプル
などがあります。つまり、初心者でもとっつきやすく、また流行りに乗っている言語と言えそうです。
従来まではObjective-Cという言語でのアプリ開発が主流だったそうですが、速さやコーディングのシンプルさなど性能面でSwiftが上回り、現在市場に浸透しつつある新しい言語、といった特徴があります。

![ 2020-07-02 16.07.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302420/cc88dd17-63a3-1491-bd9b-3a6358b416dd.png)

（データは少し古いですが・・・高い成長率が特徴的ですね。）

##３０言ったら負けのゲーム

交互に数字を宣言し、先に30を宣言してしまった方の負けのゲームです。宣言は交互に行う。初めの数字は１プレイヤーが１度に宣言できる数は３つまで。連続した整数でつないでいかなければならない。つまり先行が1,2,3と言い終えたあと、相手は4から始めていく。
実際は口頭で言いますが、今回はアプリ上でのゲームとなるのでボタンを押して進行する流れとなります。


##ソースコード

<StoryBoard>
![ 2020-07-02 16.17.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302420/c1d2b4c6-5c08-de18-de89-50ccbba427e7.png)


<View-Controller>

```30.swift
//
//  ViewController.swift
//  30
//
//  Created by Motty on 2020/07/01.
//  Copyright © 2020 Motty. All rights reserved.

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        //初期化の際に１回だけ実行されるメソッド
   
    Counter.text = "0"
    Turn_Board.text = Turn1
    }
    
    //Propaties
    
    var CountNumber = 0 //0<CN<30
    var Turn1 = "Player1のターンです"
    var Turn2 = "Player2のターンです"
    var IsPlayer1 = true //If False : Now is Player2
    var AddCount1 = 0 //0<AC1<3
    var AddCount2 = 0 //0<AC2<3
    
    
    //Methods
    
    //プレイヤーのターンをスイッチする
    func player_switch() {
        if IsPlayer1 == true{
            IsPlayer1 = false
            Turn_Board.text = Turn2
        }else{
            IsPlayer1 = true
            Turn_Board.text = Turn1
        }
    }
    
    // 勝利判定のメソッド
    func WinnerJudge() {
        if CountNumber >= 30 {
            if IsPlayer1 == true{
                Turn_Board.text = "Player1の敗北です！"
                
            } else {
                Turn_Board.text = "Player2の敗北です”！"
            }
        }
    }
    
    //アドカウント判定のメソッド
    func AddCountJudge(){
        if IsPlayer1 == true{
            if AddCount1 >= 3{
                AddCount1 = 0
                player_switch()
            }
        }else{
            if AddCount2 >= 3{
                AddCount2 = 0
                player_switch()
            }
        }
        
    }
    
    // リセット
    func Reset0(){
        AddCount1 = 0
        AddCount2 = 0
        CountNumber = 0
        IsPlayer1 = true
        Counter.text = "0"
        Turn_Board.text = Turn1
        
    }
    
    
    //Arranging UIParts
    
    //Outlets
    @IBOutlet weak var Counter: UILabel!
    @IBOutlet weak var Turn_Board: UILabel!
    
    
    //Actions
    @IBAction func Add1(_ sender: Any) {
        CountNumber += 1
        AddCount1 += 1
        Counter.text = String(CountNumber)
        WinnerJudge()
        AddCountJudge()
        
    }
    @IBAction func Add2(_ sender: Any) {
        CountNumber += 1
        AddCount2 += 1
        Counter.text = String(CountNumber)
        WinnerJudge()
        AddCountJudge()
    }
    @IBAction func End1(_ sender: Any) {
        player_switch()
        Turn_Board.text = Turn2
    }
    @IBAction func End2(_ sender: Any) {
        player_switch()
        Turn_Board.text = Turn1
    }
    @IBAction func Reset(_ sender: Any) {
        Reset0()
    }    
    
}

```

<表示画面>

![ 2020-07-01 23.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302420/0e34a701-28b9-358b-ee9f-d4e2334c15b9.png)

##結論

一応機能は動きますがレイアウトやバグ等はほとんどチェックしておりません。。処女作ということでご勘弁を・・・。
しかし、UIパーツは便利ですね。GUI操作でアプリを作れるので、今回プログラミングを行なった工程は全体の半分から６割程度でした。しかし英語表記や、Swift独自の機能もあったりするので、慣れるのにはもう少し時間がかかりそうだなとも感じました。
iPhoneやandrpidアプリの市場は成長産業ですので、これからもたくさんのアプリが登場すると思います。（XRやIoTなどの世に出回る途中段階の技術とアプリの親和性も高いので。）

余談ですが、SWiftではARを簡易的に作成できるライブラリがあるそうで、非常に興味深いです。

参考：ARKitで作るAR名刺
https://qiita.com/kboy/items/d5c7e0f4174da4b8d5f0