با سلام و عرض ادب
در درس پیشین با تابع ها و دستورات شرطی آشنا شده اید
حال به نوشتن دومین اپلیکیشن می پردازیم
اسم این اپلیکیشن رو Tapper میزاریم. در این اپلیکیشن در صفحه اول, در فضای خالی عددی را می نویسیم و سپس با زدن کلید play, در صفحه بعد بر روی شکل ستاره, به همان اندازه که عددی را وارد کرده ایم کلیک می کنیم و وقتی به آن عدد رسیدیم, بازی ریست می شود و وارد صفحه سوم می شود, در صفحه سوم نوشته ای روی صفحه وجود دارد که شما برنده هستید و کلیدی برای بازگشت به صفحه اول.
در صفحه دوم نیز نوشته زیر ستاره, تعداد کلیک های فعلی را نشان می دهد و عدد آنقدر بالا می رود که به عدد وارد شده برسد.
برای دانلود شکل المان ها روی این لینک کلیک کنید
برای ایجاد فضای نوشتاری برای نوشتن, text field را از object library جستجو می کنیم.
نوشته صفحه دوم که میزان تپ ها را نشان می دهد یک Label است. مهم نیست چه چیزی در label بنویسید زیرا به صورت یک متغیر خواهد بود و تغییر می کند اما برای اینکه در App layout به مشکل نخورید نوشته ای مشابه با آنچه می خواهیم را می نویسید, به طور مثال
بعد از چیدن تمامی المان و تنظیمان App layout
دو متغیر تعریف می کنیم
maxtaps عددی است که در text field نوشته می شود و currenttaps هم تعداد تپ های ما در صفحه دوم است
در بخش Action, هنگام دادن عملکرد به کلید play, بهتر است تعریف کنیم که اگر بر روی text field عدد صفر وارد شود یا عددی وارد نشود دکمه play عمل نکند و تنها در شرایطی عمل کند که حتما عددی وارد شود و عدد وارد شده بالای صفر باشد. به همین دلیل یک if در action کلید play اضافه می شود دستور به شکل زیر می شود
در این شرط می گوییم اگر نوشته وارد شده در texttaps ( این texttaps در واقع اسم text field است که در بخش outlet به آن نسبت داده ایم ) مساوی با صفر نباشد یا خالی ( "" ) نباشد کارکرد کلید play را انجام بده. کلید play براساس نوشته وارد شده در texttaps کار می کند و خود texttaps نیز می بایست براساس متغیر maxtaps باشد که در اول کار معرفی کردیم. بنابراین در تابع کلید play می بایست این دو را به یکدیگر وصل کنیم
با این دستور می گوییم که maxtaps برابر است نوشته وارد شده در texttpads . این نوشته که در واقع یک عدد است نیز از نوع int می باشد
در هنگام زدین کلید play, متغیر currenttaps نیز باید صفر باشد بنابر این انرا نیز به تابع کلید play اضافه می کنیم
و در نهایت با زدن کلید play, عدد زیر ستاره در صفحه دوم نیز می بایست 0 tabs را نشان دهد. بنابراین یک تابع در جای دیگری درست می کنیم و مشخص می کنیم که نوشته زیر ستاره نخست صفر را نشان دهد و سپس با تغییر متغیر currenttaps عدد آن نیز عوض شود
با ابن دستور می گوییم که taps ( این taps نامی است که به label زیر ستاره نسبت داده شده است ) یک متن است که برابر میزان عددی current taps است و جلوی آن عدد کلمه Taps نیز به صورت ثابت نوشته شود.
این تابع نیز در کلید play فراخوان می شود.
در action بعدی در صفحه دوم و بعد از زدن بر روی ستاره که در اینجا آنرا به نام سکه یا همان coin مشخص کرده ایم دستورات زیر وارد می شود
در اینجا می گوییم که با زدن بر روی این سکه, میزان current taps به علاوه یک شود. یعنی صفر اول با اولین ضربه به عدد یک تغییر پیدا می کند.
در اینجا نیز برای بار دوم تابع آپدیت نوشته زیر سکه را فراخوان می دهیم که با زدن هر کلید, نوشته نیز تغییر پیدا کند. اگر به کد ها دقت کتید دو تابع دیگر نیز فرخوان داده اشت که gameIsOver و winnerAnnouncement نام دارند. تابع آنان به شکل زیر است
اگر متغیر ها را خوانده باشید حتما می دانید که متغیر های نوع Bool نوعی هستند که درست یا نادرست را تشخیص دهند. در این حال می گویید که اگر currenttaps مساوی یا بیشتر از maxtaps شود عملیات مورد خواسته ما درست خواهد بود
و اگر درست باشد کار ادامه پیدا کنید و تابع بعدی که پیرامون معرفی برنده است فراخوان شود
در آخر هم هنگام معرفی action کلید repeart the game که در وقع شما را به صفحه اول باز می گرداند باید مشخص کنیم که بعد از بازگشت به صفحه اول, text field دوباره خالی شود ( وگرنه همان عددی را نشان می دهد که دفعه قبل وارد کرده اید ) و currenttaps و maxtaps نیز دوباره صفر شوند.
ظاهر کار کمی پیچیده به نظر می رسد اما اگر با دقت به منطق کار دقت کنید می بینید که آسان است. نمای کلی کد ها به شکل زیر است
در درس پیشین با تابع ها و دستورات شرطی آشنا شده اید
حال به نوشتن دومین اپلیکیشن می پردازیم
اسم این اپلیکیشن رو Tapper میزاریم. در این اپلیکیشن در صفحه اول, در فضای خالی عددی را می نویسیم و سپس با زدن کلید play, در صفحه بعد بر روی شکل ستاره, به همان اندازه که عددی را وارد کرده ایم کلیک می کنیم و وقتی به آن عدد رسیدیم, بازی ریست می شود و وارد صفحه سوم می شود, در صفحه سوم نوشته ای روی صفحه وجود دارد که شما برنده هستید و کلیدی برای بازگشت به صفحه اول.
در صفحه دوم نیز نوشته زیر ستاره, تعداد کلیک های فعلی را نشان می دهد و عدد آنقدر بالا می رود که به عدد وارد شده برسد.
برای دانلود شکل المان ها روی این لینک کلیک کنید
برای ایجاد فضای نوشتاری برای نوشتن, text field را از object library جستجو می کنیم.
نوشته صفحه دوم که میزان تپ ها را نشان می دهد یک Label است. مهم نیست چه چیزی در label بنویسید زیرا به صورت یک متغیر خواهد بود و تغییر می کند اما برای اینکه در App layout به مشکل نخورید نوشته ای مشابه با آنچه می خواهیم را می نویسید, به طور مثال
کد:
0 taps
دو متغیر تعریف می کنیم
کد:
var maxtaps = 0 var currenttaps = 0
در بخش Action, هنگام دادن عملکرد به کلید play, بهتر است تعریف کنیم که اگر بر روی text field عدد صفر وارد شود یا عددی وارد نشود دکمه play عمل نکند و تنها در شرایطی عمل کند که حتما عددی وارد شود و عدد وارد شده بالای صفر باشد. به همین دلیل یک if در action کلید play اضافه می شود دستور به شکل زیر می شود
کد:
if texttaps.text != nil && texttaps.text != ""
کد:
maxtaps = Int(texttaps.text!)!
در هنگام زدین کلید play, متغیر currenttaps نیز باید صفر باشد بنابر این انرا نیز به تابع کلید play اضافه می کنیم
کد:
currenttaps = 0
کد:
func updateTabsNum() { taps.text = "\(currenttaps) Taps" }
این تابع نیز در کلید play فراخوان می شود.
در action بعدی در صفحه دوم و بعد از زدن بر روی ستاره که در اینجا آنرا به نام سکه یا همان coin مشخص کرده ایم دستورات زیر وارد می شود
کد:
@IBAction func pressCoin(sender: UIButton) { currenttaps = currenttaps + 1 updateTabsNum() if gameIsOver(){ winnerAnnouncement() } }
در اینجا نیز برای بار دوم تابع آپدیت نوشته زیر سکه را فراخوان می دهیم که با زدن هر کلید, نوشته نیز تغییر پیدا کند. اگر به کد ها دقت کتید دو تابع دیگر نیز فرخوان داده اشت که gameIsOver و winnerAnnouncement نام دارند. تابع آنان به شکل زیر است
کد:
func gameIsOver() -> Bool { if currenttaps >= maxtaps { return true } else { return false } }
و اگر درست باشد کار ادامه پیدا کنید و تابع بعدی که پیرامون معرفی برنده است فراخوان شود
کد:
func winnerAnnouncement() { logo.hidden = true playbuttom.hidden = true texttaps.hidden = true coin.hidden = true taps.hidden = true winner.hidden = false gameRepeat.hidden = false }
ظاهر کار کمی پیچیده به نظر می رسد اما اگر با دقت به منطق کار دقت کنید می بینید که آسان است. نمای کلی کد ها به شکل زیر است
کد:
import UIKit class ViewController: UIViewController { //variable var maxtaps = 0 var currenttaps = 0 //outlet //FirstPage @IBOutlet weak var logo: UIImageView! @IBOutlet weak var playbuttom: UIButton! @IBOutlet weak var texttaps: UITextField! //SecondPage @IBOutlet weak var coin: UIButton! @IBOutlet weak var taps: UILabel! //ThirdPage @IBOutlet weak var winner: UILabel! @IBOutlet weak var gameRepeat: UIButton! //Action @IBAction func pressPlay(sender: UIButton) { if texttaps.text != nil && texttaps.text != "" { logo.hidden = true playbuttom.hidden = true texttaps.hidden = true coin.hidden = false taps.hidden = false winner.hidden = true gameRepeat.hidden = true maxtaps = Int(texttaps.text!)! currenttaps = 0 updateTabsNum() } } @IBAction func pressCoin(sender: UIButton) { currenttaps = currenttaps + 1 updateTabsNum() if gameIsOver(){ winnerAnnouncement() } } @IBAction func repeatTheGame(sender: UIButton) { maxtaps = 0 texttaps.text = "" currenttaps = 0 logo.hidden = false playbuttom.hidden = false texttaps.hidden = false coin.hidden = true taps.hidden = true winner.hidden = true gameRepeat.hidden = true } //Functions func updateTabsNum() { taps.text = "\(currenttaps) Taps" } func gameIsOver() -> Bool { if currenttaps >= maxtaps { return true } else { return false } } func winnerAnnouncement() { logo.hidden = true playbuttom.hidden = true texttaps.hidden = true coin.hidden = true taps.hidden = true winner.hidden = false gameRepeat.hidden = false } }