期中測驗-Swift UIKit iOS App 入門測驗 1-中英選擇題App
打鐵趁熱花了快四五天終於慢慢了解傳資料的皮毛了,終於可以來做這個好玩的測驗啦~~
先看看成品!
期中作業功能需求
- 製作選擇題 App,每題有四個選項。
- 答對一題加 10 分 。
- 畫面上顯示目前題目是第幾題。
- 自訂選擇題的資料型別。
- 題庫有 n 題,隨機出其中的 10 題,每次玩的時候題目順序都不一樣。( n > 10 )
- 包含多個頁面,至少有問題頁面和分數頁面。
- 利用 IBSegueAction & performSegue 將結果從問題頁傳到分數頁。
- 使用 UIAlertController 顯示 alert。
App架構介紹
Storyboard
- 總共有兩種遊戲測驗可以玩,遊玩者可根據想玩的遊戲切換至不同頁面
- 遊玩結束時,可以根據使用者答對幾題得幾分且顯示至同一頁面
Code
這裡我主要講資料的設定,相關的Code以及邏輯可以下載我的Github裡面有完整註解!!
以下總共有四個Controller以及Model類型跟QuestionData(資料)
QAModel:文字題目以及進行遊戲的兩個類別
EnglishQuestion:遊戲所需資料
ChineseQuestion:遊戲所需資料
QuestionStruct:定義我們需要的資料型別
Controller
這裡說明ChineseCtroller跟EnglishController一樣最後都會顯示結果跳轉至ResultCotroller,所以我就介紹ChineseCtroller&ViewController&ResultController。至於EnglishController跟ChineseCtroller的Code一樣。
viewCtroller:
設定兩個Button:
chineseButton
englishButton
viewCtroller->Code:
- 利用enum列舉出題目類型(中文&英文)
- 設置資料: CHQuestionData(),ENQuestionData(),[Question]()
拉SegueAction->
將問題資料分別傳入至ChineseController&EnglishController
每次資料傳給下一頁時,removeAll()淨空,避免累加
fuuc ->
將問題隨機打散shuffle()
ChineseCtroller:
選擇問題按鈕Button : optionsButton
得分Label: score(Int)
得分:Label
問題:Label
問題題號:questionNumberLabel
問題題目:questionLabel
ChineseCtroller->Code:
這裡最重要的是接收viewController裡的資料,並且抓取QAModel裡的Game
viewDidLoad()裡的code
updateQuestion()&updateUI是func我獨立寫出來在QAModel裡,因為每次回答完都需要更新,所以我就綁在一起!
Action->optionsButton(四個選項)
每次回答完都會告訴(alert)遊玩者是否答對,若答錯顯示(alert)出正確答案
使用Button屬性的tag來判斷array[]是否為真,若為真則分數+10分
並alert出遊玩者,若回答完10題則結束遊戲並透過segue跳轉至ResultController
拉IBSegueAction->
跳轉之後接收分數至ResultController
func->alert()
ResultCtroller:
score:Label
score(Int):Label
Result(String):Label
Button:重新測驗
ResultCtroller->Code
之後EnglishController跟Chinese一樣我就不多介紹啦!!
最後附上GitHub: