2014年4月26日 星期六

App Inventor 2 的範例程式 - GotMath(4) - 副程式(二)

GotMath是一支數學遊戲程式。

程式功能分析:
本部分將要介紹副程式PR_Calculate與PR_End的功能。
PR_Calculate是計算玩家所輸入的運算式,並判斷遊戲是否有達成結束的前置條件
PR_End是判斷遊戲是否結束。



接續GotMath(3) - 副程式(一),將會完成副程式方塊的介紹。


步驟四(續)


Step 4.5 PR_Calculate:本程式目的是為了進行計算,擁有兩個參數    
參數input為Button的Text,參數sign為Button的Component              
呼叫者:BN_N1~BN_N6、BN_Add、BN_Sub、BN_Mul、BN_Div


Step 4.3.1 PR_Calculate第一部分:儲存


1.把按鈕傳入的input與sign值,也就是按鈕的Text與Componet值分別儲入CalculateList與
   CalculateProcessList
2.為了顯示計算過程,把input值即時儲入對應該運算式Label的Text中
   以Function為LB_FList的index,撈出當前運算式所對應的Lable,將這個Lable的Text設定
   為Lable原本的Text與input合併的字串
   (Function的值介於0~4,由於App Inventor 2的List第一個元素之index為1,需要把
    Function加1才可得到正確的index值)

Step 4.3.2 PR_Calculate第二部分:計算

if的條件式為判斷該運算式是否完整
1.如果變數index為3時,代表這個運算式已經有兩個運算元與一個運算子,即可進行運算
   a.把第一個運算元與運算子從CalculateList中撈出來,分別存入sign與operator
      範例是採用Function乘3加1與加2的方式求出它們的index
      (假如CalculateList有15個元素,因為一個運算式有兩個運算元與一個運算子則1~3為第
       一個運算式的資料,則4~6為第二個運算式的資料,以此類推。由於Function值介於0~4
       所以如果要求第四個運算式的最後兩個資料可分別以Function乘3加1與加2的方式求出
       它們的index)
   b.判別運算子為何後分別下去對sign與operator進行計算,並把結果存入preSol
   c.為了顯示計算結果,需把結果顯示於Label上。由於運算式等號左邊皆已存入Label的Text
      中,故只需再把Label原本的Text與=和preSol合併在一起即可
       (由於加減乘除的程式碼皆同,故以加減為例)
2.如果變數index不為3時,由於運算式不完整,所以變數index值加1
   (圖顯示在PR_Calculate第三部分的最後)


Step 4.3.2 PR_Calculate第三部分:GUI和變數更新與遊戲結束判斷、index不為3時


1.將第一個運算元所在的Button,將其Text清空與Enable設為false
2.第二個運算元所在的Button,將其Text設為preSol的值
3.變數index設為1
4.變數Function值加1
5.判斷變數Function值是否大於等於4:
   a.等於4,代表已完成五個運算式呼叫PR_End副程式判斷遊戲是否結束
   b.不等於4,尚未完成五個運算式
6.最後如果在PR_Calculate第二部分判斷變數index值不為3時,變數index值加1


Step 4.6 PR_End:本程式目的為判斷遊戲是否結束。呼叫者:PR_Calculate

if的條件式為判斷Sol與preSol是否相等
1.如果條件成立,代表玩家已經通過五個運算式獲得與題目一致的答案
   a.呼叫PR_BNshow副程式並給予傳入值false,將GUI設定為遊戲結束的狀態
   b.將BN_Ready的Text設為恭喜

2.如果條件不成立,代表玩家尚未以五個運算式獲得與題目一致的答案
   將BN_Ready的Text設為有誤


GotMath程式第四部分 - 副程式(二)完成

沒有留言:

張貼留言