userDefaultsを使ってみる。

UserDefaults.standardを変数にします。

let userDefaults = UserDefaults.standard
var load = 0

0でない場合は、1を足し、0は1。

if self.userDefaults.integer(forKey: "load") != 0 {
            self.load = self.userDefaults.integer(forKey:"load")
            self.load += 1
        } else {
                self.load = 1
        }
        UserDefaults.standard.set(1, forKey: "load")

あ、self.userDefaults.integer(forKey: “load”) > 0 か。elseはokですね。
これを、グーチョキパーの勝ち負け引き分けパターン入れていく。
負けの場合は self.userDefaults.integer(forKey: “load”) < 0 として、表示する時に更に分岐で連勝・連敗を表示か。

じゃんけんの結果を表示する

gooが押された時に、arc4randomの結果をif else文で出し分ける。

@IBAction func getGoo(_ sender: Any) {
        let results1 = ["Image1","Image2","Image3"]
        let random1 = arc4random_uniform(UInt32(results1.count))
        let image1 = UIImage(named: results1[Int(random1)])
        imageView.image = image1
        let image4 = UIImage(named: "Image4")
        imageView2.image = image4
        
        let even = "あいこ"
        let win = "あなたの勝ち"
        let lose = "あなたの負け"
        
        if random1 == 0 {
            self.gameResult.text = even
        } else if(random1 == 1){
            self.gameResult.text = win
        } else {
            self.gameResult.text = lose
        }
        
    }

勝ち負けが出るようになりました。

グーチョキパー出したい。
同じように関数の中に分岐を書くと、できる。

最後、連勝・連敗を表示したい。
その為には、変数を宣言して、値(n)を保存して if n = 0 勝ちなら +1、負けなら-1、if n > 0 で勝ちなら +1、あいこならそのまま、負けならリセット、if < 0 で負けなら、-1、あいこならそのまま、勝ちならリセット。 そもそも変数を保存できるか?

じゃんけんアプリをfixしよう

storyboardのconstrainのerror解消がわからず、時間がかかりましたが、

@IBAction func getGoo(_ sender: Any) {
        let results1 = ["Image1","Image2","Image3"]
        let random1 = arc4random_uniform(UInt32(results1.count))
        let image1 = UIImage(named: results1[Int(random1)])
        imageView.image = image1
        let image4 = UIImage(named: "Image4")
        imageView2.image = image4
    }
    

    @IBAction func getChoki(_ sender: Any) {
        let results2 = ["Image1","Image2","Image3"]
        let random2 = arc4random_uniform(UInt32(results2.count))
        let image2 = UIImage(named: results2[Int(random2)])
        imageView.image = image2
        let image5 = UIImage(named: "Image5")
        imageView2.image = image5
    }
    
    @IBAction func getPa(_ sender: Any) {
        let results3 = ["Image1","Image2","Image3"]
        let random3 = arc4random_uniform(UInt32(results3.count))
        let image3 = UIImage(named: results3[Int(random3)])
        imageView.image = image3
        let image6 = UIImage(named: "Image6")
        imageView2.image = image6
    }
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imageView.contentMode = UIViewContentMode.center
        self.view.addSubview(imageView)
        imageView2.contentMode = UIViewContentMode.center
        self.view.addSubview(imageView2)
        // Do any additional setup after loading the view, typically from a nib.
    }

O~K~! 選択したグーチョキパーとランダムのグーチョキパーを表示します。

勝ちか負けかをテキストで表示したい
可能であれば、何連勝とかも。。できるのか?

letの変数は重複させない

@IBAction func getGoo(_ sender: Any) {
        let results1 = ["Image1","Image2","Image3"]
        let random1 = arc4random_uniform(UInt32(results1.count))

        let image1 = UIImage(named: results1[Int(random1)])
        imageView.image = image1
    }
    

    @IBAction func getChoki(_ sender: Any) {
        let results2 = ["Image1","Image2","Image3"]
        let random2 = arc4random_uniform(UInt32(results2.count))
        
        let image2 = UIImage(named: results2[Int(random2)])
        imageView.image = image2
    }
    
    @IBAction func getPa(_ sender: Any) {
        let results3 = ["Image1","Image2","Image3"]
        let random3 = arc4random_uniform(UInt32(results3.count))
        let image3 = UIImage(named: results3[Int(random3)])
        imageView.image = image3
    }

let result, let randomを3回書くと、うまく表示されません。varだったら行けるのかもしれませんが。

じゃんけんアプリを進化させよう

まず、グーチョキパーを180° rotateさせたpngを用意します。

assetの画像をrotateしたグーチョキパーに置き換えます。

続いて、rotateしないグーチョキパーをassetに保存します。

compileするとグーチョキパーが逆になります。

「ポン」をグーチョキパーにしたい。

controllerviewにボタンを置いて、buttonのinspector painでimageを選択します。

なるほど!

じゃんけんアプリを作ろう

UIImage(named:)をarc4random_uniformで表示します。

@IBOutlet weak var imageView: UIImageView!
    
    @IBAction func getJanken(_ sender: Any) {
        let results = ["Image1","Image2","Image3"]
        let random = arc4random_uniform(UInt32(results.count))
        
        let image = UIImage(named: results[Int(random)])
        imageView.image = image
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imageView.contentMode = UIViewContentMode.center
        self.view.addSubview(imageView)
        // Do any additional setup after loading the view, typically from a nib.
    }

ポンのbuttonを押すとグーチョキパーがランダムに表示されます。

OK
ポンのテキストを自分の出すグーチョキパーのボタンに変えたいですね。

ところで、
viewDidLoad は、ViewControllerのviewがロードされた後に呼び出される。

override func viewDidLoad() {
        super.viewDidLoad()

ところで、このsuperだが、親クラスのviewDidLoadを呼び出している。
継承を行った時あるいはsystemのデフォルト処理をする為に記述する必要がある。
overrideしてますね。

続いてdidReceiveMemoryWarningだが、その名の通り、メモリ不足時にdidReceiveMemoryWarningメソッドが呼ばれる

Assets.xcassetsに画像を置く

グー、チョキ、パーの画像を置いていきます。

これをどうやって、controller.swfitで呼び出すんだ?
let image = UIImage(named: “Image2”)でコンパイルしてみる。

override func viewDidLoad() {
        super.viewDidLoad()
        let image = UIImage(named: "Image2")
        imageView.image = image
        imageView.contentMode = UIViewContentMode.center
        self.view.addSubview(imageView)
        // Do any additional setup after loading the view, typically from a nib.
    }

あれ、UIImage(named: “ファイル名”)でいけますね。
すると、/app/hoge.jpg と /app/Aseets.xcassets/hoge 共にUIImage(named: “hoge”)で読み込める、ということですな。 詳細はわかりませんが、コンパイルする際に、同階層として扱っているんでしょう。

では、ボタンを押したら、グーチョキパーがランダムで表示されるよう作っていきたいと思います。