乱数を使う

閏年は手強いので、しばらく休み、次に行くことにした。
乱数を習う。

教科書は「SwiftではじめるiPhoneアプリ開発の教科書」(森巧尚著、マイナビ出版)を使う。
この教科書は入門書だが、全くの素人には少し難解だ。
丁寧に書いてあるが、予備知識がないと挫折する可能性が高いと思う。

じゃんけんゲームで乱数を使ってゲームをする初歩的なプロジェクトを作る。
丸写しでは著者に申し訳ないので、勝ち負けの回数を表示するように手を加えた。

乱数の発生の準備にUIはGameplayKitを最初にインポートする(import GameplayKit)。
次に、let randamSource = GKARC4RandomSource()と書いて、
let <変数名>=randomSource.nextIntWithUpperBound(<乱数の最大値>)を宣言して、switchで場合に分ける。

このコードには独学ではたどり着けなかっただろうなあ。

出来上がりは、こんな感じ。


(じゃんけん弱いなあ、なかなかコンピュータに勝てない)

画像の回転角はラジアンで入力する。
角度の定義は、let angle:CGFloat=CGFloat((180.0 * M_PI)/180.0)で求めて、

image.transform = CGAffineTransformMakeRotation()で回転する。

まだうまくメソッドが書けないので、冗長だけれど、まあ仕方がないかな。
ラベルは全て手動で貼り付けた。配置はオートレイヤーで安直に調整してある。

ボタンを押すと音が出るようにすれば、もっと面白そうだが、まだできない。
もう少し勉強したら、改造したい。

ーーーーーーーーーーーーーーーーーーーー
<備忘録>乱数の学習:じゃんけんゲーム
画像の回転処理も行う。
コード:Xcode 7.11/ Swift2.
ーーーーーーーーーーーーーーーーーーーー
//
// ViewController.swift
// junkenApp
//
// Created yasui_swift on 2015/11/25.
// Copyright © 2015年 darumammz.com. All rights reserved.
//

import UIKit
import GameplayKit

class ViewController: UIViewController {
let randamSource = GKARC4RandomSource()

@IBOutlet weak var computerImage: UIImageView!
@IBOutlet weak var playerImage: UIImageView!
@IBOutlet weak var messageLable: UILabel!
@IBOutlet weak var labelKachi: UILabel!
@IBOutlet weak var labelMake: UILabel!
@IBOutlet weak var labelAiko: UILabel!

var resultKachi:Int = 0
var resultMake:Int = 0
var resultAiko:Int = 0

override func viewDidLoad() {
super.viewDidLoad()
let angle:CGFloat = CGFloat((180*M_PI)/180)
computerImage.transform = CGAffineTransformMakeRotation(angle)

// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func tapStart() {
//イメージビューにグーを表示
computerImage.image = UIImage(named:"gou.png")
playerImage.image = UIImage(named: "gou.png")
messageLable.text = "じゃんけんぽん!"
resultKachi = 0
resultMake = 0
resultAiko = 0
labelKachi.text = String(resultKachi)
labelAiko.text = String(resultAiko)
labelMake.text = String(resultMake)
}
@IBAction func tapGou() {
playerImage.image = UIImage(named: "gou.png")
doComputer(0);
}
@IBAction func tapChoki() {
playerImage.image = UIImage(named: "choki.png")
doComputer(1);
}
@IBAction func tapPaa() {
playerImage.image = UIImage(named: "paa.png")
doComputer(2);
}
func doComputer(player:Int){
let computer = randamSource.nextIntWithUpperBound(3)
var msg = ""

switch computer{
case 0 ://グー
computerImage.image = UIImage(named: "gou.png")
switch player{
case 0 :
msg = "あいこ"
resultAiko = resultAiko + 1
case 1:
msg = "あなたの負け"
resultMake = resultMake + 1
case 2:
msg = "あなたの勝ち"
resultKachi = resultKachi + 1
default:
break
}
case 1://チョキ
computerImage.image = UIImage(named: "choki.png")
switch player{

case 0:
msg = "あなたの勝ち"
resultKachi = resultKachi + 1
case 1:
msg = "あいこ"
resultAiko = resultAiko + 1
case 2:
msg = "あなたの負け"
resultMake = resultMake + 1
default:
break
}
case 2://パー
computerImage.image = UIImage(named: "paa.png")
switch player{

case 0:
msg = "あなたの負け"
resultMake = resultMake + 1
case 1 :
msg = "あなたの勝ち"
resultKachi = resultKachi + 1
case 2:
msg = "あいこ"
resultAiko = resultAiko + 1
default:
break
}
default:
break
}
messageLable.text = msg
labelKachi.text = String(resultKachi)
labelAiko.text = String(resultAiko)
labelMake.text = String(resultMake)

}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー