計(jì)算玩家的分?jǐn)?shù)
現(xiàn)在你已經(jīng)實(shí)現(xiàn)了生成一個(gè)隨機(jī)數(shù)作為目標(biāo)闻牡,以及讀取滑條的值拄氯,現(xiàn)在你應(yīng)該來計(jì)算玩家的得分了啄育。
玩家將滑條的位置拖到離目標(biāo)值越近的位置该窗,就應(yīng)該得越高的分弟蚀,越偏離目標(biāo)則的分應(yīng)越低。
計(jì)算每一回合的分值酗失,你需要觀察滑條的值與目標(biāo)值之間的差值(也就是它們在數(shù)軸上的距離)相差多少义钉。
一個(gè)簡單的方法是對滑條的值和目標(biāo)值進(jìn)行相減的運(yùn)算。
不幸的是规肴,這樣可能會得到一個(gè)負(fù)值當(dāng)滑條位置的值小于目標(biāo)值時(shí)捶闸。
你需要一些方法將這些可能出現(xiàn)的負(fù)值轉(zhuǎn)換為正值夜畴,或者直接將負(fù)值加到用戶的總分里去,介于后者會導(dǎo)致玩家秒刪app删壮,所以我們還是來完成這個(gè)轉(zhuǎn)換吧斩启。
只是用滑條的值(currentValue)減去目標(biāo)值(targetValue)的話,是解決不了這個(gè)問題的醉锅,因?yàn)閠argetValue總是有比currentValue大的時(shí)候兔簇。
嗯~看來我們遇到點(diǎn)麻煩了
練習(xí):如果我要求你解決這個(gè)問題,僅僅是用語言描述不需要寫代碼硬耍,你會提出什么樣的方案呢垄琐?不要擔(dān)心電腦能不能聽懂你說的話,就用口語描述吧经柴,你現(xiàn)在是說給我聽狸窘。
如果是我的話,我會這樣做:
1坯认、如果滑條的值大于目標(biāo)值翻擒,這時(shí)就用滑條的值減去目標(biāo)值。
2牛哺、如果滑條的值小于目標(biāo)值陋气,這時(shí)就用目標(biāo)值減去滑條的值。
3引润、如果兩者相等巩趁,那么差值就為0。
這樣做就不會有負(fù)數(shù)了淳附,因?yàn)楸粶p數(shù)總是大于等于減數(shù)议慰。
來算一算:
如果滑條位置的值是60并且目標(biāo)值是40,那么60-40=20.
如果滑條位置的值是10并且目標(biāo)值是30奴曙,那么30-10同樣等于20.
算法:
剛才你想出的這種東西就叫做算法别凹,算法就是關(guān)于一種解決一系列計(jì)算問題的機(jī)械步驟的術(shù)語。雖然我們剛才的算法極其簡單洽糟,但是這是屬于你在這方面踏出的第一步炉菲。
目前世界上有許多著名的算法,比如快速排序(quicksort)用于將一些列內(nèi)容進(jìn)行排序脊框,還有二進(jìn)制搜索(binary search)用于將搜索這種已經(jīng)排序好的列表颁督。你可以在自己的程序中直接使用這些其他人已經(jīng)發(fā)明好的算法,以便節(jié)省大量自己的腦細(xì)胞浇雹。
然而沉御,在我們這個(gè)游戲app中恐怕你得自己想出一些算法了。其中既有像剛才那樣簡單的昭灵,也有相當(dāng)困難使你絕望的吠裆。不過不用擔(dān)心伐谈,這正是編程的樂趣所在。
計(jì)算機(jī)的學(xué)術(shù)領(lǐng)域主要就是學(xué)習(xí)算法并且簡化它們试疙。
你可以用自己的口語描述任何算法诵棵,它們僅僅是你執(zhí)行某些運(yùn)算的一系列步驟。就像你用手在紙上計(jì)算什么是一樣的祝旷,就像上面我們算60-40一樣履澳。但是有些復(fù)雜的算法用手永遠(yuǎn)也算不完,所以某些情況下你需要把它們寫成代碼怀跛,讓計(jì)算機(jī)去算距贷。
我的建議是:如果你不知道如何讓你的程序去計(jì)算,你可以先拿一張紙吻谋,在紙上寫出計(jì)算的步驟忠蝗,口語化的寫就可以,先把電腦放在一邊不要管漓拾。然后想一想這些步驟阁最,用手算的話應(yīng)該怎么去做?
一旦你適應(yīng)了這種思路骇两,那么你在程序中為自己寫一個(gè)算法就是小菜一碟了速种。
你可以能會有多種方法解決我們剛才的問題,我在這里會給你展示兩種脯颜,但是這次讓我們用代碼來表示它們:
var difference: Int
if currentValue > targetValue {
difference = currentValue - targetValue
} else if targetValue > currentValue {
difference = targetValue - currentValue
} else {
difference = 0
}
"if"結(jié)構(gòu)是一個(gè)新出現(xiàn)的東西哟旗。它允許你的代碼做出選擇,其意思和英語中的if基本相同栋操。大體上講,它的模式如下:
if something is true {
then do this
} else if something else is true {
then do that instead
} else {
do something when neither of above are true
}
if關(guān)鍵字后面跟的就是所謂的邏輯條件饱亮。如果這個(gè)條件被判斷為真矾芙,例如currentValue大于targetValue,那么在兩個(gè)花括號之間的代碼就會被執(zhí)行近上。
然而剔宪,如果這個(gè)條件不是真的,那么電腦就會去看else if的條件是不是為真壹无。也許這里會有多個(gè)else if葱绒,那么電腦就會從上到下的逐一的去判斷每個(gè)else if的條件,直到遇到一個(gè)條件為真的為止。
如果所有的條件都是假的,那么最后一個(gè)else括號中的代碼會被執(zhí)行描睦。
在這個(gè)簡單的算法中孵淘,你首次創(chuàng)建了一個(gè)名為difference的局部變量用于存儲計(jì)算結(jié)果。這個(gè)值只能是正整數(shù)或者0幌氮,所以它應(yīng)該是Int(整數(shù))型的:
var difference: Int
然后你對currentValue和targetValue進(jìn)行減法運(yùn)算剪廉。首先你決定currentValue大于targetValue的情況:
if currentValue > targetValue {
‘>’這個(gè)左開口的三角表示大于操作符质帅。如果currentValue變量中的值確實(shí)大于targetVlaue變量中的值烈疚,那么currentValue > targetValue這個(gè)條件就被判定為真黔牵,那么下面這行代碼就會被執(zhí)行:
difference = currentValue - targetValue
這里你用較大的currentValue減去較小的targetValue并且把差值存儲到變量difference中。
注意一下我是如何選擇變量名稱的爷肝,盡量選擇那些能夠清晰描述這個(gè)變量作用的詞語猾浦。你經(jīng)常會見到以下這種代碼:
a = b - c
這看上去完全不知道它的意圖,除了能看出是在做減法以外灯抛。從變量a金赦、b、c的名稱上得不到任何線索表明它們的作用牧愁。
回到我們的Swift語句素邪。如果currentValue小于或等于targetValue,那么上面的條件就為假了并且程序會跳過條件后面花括號內(nèi)的代碼猪半,進(jìn)入到下一個(gè)條件判斷:
} else if targetValue > currentValue {
這里發(fā)生的事情和之前一樣兔朦,除了targetValue和currentValue的位置調(diào)換了。只有當(dāng)targetValue的值大于currentValue的值時(shí)磨确,電腦才執(zhí)行后面花括號內(nèi)的代碼:
difference = targetValue - currentValue
這一次你用targetValue減去currentValue并且將結(jié)果存儲到difference變量中沽甥。
到現(xiàn)在為止只剩一種情況你沒有處理了,就是targetValue和currentValue相等的時(shí)候乏奥。當(dāng)玩家正好將滑條拖到等于目標(biāo)值當(dāng)位置的時(shí)候摆舟,就會出現(xiàn)這種情況,完美的得分邓了。在這種情況下difference的值為0恨诱。
} else {
difference = 0
}
此時(shí),這兩個(gè)數(shù)誰也不比誰大骗炉,誰也不比誰小照宝,只給你留個(gè)一個(gè)選擇,它們一定相等句葵。
讓我們把這個(gè)算法放到動作里去厕鹃。在showAlert()的頂部添加如下代碼:
@IBAction func showAlert() {
var difference: Int
if currentValue > targetValue {
difference = currentValue - targetValue
} else if targetValue > currentValue {
difference = targetValue - currentValue
} else {
difference = 0
}
let message = "The value of the slider is: \(currentValue)" + "\nThe traget value is: \(targetValue)" + "\nThe difference is:\(difference)"
. . .
}
為了觀察這個(gè)算法的效果,你將difference的值顯示在提醒窗口的消息里乍丈。
運(yùn)行app并且觀察一下:
另一種計(jì)算difference的方法
我之前提到過剂碴,這里有其他的方法計(jì)算currentValue和targetValue的差值,并且保證其結(jié)果為正數(shù)轻专。剛才的算法雖然工作的不錯(cuò)忆矛,但是它有好幾行代碼。我想我們應(yīng)該用一些簡單的方法铭若,減少幾行代碼洪碳。
新的算法思路如下:
1递览、用滑條的值減去目標(biāo)值(currentValue - targetValue)
2、如果結(jié)果是負(fù)數(shù)瞳腌,那么就讓它乘以-1绞铃,這樣把它變成正數(shù)。
你不在費(fèi)勁避免出現(xiàn)負(fù)數(shù)了嫂侍,只是當(dāng)電腦計(jì)算出負(fù)數(shù)的時(shí)候儿捧,你就將它轉(zhuǎn)換為正數(shù)。
練習(xí):自己改造一下代碼實(shí)現(xiàn)這個(gè)目的挑宠。線索:剛才我們的思路中包含了“如果”和“那么”這兩個(gè)詞菲盾,這是一個(gè)相當(dāng)不錯(cuò)的指示,你應(yīng)該在代碼里使用if語句各淀。
你應(yīng)該會得到類似下面的語句:
var difference = currentValue - targetValue
if difference < 0 {
difference = difference * -1
}
這就是將新的算法簡潔了當(dāng)?shù)姆g為代碼的結(jié)果懒鉴。
首先你對這兩個(gè)數(shù)進(jìn)行相減,然后將結(jié)果存儲到difference變量里碎浇。當(dāng)difference小于0時(shí)临谱,乘以-1,將它轉(zhuǎn)換為正數(shù)奴璃。
注意一下悉默,你在一行代碼里完成了創(chuàng)建difference變量并且將一個(gè)結(jié)算結(jié)果分配給它。完全不需要把它們寫成兩行苟穆,比如:
var difference: Int
difference = currentValue - targetValue
并且在一行版本里抄课,你也并沒有告訴編譯器difference是Int(整數(shù))類型的數(shù)據(jù)。因?yàn)閏urrentValue和targetValue都是Int型的雳旅,所以我們聰明的Swift可以自動判斷currentValue-targetValue也是Int型的跟磨,那么difference當(dāng)然也是Int型的。
這個(gè)特點(diǎn)被稱作‘類型推斷’攒盈,這只是Swift眾多優(yōu)點(diǎn)中的一點(diǎn)吱晒。
當(dāng)你有了計(jì)算結(jié)果以后,你使用了一個(gè)if語句判斷difference是否是負(fù)數(shù)(小于0)沦童。如果是,則將這個(gè)結(jié)果乘以-1叹话,從而得到一個(gè)正數(shù)偷遗。讓我們回到difference變量。
當(dāng)你寫到:
difference = difference * -1
這時(shí)電腦先將difference的值乘以-1驼壶,然后再將這個(gè)計(jì)算結(jié)果放回到difference里氏豌。所以我們看到的效果就是,通過這一運(yùn)算热凹,difference中的負(fù)值被一個(gè)正數(shù)覆蓋掉了泵喘。
這是一種常見的運(yùn)算泪电,你可以將它簡寫為:
difference *= -1
*=操作符結(jié)合了*和=兩個(gè)獨(dú)立的操作符,他們的計(jì)算結(jié)果是一樣的
其實(shí)你也可以寫成下面這個(gè)樣子:
var difference = currentValue - targetValue
if difference < 0 {
difference = -difference
}
用負(fù)號操作符代替乘以-1纪铺,也可以保證difference絕對是一個(gè)正數(shù)相速,因?yàn)樨?fù)負(fù)得正(如果你不相信的話,可以去問問數(shù)學(xué)專家)鲜锚。
試一試我們新的算法突诬。將showAlert()改成下面這個(gè)樣子:
@IBAction func showAlert() {
var difference = currentValue - targetValue
if difference < 0 {
difference = difference * -1
}
. . .
}
保存并運(yùn)行一下這個(gè)新的版本,它的表現(xiàn)應(yīng)該和之前的沒有差別芜繁。電腦的計(jì)算結(jié)果并未改變旺隙,只是你的算法稍有不同。
最后我們在推薦一個(gè)算法骏令,使用一個(gè)函數(shù)來完成這個(gè)功能蔬捷。
你之前已經(jīng)見過幾次函數(shù)了:當(dāng)你生成一個(gè)隨機(jī)數(shù)時(shí)用到的arc4random_uniform()以及用來給滑條的值取整的lroundf()。
為了確保計(jì)算結(jié)果為正數(shù)榔袋,你可以使用abs()這個(gè)函數(shù)周拐。
如果你在學(xué)校里學(xué)過數(shù)學(xué),那么也許你依稀記得一個(gè)術(shù)語叫做‘絕對值’摘昌,就是一個(gè)不需要關(guān)心它正負(fù)號的數(shù)值速妖。
這正是你所需要的,并且標(biāo)準(zhǔn)函數(shù)庫里給你提供了一個(gè)現(xiàn)成的函數(shù)聪黎,使用它你就可以將最終的解決方案縮減到一行代碼里罕容。
let difference = abs(targetValue - currentValue)
你用誰減去誰已經(jīng)不在重要了。如果結(jié)果為負(fù)值稿饰,那么abs()函數(shù)會將其轉(zhuǎn)換為正數(shù)锦秒。這是需要記住的一個(gè)便利的函數(shù),你會經(jīng)常用到它喉镰。
改一下showAlert()旅择,并且運(yùn)行app試試效果:
@IBAction func showAlert() {
let difference = abs(targetValue - currentValue)
let message = . . .
}
已經(jīng)改的簡單的不能再簡單了。
練習(xí):我們還改了其他一些小地方侣姆,你注意到了嗎生真?
答案:你用let difference代替了var difference。
變量(variables)和常量(constants)是有區(qū)別的捺宗,和變量不同柱蟀,常量的值不可以發(fā)生變化(看名字就知道了,constants)蚜厉。
在常量這種盒子里长已,你只能放一次東西進(jìn)去,并且不能在之后用其他東西去替換它。
變量用關(guān)鍵字var定義术瓮,常量用關(guān)鍵字let定義】的簦現(xiàn)在difference已經(jīng)是一個(gè)常量了,不再是變量胞四。
在之前幾個(gè)版本的算法里恬汁,difference的值可能會發(fā)生改變。如果為負(fù)值的話撬讽,你就要將它轉(zhuǎn)換為正值蕊连。這就需要difference必須是一個(gè)變量,因?yàn)橹挥凶兞坎拍鼙环峙湫碌闹堤娲f的值游昼。
現(xiàn)在你在一行代碼內(nèi)計(jì)算了全部所需內(nèi)容甘苍,difference在得到一個(gè)值以后再也不會發(fā)生變化,所以此時(shí)最好將它定義為一個(gè)常量烘豌。(這樣可以使你的意圖更加清晰载庭,并且使Swift的編譯器更好的理解你的代碼)
出于同樣原因,message廊佩,alert以及action都是常量(并且始終獨(dú)立存在)∏艟郏現(xiàn)在你知道為什么聲明這些對象時(shí)用的都是let關(guān)鍵字了,因?yàn)橐坏┧鼈儽毁x了一個(gè)值标锄,就再也不需要改變了顽铸。
常量在Swift中使用非常頻繁。你經(jīng)常只需要暫時(shí)的保存一個(gè)值料皇,如果在此期間這個(gè)值不需要發(fā)生變化谓松,那么它雖好被聲明為常量而不是變量。
如何計(jì)算玩家的得分践剂?
現(xiàn)在你已經(jīng)知道了滑條位置和目標(biāo)值的差值鬼譬,這樣計(jì)算玩家的分?jǐn)?shù)就簡單多了。
將showAlert()修改為下面這樣:
@IBAction func showAlert() {
let difference = abs(targetValue - currentValue)
let points = 100 - difference
let message = "Your scored \(points) points"
. . .
}
你可以得到的最高分?jǐn)?shù)為100逊脯,如果你正好將滑條拖到和目標(biāo)值一樣的位置時(shí)优质,此時(shí)difference為0。而里目標(biāo)值越遠(yuǎn)則得分越低军洼。
運(yùn)行app試試看你能得多少分巩螃?
練習(xí):因?yàn)榛瑮l的最大值為100,最小值為1匕争,最大差值為100 - 1 = 99牺六。這意味著你能得到的最低分為1分。試著解釋下這是為什么(這需要點(diǎn)數(shù)學(xué)常識)汗捡。
累計(jì)玩家的總分
在這個(gè)游戲里,你需要在屏幕上展示玩家得到的總分。在每一回合結(jié)束后扇住,這個(gè)app應(yīng)該添加最后一次得分到總分里并且之后更新得分的標(biāo)簽(score label)春缕。
在ViewController.swift中添加一個(gè)新的實(shí)例變量score:
class ViewController: UIViewController {
@IBOutlet weak var slider: UISlider!
@IBOutlet weak var targetLabel: UILabel!
var currentValue: Int = 50
var targetValue: Int = 0
var score = 0 //添加這一行
這是怎么回事?和之前的兩個(gè)變量不一樣艘蹋,你沒有指定score的類型為Int锄贼。
如果你沒有指定數(shù)據(jù)類型,Swift就會使用類型推斷來定位它的數(shù)據(jù)類型女阀。因?yàn)?是一個(gè)整數(shù)宅荤,Swift就會推定score應(yīng)該是Int類型的數(shù)據(jù),并且自動將score設(shè)置為Int(整數(shù))型浸策。
實(shí)際上冯键,你也不需要指定前兩個(gè)變量的數(shù)據(jù)類型:
var currentValue = 50
var targetValue = 0
按照上圖改一下這兩行代碼。
感謝類型推斷庸汗,你僅需要在變量沒有初始值的時(shí)候指出變量的數(shù)據(jù)類型惫确。但是大多數(shù)時(shí)候,你可以安全的讓Swift自己去猜變量的類型蚯舱。
我覺得Swift的類型推斷功能相當(dāng)親民改化!它可以明顯的減少你的打字工作。
現(xiàn)在來修改showAlert()枉昏,讓它可以記錄總分:
@IBAction func showAlert() {
let difference = abs(targetValue - currentValue)
let points = 100 - difference
score += points //添加這一行
let message = "Your scored \(points) points"
這里沒有啥新東西陈肛,你只是添加了這樣一行:
score += points
其作用是將玩家每一回的的得分加到總分里去,你也可以寫成下面這個(gè)樣子:
score = score + points
個(gè)人而言兄裂,我喜歡+=這個(gè)版本句旱,但是后一種版本也沒問題。它們完成的工作是一樣的懦窘。
將總分顯示在屏幕上
你要做的事情和你在target label上做的一模一樣:鏈接score label到outlet并且將score的值放到這個(gè)label的文本中前翎。
練習(xí):看看在沒有我的幫助下你自己能不能完成這個(gè)工作。你以前已經(jīng)對target label操作過一次了畅涂,所以你應(yīng)該能夠在score label標(biāo)簽上重復(fù)一遍這個(gè)步驟港华。
以下步驟都應(yīng)該是你熟悉的,首先在ViewController.swift中添加這么一行:
@IBOutlet weak var scoreLabel: UILabel!
然后你打開storyboard并且將這個(gè)標(biāo)簽鏈接到這個(gè)新的scoreLabel outlet(就是寫著999999的那個(gè)標(biāo)簽)午衰。
不確定如何連接到outlet立宜?這里有好幾種方法用于連接用戶接口對象(user interfae objects)到view controller的outlet。
注意:下面的1臊岸,2橙数,3不是步驟,而是三種方法帅戒。
1灯帮、按住ctrl點(diǎn)擊標(biāo)簽(999999的那個(gè))然后會彈出一個(gè)菜單崖技。然后在彈出菜單上拖拽New referencing Outlet到View Controller,然后在彈出的小菜單上選擇score label(我們對slider就是這樣做的)钟哥。
2迎献、打開鏈接檢查器標(biāo)簽。然后拖拽New referencing Outlet到View Controller腻贰,然后在彈出的小菜單上選擇score label(我們對target label就是這樣做的)吁恍。
3、按住ctrl從View Controller(黃色圖標(biāo)的那個(gè))往標(biāo)簽上拖(我們這次試試這種新方法)播演;注意:直接在標(biāo)簽上按住ctrl拖拽到view controller是沒有用的冀瓦,不要弄反了。
看到了嗎写烤,我們有多種方法用于連接outlet翼闽。
現(xiàn)在scoreLabel的outlet已經(jīng)有了,非常棒顶霞,你可以往這個(gè)標(biāo)簽的文本里寫值了現(xiàn)在肄程。我們應(yīng)該把相關(guān)的代碼寫在什么地方呢?當(dāng)然是updateLabels()里面了选浑。
回到ViewController.swift,將updateLabels()改為下面這個(gè)樣子:
func updateLabels() {
targetLabel.text = String(targetValue)
scoreLabel.text = String(score)
}
這里沒有任何新東西蓝厌,你將score,一個(gè)Int型的值轉(zhuǎn)換為String型的古徒,然后將它存儲到這個(gè)標(biāo)簽的文本中拓提。
運(yùn)行app并且確認(rèn)無論何時(shí)你點(diǎn)擊Hit Me時(shí)每一回合的分?jǐn)?shù)都會加到總分中。
關(guān)于回合:
說到回合隧膘,當(dāng)玩家開始新的一個(gè)回合的時(shí)候代态,你也需要將回合數(shù)進(jìn)行累加。
練習(xí):跟蹤目前回合數(shù)的值(起始為1)疹吃,并且每一新回合開始時(shí)蹦疑,對它進(jìn)行+1,并且將這個(gè)數(shù)顯示到屏幕上對應(yīng)的標(biāo)簽里萨驶。也許我應(yīng)該在這里多講一些歉摧,再帶帶你,但是假如你已經(jīng)理解并吸收了之前的內(nèi)容的話腔呜,你已經(jīng)有了足夠多手段來實(shí)現(xiàn)這個(gè)目的叁温,祝你好運(yùn)!
如果你已經(jīng)想到這里要用一個(gè)新的實(shí)例變量核畴,那么你已經(jīng)接近成功了膝但。你應(yīng)該在源代碼中添加下面這一行:
var round = 0
如果你想把數(shù)據(jù)類型的名稱也加進(jìn)去,也是可以的谤草,雖然并沒有必要這樣做:
var round: Int = 0
再來一個(gè)outlet給這個(gè)標(biāo)簽:
@IBOutlet weak var roundLabel: UILabel!
和之前一樣跟束,你需要連接這個(gè)標(biāo)簽到Interface Builder的outlet莺奸。
??:不要忘記這些連接
忘記這些連接是新手常犯的一個(gè)錯(cuò)誤,特別是對現(xiàn)在的你而言泳炉。
我常常在為一個(gè)button寫好outlet以及處理用戶點(diǎn)擊后的代碼以后憾筏,在測試app時(shí)發(fā)現(xiàn)寫好的代碼都沒有生效,然后我不得不花時(shí)間去努力的檢查問題花鹅,最終發(fā)現(xiàn)是我忘記了連接這些buttom到outlet或者action method(動作方法)。
最終枫浙,updateLabels()應(yīng)該是這樣的:
func updateLabels() {
roundLabel.text = String(round)
targetLabel.text = String(targetValue)
scoreLabel.text = String(score)
}
同時(shí)你能指出應(yīng)該在哪里對round變量進(jìn)行累加了嗎刨肃?
要我說的話,startNewRound()就是個(gè)理想的地方箩帚。畢竟無論何時(shí)真友,玩家開始新一回合的時(shí)候,你都要調(diào)用它紧帕。所以我們應(yīng)該在這里對round變量進(jìn)行累加盔然。
將startNewRound()改成下面這個(gè)樣子:
func startNewRound() {
round += 1 \\添加這一行
targetValue = 1 + Int(arc4random_uniform(100))
currentValue = 50
slider.value = Float(currentValue)
}
注意一下,你在定義round變量的時(shí)候是嗜,它的默認(rèn)值為0愈案。因此,當(dāng)app啟動時(shí)鹅搪,它的值初始化為0站绪。當(dāng)你第一次調(diào)用startNewRound()時(shí)(在viewDidLoad()中),它被加1丽柿,這樣你在屏幕上就看到第一回合的round值是1了恢准。
運(yùn)行app試一試,無論何時(shí)你點(diǎn)擊Hit Me按鈕后甫题,round的值都會被加1馁筐,并且顯示在屏幕上。
你可以在04-Rounds and Score中找到源代碼坠非,如果你做出來的效果不是這樣敏沉,你可以對照我的代碼看看你漏掉了什么。附件請支持正版_
希望我們的文章對你的求學(xué)之路提供了切實(shí)的幫助麻顶,由于我是個(gè)人翻譯赦抖,所以進(jìn)度無法太快,但是我可以保證每周至少更新一節(jié)課辅肾,同時(shí)也希望大家能心疼我一下队萤,點(diǎn)擊一下下方的打賞_,讀者的認(rèn)可矫钓,就是我最大的動力要尔。