来自十奶的大作业教学视频。
http://www.swiftv.cn/course/ic2tqzob
主要了解了MVC模型。
首先是View,通过设计mainstoryboard构建UI界面,主要靠拖动,用到了label和button。
接着是model,设计RPS(剪子包袱锤)结构体,见Rps.swift。
1 //
2 // Rps.swift
3 // rockios
4 //
5 // Created by can on 15/11/9.
6 // Copyright (c) 2015年 can. All rights reserved.
7 //
8
9 import Foundation
10
11
12 struct Rps{
13 private var stat:Stats!
14
15 enum Stats {
16 case Rock
17 case Scissor
18 case Paper
19 }
20
21 func getStats () -> Stats {
22 return stat
23 }
24
25 mutating func setStats (inputStat: Stats!) {
26 stat=inputStat
27 }
28
29 func randomRps () -> Stats{ //生成一个随机的手势
30 let randomNumer = arc4random_uniform(3)
31 var randomStat:Stats!
32 switch randomNumer{
33 case 0:
34 randomStat = .Rock
35 case 1:
36 randomStat = .Scissor
37 case 2:
38 randomStat = .Paper
39 default:
40 print("Error")
41 }
42 return randomStat
43 }
44
45 func compare (aRpsStat:Stats, anotherRpsStat:Stats) -> Int {
46 //返回三种状态,0为前者数,1为前者赢,2为平局
47 var result:Int!
48 switch aRpsStat {
49 case .Rock:
50 switch anotherRpsStat{
51 case .Rock:
52 result=2
53 case .Scissor:
54 result=1
55 case .Paper:
56 result=0
57 }
58
59 case .Scissor:
60 switch anotherRpsStat{
61 case .Rock:
62 result=0
63 case .Scissor:
64 result=2
65 case .Paper:
66 result=1
67 }
68
69 case .Paper:
70 switch anotherRpsStat{
71 case .Rock:
72 result=1
73 case .Scissor:
74 result=0
75 case .Paper:
76 result=2
77 }
78
79 }
80 return result
81 }
82
83 }
最后是control,即ViewControl.swift,要和mainstoryboard关联起来,靠outlet和action。
//
// ViewController.swift
// rockios
//
// Created by can on 15/11/9.
// Copyright (c) 2015年 can. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
var rps = Rps();
// outlet and action
@IBOutlet weak var Rock: UIButton!
@IBOutlet weak var Paper: UIButton!
@IBOutlet weak var Scissor: UIButton!
@IBOutlet weak var textUp: UITextField!
@IBOutlet weak var textDown: UITextField!
@IBAction func Rock(sender:AnyObject){
rps.setStats(.Rock)
judgement()
}
@IBAction func Paper(sender:AnyObject){
rps.setStats(.Paper)
judgement()
}
@IBAction func Scissor(sender:AnyObject){
rps.setStats(.Scissor)
judgement()
}
@IBAction func again(sender:AnyObject){
resetAll()
}
//全局初始化
func resetAll(){
textUp.text = ""
textDown.text = ""
rps.setStats(nil)
}
//判断输赢
func judgement () {
let randomRps=rps.randomRps()
let currentStat=rps.getStats()
let result = rps.compare(currentStat, anotherRpsStat: randomRps)
screen(result,stat:currentStat,anotherStat:randomRps)
}
//控制显示的方法
func screen(result:Int,stat:Rps.Stats,anotherStat:Rps.Stats){
var resultString=""
var statString=""
var anotherString=""
switch result{
case 0:
resultString="输"
case 1:
resultString="赢"
case 2:
resultString="竟然平局"
default:
resultString="醉"
}
switch stat{
case .Rock:
statString = "👊"
case .Scissor:
statString = "✌️"
case .Paper:
statString = "✋"
}
switch anotherStat{
case .Rock:
anotherString = "👊"
case .Scissor:
anotherString = "✌️"
case .Paper:
anotherString = "✋"
}
textUp.text = "你" + resultString + "了!"
textDown.text = "你出了" + statString + ",但电脑出了" + anotherString + "!"
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}