上一節課我們第一次領略了 OOP 的風采,於模棱兩可的類和對象究竟是什麼東西呢?這節課我們用一個簡單的小栗子來向你介紹。
嘗試解釋
我們說類和對象的關係是設計圖和產品的關係,就拿我們的房子來說,一棟樓肯定會有對應的設計圖,但設計圖絕不會只能對應一棟樓,至少一個小區肯定會用一套設計圖不是嗎?我們的“類”就是這個“設計圖”。我們用這個設計圖設計了對象的屬性、功能等等的一系列內容,然後通過實例化來產生這個類的對象。
比如我們新建了一個“汽車”的類,然後我們就可以實例化出不同的對象了,比如卡車是汽車,轎車也是汽車。
一個猜數字的小程序
我們來用一個具體的小程序像你說明類和對象的區別——一個遊戲主體的類,一個猜數字的玩家的類:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
// // GuessGame.swift // test // // Created by R0uter on 15/8/2. // Copyright © 2015年 R0uter. All rights reserved. // import Foundation class GuessGame { var p1 = Player() var p2 = Player() var p3 = Player() // 三个玩家的实例 func startGame() { var guessP1 = 0 var guessP2 = 0 var guessP3 = 0 // 储存玩家猜的数字 var p1IsRight = false var p2IsRight = false var p3IsRight = false // 保存玩家是否猜中 let targetNumber = Int (arc4random_uniform(10)) // 生成一个0到9的随机数 print("生成0 - 9的随机数……") while (true) { print("要猜的数字是 \(targetNumber)") p1.guess() p2.guess() p3.guess() // 让三个玩家进行猜测,分别调用他们的 guess() 方法。 guessP1 = p1.number print("玩家1 猜测数字是 \(guessP1)") guessP2 = p2.number print("玩家2 猜测数字是 \(guessP2)") guessP3 = p3.number print("玩家3 猜测数字是 \(guessP3)") // 取出他们猜测的数字 if ( guessP1 == targetNumber) { p1IsRight = true } if ( guessP2 == targetNumber) { p2IsRight = true } if ( guessP3 == targetNumber) { p3IsRight = true } // 进行判断看他们是否猜对,如果猜对则修改对应玩家的属性 if (p1IsRight || p2IsRight || p3IsRight) { print("结果出来了") print("P1 win? \(p1IsRight)" ) print("P2 win? \(p2IsRight)") print("P3 win? \(p3IsRight)") print("GG") break } else { print("没人猜中,再来一次!") } } } } |
接下來是玩家的類:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// // Player.swift // test // // Created by R0uter on 15/8/2. // Copyright © 2015年 R0uter. All rights reserved. // import Foundation class Player { var number = 0 //猜的数字 func guess() { number = Int (arc4random_uniform(10)) print("\(number) ?") } } |
兩個類都搞定了,但是編譯程序發現沒有任何動靜——沒關係,因為我們還沒有告訴系統程序的入口。
找到 main 文件,我們來吧遊戲主體實例化:
1 2 3 4 5 6 |
import Foundation let game = GuessGame() //实例化游戏主体,生成一个游戏的对象 game.startGame() //执行对象中的方法启动游戏 |
這樣,運行後就會有大概如下的結果——由於我們產生了隨機數,所以每次的執行結果都會完全一樣。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
生成0 - 9的随机数…… 要猜的数字是 9 1 ? 1 ? 3 ? 玩家1 猜测数字是 1 玩家2 猜测数字是 1 玩家3 猜测数字是 3 没人猜中,再来一次! 要猜的数字是 9 4 ? 2 ? 6 ? 玩家1 猜测数字是 4 玩家2 猜测数字是 2 玩家3 猜测数字是 6 没人猜中,再来一次! 要猜的数字是 9 8 ? 3 ? 4 ? 玩家1 猜测数字是 8 玩家2 猜测数字是 3 玩家3 猜测数字是 4 没人猜中,再来一次! 要猜的数字是 9 0 ? 1 ? 3 ? 玩家1 猜测数字是 0 玩家2 猜测数字是 1 玩家3 猜测数字是 3 没人猜中,再来一次! 要猜的数字是 9 0 ? 7 ? 4 ? 玩家1 猜测数字是 0 玩家2 猜测数字是 7 玩家3 猜测数字是 4 没人猜中,再来一次! 要猜的数字是 9 1 ? 7 ? 0 ? 玩家1 猜测数字是 1 玩家2 猜测数字是 7 玩家3 猜测数字是 0 没人猜中,再来一次! 要猜的数字是 9 1 ? 4 ? 4 ? 玩家1 猜测数字是 1 玩家2 猜测数字是 4 玩家3 猜测数字是 4 没人猜中,再来一次! 要猜的数字是 9 4 ? 0 ? 3 ? 玩家1 猜测数字是 4 玩家2 猜测数字是 0 玩家3 猜测数字是 3 没人猜中,再来一次! 要猜的数字是 9 7 ? 7 ? 4 ? 玩家1 猜测数字是 7 玩家2 猜测数字是 7 玩家3 猜测数字是 4 没人猜中,再来一次! 要猜的数字是 9 3 ? 9 ? 6 ? 玩家1 猜测数字是 3 玩家2 猜测数字是 9 玩家3 猜测数字是 6 结果出来了 P1 win? false P2 win? true P3 win? false GG Program ended with exit code: 0 |
總結
你看,我們在 GuessGame 類中實際上生成了3個玩家的對象,但實際上我們都是從同一個類生成,我們把這三個玩家的對象叫做“實例“,它們都是 播放機 這個類產生的,但在實際的運行當中,由於它們的屬性各自不同,又不會完全一樣——這就是對象與類的差別。
課後題
這裡有一段被破壞了的代碼文件,我們還記錄著當時運行輸出的結果,現在需要你來把它補齊。
記得每一行只能寫一句代碼喲~否則就算是作弊了!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import Foundation class //这里丢失一行 { var //这里丢失一行 = 0 func //这里丢失一行 { print("hellooooo.....") } } var e1 = Echo() //这里丢失一行 var x = 0 while //这里丢失一行 { e1.hello() //这里丢失一行 if x == 4(还是 x == 3? 看不清楚了) { e2.count = e2.count + 1 } if x > 0 { e2.count = e2.count + e1.count } x = x + 1 } print(e2.count) |
下面是代碼執行後的結果:
1 2 3 4 5 6 |
hellooooo..... hellooooo..... hellooooo..... hellooooo..... 10 Program ended with exit code: 0 |
……對了,如果結果不是10,而是24,那代碼又該如何修改呢?
1 2 3 4 5 6 |
hellooooo..... hellooooo..... hellooooo..... hellooooo..... 24 Program ended with exit code: 0 |
本文由 落格博客 原創撰寫:落格博客 » 猜數字遊戲:類的對象的區別
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1108.html
進口基金會
一流的迴聲 {
變種數= 0
FUNC你好() {
打印(“hellooooo…..”)
}
}
VAR E1 =回應()
VAR E2 =迴聲()
VAR X = 0
然而X < 4 {
e1.hello()
e1.count + = X
e2.count = e2.count + e1.count
X + = 1
}
打印(e2.count)